close

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個

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Cheryl Lee 的頭像
    Cheryl Lee

    Ruei's Diary

    Cheryl Lee 發表在 痞客邦 留言(0) 人氣()