1. 程式人生 > 其它 >sql查詢from多表的騷操作

sql查詢from多表的騷操作

我們在進行多表查詢的時候通常用到的方式是inner join內連線或者left join ,right join 左右連線,其實還有一種更簡單的方法,但是這個方法呢比較不規範。而且效能略低,不太適用於大量資料的查詢場景。我們直接看示例:

運營想要檢視參加了答題的山東大學的使用者在不同難度下的平均答題題目數,請取出相應資料

user_profile
id device_id gender age university gpa active_days_within_30 question_cnt answer_cnt
1 2138 male 21 北京大學 3.4 7 2 12
2 3214 male NULL 復旦大學 4 15 5 25
3 6543 female 20 北京大學 3.2 12 3 30
4 2315 female 23 浙江大學 3.6 5 1 2
5 5432 male 25 山東大學 3.8 20 15 70
6 2131 male 28 山東大學 3.3 15 7 13
7 4321 male 28 復旦大學 3.6 9 6 52
question_practice_detail
id device_id question_id result
1 2138 111 wrong
2 3214 112 wrong
3 3214 113 wrong
4 6534 111 right
5 2315 115 right
6 2315 116 right
7 2315 117 wrong
8 5432 117 wrong
9 5432 112 wrong
10 2131 113 right
11 5432 113 wrong
12 2315 115 right
13 2315 116 right
14 2315 117 wrong
15 5432 117 wrong
16 5432 112 wrong
17 2131 113 right
18 5432 113 wrong
19 2315 117 wrong
20 5432 117 wrong
21 5432 112 wrong
22 2131 113 right
23 5432 113 wrong
question_detail
id question_id difficult_level
1 111 hard
2 112 medium
3 113 easy
4 115 easy
5 116 medium
6 117 easy

三張表我們要查詢出的最終結果為:

university difficult_level avg_answer_cnt
山東大學 easy 4.5000
山東大學 medium 3.0000

一半我們的想法是通過內連線或者左連線進行連表,這裡我們還有另外一種方法:

select u.university,qd.difficult_level,
count(qpd.question_id) / count(distinct(qpd.device_id)) as avg_answer_cnt
from user_profile as u,
question_practice_detail as qpd,
question_detail as qd
where u.university = '山東大學'
and u.device_id = qpd.device_id
and qpd.question_id = qd.question_id
group by qd.difficult_level;

其實這種方法也是內連線,只是我們沒有通過inner join 。但是呢,這種方式效能上略差於左連線。所以不推薦經常使用這種方法