【MySQL_学习笔记】2021.8.18
- 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 语句默认使用内连接(INNER JOIN)
(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,score FROM 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 transactions ON 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
备注:inner join 不只可以根据单一的字段进行关联,对于两个表之间需要通过两个或更多字段相关联的情况,可以使用 AND 将所有需要的关联条件相连接

浙公网安备 33010602011771号