SQL CROSS JOIN 用法 (交叉連接)
此用法是使用 笛卡爾乘積(Cartesian product), 兩個資料表再結合時,不限定任何條件,即會將兩個資料表之間的所有組合列出來
CROSS JOIN 語法 (SQL CROSS JOIN SYNTAX)
(1)
SELECT table_column1, table_column2...
FROM table_name1
CROSS JOIN table_name2;
(2)
SELECT table_column1, table_column2...
FROM table_name1, table_name2;
(3)
SELECT table_column1, table_column2...
FROM table_name1
JOIN table_name2;
此篇參考學習文章: https://www.fooish.com/sql/cross-join.html (裡面有實際表格示範CROSS JOIN用法)
學習筆記:
此次作業練習題是SQL DAY 13 A3.1 語法分析,需要算出Tourist 和Career Switch 繳交作業數和應繳作業數
其中應繳作業數,需要算出總共有幾個作業? 和10-12月班裡的 Career Switcher 和 Tourist 的人數,再相乘。
但是這樣無法一個SQL query 解決
所以在這裡就需要用CROSS JOIN 的用法,這邊會學著跟Model Answer 一樣使用JOIN 但不設定條件 (不使用ON) 去讓兩個表單作所有排列的組合
SELECT `學習目標`, COUNT (t5.id) AS "應繳交作業數"
FROM table1students AS t1
JOIN table2demographic AS t2 ON t1.id = t2.student_id
JOIN table5assignments AS t5
WHERE t1.`班級` IN ('10月班','11月班','12月班')
GROUP BY `學習目標`;
上述紫色的JOIN 是將 t1 表單與 t2 表單做結合,並且有使用ON 去設定條件是使用t1.id = t2.student_id
第二個橘色的JOIN 是用上面所有的學生id的表單 去JOIN t5 ,所以會先篩選出10-12月班級學生 (student.id)
(因為SQL 執行的順序是 FROM --> JOIN -->WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY)
GROUP BY 在按學習目標分類 Tourist, Learner, Career Switch (算出各學習目標的學生)
SELECT 選取 COUNT計數 assignment_id (各學習目標的學生 JOIN 算出作業總數15個) 交叉連接相乘
在SQL中,如果使用JOIN 但不用ON就等於使用CROSS JOIN。結果就可以每一個學生對應出15個不同的作業編號
10-12月班級的學生裡學習目標的Career Switch裡有 403人* 15個作業 = 應繳作業 6045個
留言列表