【MySQL_学习笔记】2021.8.19
- 多层复杂连接
 
SELECT * FROM student INNER JOIN score ON student.s_id = score.s_id
SELECT * FROM student INNER JOIN score ON student.s_id = score.s_id INNER JOIN course ON score.c_id = course.c_id
INNER JOIN 在使用时遵循的原则:
(1)每个 INNER JOIN 只能连接两张表;
(2)多次 INNER JOIN 可以连接多张表;
(3)过多连接会影响性能,一般不超过3层。
SELECT student.s_id, s_name, c_name, score, points FROM student INNER JOIN score ON student.s_id = score.s_id INNER JOIN course ON score.c_id = course.c_id ORDER BY student.s_id
备注:在多表连接查询中可以使用 AS 对参与连接的表取别名,如果需要对同一张表进行两次或两次以上次数的连接时,必须对表取别名加以区分,否则SQL语句会报错,无法顺利执行查询
SELECT clients.client_name AS 骗子,tran_time AS 交易日期,a.client_name AS 受害人, money AS 诈骗金额 FROM clients INNER JOIN cheats ON client_name = cheat_name AND clients.phone = cheats.phone INNER JOIN transactions ON transactions.to_client = clients.client_id INNER JOIN clients AS a ON transactions.from_client = a.client_id
SELECT a.client_name AS 受害人, SUM(money) AS 诈骗总金额 FROM clients INNER JOIN cheats ON client_name = cheat_name AND clients.phone = cheats.phone INNER JOIN transactions ON transactions.to_client = clients.client_id INNER JOIN clients AS a ON transactions.from_client = a.client_id GROUP BY a.client_id,a.client_name ORDER BY 诈骗总金额 DESC
- 外连接与Union
 
SELECT * FROM student LEFT JOIN score ON student.s_id = score.s_id
SELECT * FROM student RIGHT JOIN score ON student.s_id = score.s_id
备注:
(1)在SQL连接查询中,包含表中没有关联行的那些记录的连接方式称为外连接。外连接分为左连接、右连接、全外连接
(2)确保左表中的记录全部出现在结果中,即使填充 NULL,这种外连接的形式称为左连接
(3)左连接的运行过程是:先执行内连接得到一次结果;检查左表是否还有“漏掉”的记录
(4)确保右表中的记录全部出现在结果中,即使填充 NULL,这种外连接的形式称为右连接
(5)确保两张表的记录全部出现在结果中,即使填充 NULL,这种外连接的形式称为全外连接(mysql不支持此语法)
(6)全外连接的运行过程是:先执行内连接;检查左表遗漏数据;检查右表遗漏数据
SELECT s_id,s_name,email FROM student UNION SELECT s_id,s_name,contact FROM left_student
SELECT s_id,s_name,email,null AS left_year FROM student UNION SELECT s_id,s_name,contact,left_year FROM left_student
备注:
(1)多个SQL语句的执行结果合并到一张结果表中称为联合(UNION)
(2)如果用 UNION 将两个查询结果连在一起,两个查询结果中的字段名称可以不同,但是字段数目和类型必须相同
(3)对于参与联合的表,如果某个需要显示的字段在其他表中存在,而在本表中不存在,为了满足联合语句的规则,需要使用常量作为字段的值,根据其他表中存在字段为该字段取别名
SELECT s_id,s_name,email FROM student UNION ALL SELECT s_id,s_name,contact FROM left_student
备注:
(1)如果两个查询结果有重叠,UNION 之后会去除重复、只保留其中一个
(2)使用 UNION ALL 可以不去除重复,保留两个结果中的全部内容
                    
                
                
            
        
浙公网安备 33010602011771号