【MySQL_學習筆記】2021.8.18
阿新 • • 發佈:2021-08-23
- JOIN 連線
SELECT * FROM student JOIN score ON student.s_id = score.s_id
SELECT * FROM student INNER JOIN score ON student.s_id = score.s_id
備註:
(1)JOIN表示加入、連線;ON表示基於...什麼,在...之上,該連線形式稱為內連線或等值連線
(2)在SQL中除了內連線之外還有左連線、右連線等其他形式的連線,由於內連線是最常用的一種形式,所以JOIN語句預設使用內連線(INNERJOIN)
(3)如果在JOIN語句中不指定連線條件,就會形成“全連線”,生成巨大的新表,這種全連線操作,又稱為“笛卡爾積”
SELECT student.s_id,s_name,email,c_id,score FROM student INNER JOIN score ON student.s_id = score.s_id
SELECT B.s_id,s_name,email,c_id,score FROM student AS A INNER JOIN score AS B ON A.s_id = B.s_id
SELECT B.s_id,s_name,email,c_id,scoreFROM student AS A , score AS B WHERE A.s_id = B.s_id
備註:
(1)由於在多表連線操作中,連線後的表中,可能存在來自不同表的同名欄位,因此使用“表名.欄位名”加以區分。為縮短長度或對同一張表“自連線”,可以使用AS給每個原始表起別名
(2)SQL為內連線提供了簡化寫法,使用逗號表示JOIN,WHERE表示ON
- 內連線的設計思路
SELECT client_name, phone, ROUND(SUM(money),2) AS 收款總額 FROM (clients INNER JOIN transactionsON clients.client_id = transactions.to_client) WHERE client_name = '金成文'
備註:ROUND(欄位名,保留幾位小數)函式對指定欄位進行四捨五入
SELECT client_name, phone, ROUND(SUM(money),2) AS 收款總額 FROM (clients INNER JOIN transactions ON clients.client_id = transactions.to_client) GROUP BY to_client
SELECT client_name, phone, ROUND(SUM(money),2) AS 收款總額 FROM (clients INNER JOIN transactions ON clients.client_id = transactions.to_client) WHERE MONTH(tran_time) = 9 GROUP BY to_client, client_name, phone
SELECT client_name, phone, ROUND(SUM(money),2) AS 收款總額 FROM clients , transactions WHERE clients.client_id = transactions.to_client AND MONTH(tran_time) = 9 GROUP BY to_client, client_name, phone
備註:對於同時使用了連線查詢與過濾分組語句的查詢可以使用where子句進行簡化,將多個where語句合併為一個子句
SELECT client_id,client_name,open_time,clients.phone FROM clients INNER JOIN cheats ON clients.client_name = cheats.cheat_name AND clients.phone = cheats.phone
備註:innerjoin不只可以根據單一的欄位進行關聯,對於兩個表之間需要通過兩個或更多欄位相關聯的情況,可以使用AND將所有需要的關聯條件相連線