oracle數據庫之多表查詢二


多表查詢解題思路:

1.分析題目要查詢的結果涉及到那幾張表

2.將每張表建立關聯條件,否則會產生笛卡爾積

3.分清楚查詢的條件,然后使用and將條件鏈接

4.涉及到分組查詢的需要使用聚合函數

5.分組之后的過濾使用having 

--練習題:

--查詢706班每位同學的沒門課程的分數

1.首先題目涉及到班級表、學生表、課程表、分數表我們需要先將四張表進行關聯,sql如下:

select * from t_class; select * from t_Student; select * from t_course; select * from t_score;

2.我們需要將每張表建立起關聯,比如題目中涉及的班級表、學生表、課程表、分數表。然后通過查看表中的主鍵和外鍵、有studentid,classid,courseid幾個主鍵,所以我們可以通過這些主鍵將這四張表進行關聯。我們先看第一種的查詢方法,也是最常使用的。sql如下

select * from t_class t1,t_student t2,t_course t3,t_score t4 where t1.classid=t2.classid and t2.studentid=t4.studentid and t4.courseid=t3.courseid; --我們關聯以后,會發現一個問題。查詢后的結果是所有班級的學生成績和信息。但是我們題目中的要求是讓我們查詢706班的,所以顯然這么寫是不對的,我們繼續往下看:

查詢結果如下:

我們需要在查詢的結果中在進行一次條件過濾,記住過濾使用的是and。如下所示:

select * from t_class t1,t_student t2,t_course t3,t_score t4 where t1.classid=t2.classid and t2.studentid=t4.studentid and t4.courseid=t3.courseid and t1.classid=1; --我們最后使用and將要查詢的706班的主鍵classid進行過濾,記住一般過濾都是使用的是主鍵過濾哦。。。

這時候我們繼續查看查詢結果:

這回終於查詢正確了,所以回過頭來我們看看,總結一下,這道題的套路:1.先分析幾張表 2.關聯 3.篩選題目中要的結果   好了,我們繼續看第二種的變態方式是如果實現的我們使用 inner join on的方法來實現這道題。

select * from t_class t1 inner join t_student t2 on t1.classid=t2.classid inner join t_score t4 on t2.studentid=t4.studentid inner join t_course t3 on t3.courseid=t4.courseid and t1.classid=1;

查詢結果如下:

ok,我們知道了第一道題的解題思想,那么第二道題應該就是一帶而過~~~

--查詢每位同學沒門課程的分數

--查詢每位學生的每門課程分數 select * from t_student t1,t_course t2,t_score t3 where t1.studentid=t3.studentid and t2.courseid=t3.courseid;

查詢結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM