赞
踩
内连接返回两个表中满足连接条件的匹配行。只有在连接条件成立的情况下,才会返回结果。
隐式使用: SELECT 字段列表 FROM 表1 , 表2 where 条件 ... ;
显式使用: SELECT 字段列表 FROM 表1 [ inner] join 表2 on 连接条件 ... ;(括号表示可有可无)
案例:
- -- 查询学生及其所在班级信息
- SELECT students.name, classes.name AS class_name
- FROM students
- INNER JOIN classes ON students.class_id = classes.id;
左连接(Left Join):左连接返回左表中所有的行,以及与右表匹配的行。如果右表中没有匹配的行,则返回NULL值。
语法:SELECT * FROM table1 left join table2 on table1.column = table2.column
。
右连接(Right Join):右连接返回右表中所有的行,以及与左表匹配的行。如果左表中没有匹配的行,则返回NULL值。
语法:SELECT * FROM table1 right join table2 on table1.column = table2.column
。
案例:
- -- 查询班级及其学生数量
- SELECT classes.name, COUNT(students.id) AS 学生数量
- FROM classes
- LEFT JOIN students ON classes.id = students.class_id
- GROUP BY classes.name;
- -- 查询科目及其对应的老师信息
- SELECT s.name, t.name AS 老师名字
- FROM subjects s
- RIGHT JOIN teachers t ON s.teacher_id = t.id;
全连接返回左右表中所有的行,无论是否匹配。如果没有匹配的行,则返回NULL值。
(MySQL不直接支持全连接,可以通过 左连接+右连接 的组合来实现并使用 union 连接两个查询)。
案例:
- -- 查询科目及其对应的老师信息
- SELECT s.name, t.name AS 老师名字
- FROM subjects s
- left join teachers t on s.teacher_id = t.id;
-
- UNION
-
- -- 查询科目及其对应的老师信息
- SELECT s.name, t.name AS 老师名字
- FROM subjects s
- RIGHT JOIN teachers t ON s.teacher_id = t.id;
是一种无条件的连接方式,它返回左表和右表的所有可能组合。这种连接方式会生成两个表的笛卡尔积。例如,如果左表有 m 行,右表有 n 行,CROSS JOIN 将返回 m * n 行。
语法:select * from table1 cross join table2;
案例:
- -- 查询学生对应的所有科目的成绩
- SELECT students.name, subjects.name AS subject_name
- FROM students
- CROSS JOIN subjects;
将表与自身进行连接。它在表中存在对自身的关联关系时很有用。通过为表指定不同的别名并使用别名进行连接,可以在表中创建自引用关系。
语法:SELECT a.column, b.column FROM table AS a JOIN table AS b ON a.key = b.key;
案例 [as] 表示取别名,可有可无:
- -- 查询同班学生里面的朋友关系
- SELECT a.name AS 学生名, b.name AS 朋友名字
- FROM students AS a
- INNER JOIN students AS b ON a.id <> b.id
- WHERE a.class_id = b.class_id;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。