SQL连接查询
一、内连接
等值连接
SELECT * FROM Student AS s INNER JOIN Class AS c ON c.ClassID = s.ClassID
1 张三 19 1 1 班级1 2 李四 18 1 1 班级1 3 王五 16 2 2 班级2 3 王五 16 2 2 班级2
不等值连接
SELECT * FROM Student AS s INNER JOIN Class AS c ON c.ClassID != s.ClassID
1 张三 19 1 2 班级2 1 张三 19 1 3 班级3 1 张三 19 1 4 班级4 1 张三 19 1 5 班级5 1 张三 19 1 2 班级2 2 李四 18 1 2 班级2 2 李四 18 1 3 班级3 2 李四 18 1 4 班级4 2 李四 18 1 5 班级5 2 李四 18 1 2 班级2 3 王五 16 2 1 班级1 3 王五 16 2 3 班级3 3 王五 16 2 4 班级4 3 王五 16 2 5 班级5 4 啦啦 20 7 1 班级1 4 啦啦 20 7 2 班级2 4 啦啦 20 7 3 班级3 4 啦啦 20 7 4 班级4 4 啦啦 20 7 5 班级5 4 啦啦 20 7 2 班级2
自然连接
SELECT * FROM Student AS s ,Class AS c WHERE c.ClassID=s.ClassID
1 张三 19 1 1 班级1 2 李四 18 1 1 班级1 3 王五 16 2 2 班级2 3 王五 16 2 2 班级2
二、外连接
左外连接
SELECT * FROM Class AS c LEFT JOIN Student AS s ON s.ClassID = c.ClassID
1 班级1 1 张三 19 1 1 班级1 2 李四 18 1 2 班级2 3 王五 16 2 3 班级3 NULL NULL NULL NULL 4 班级4 NULL NULL NULL NULL 5 班级5 NULL NULL NULL NULL 2 班级2 3 王五 16 2
右外连接
SELECT * FROM Class AS c RIGHT JOIN Student AS s ON s.ClassID = c.ClassID
1 班级1 1 张三 19 1 1 班级1 2 李四 18 1 2 班级2 3 王五 16 2 2 班级2 3 王五 16 2 NULL NULL 4 啦啦 20 7
全外连接
SELECT * FROM Class AS c FULL JOIN Student AS s ON s.ClassID = c.ClassID
1 班级1 1 张三 19 1 1 班级1 2 李四 18 1 2 班级2 3 王五 16 2 3 班级3 NULL NULL NULL NULL 4 班级4 NULL NULL NULL NULL 5 班级5 NULL NULL NULL NULL 2 班级2 3 王五 16 2 NULL NULL 4 啦啦 20 7
三、交叉连接
CROSS JOIN 后面不能用ON过滤,可以用WHERE
SELECT * FROM Class AS c CROSS JOIN Student AS s
1 班级1 1 张三 19 1 2 班级2 1 张三 19 1 3 班级3 1 张三 19 1 4 班级4 1 张三 19 1 5 班级5 1 张三 19 1 2 班级2 1 张三 19 1 1 班级1 2 李四 18 1 2 班级2 2 李四 18 1 3 班级3 2 李四 18 1 4 班级4 2 李四 18 1 5 班级5 2 李四 18 1 2 班级2 2 李四 18 1 1 班级1 3 王五 16 2 2 班级2 3 王五 16 2 3 班级3 3 王五 16 2 4 班级4 3 王五 16 2 5 班级5 3 王五 16 2 2 班级2 3 王五 16 2 1 班级1 4 啦啦 20 7 2 班级2 4 啦啦 20 7 3 班级3 4 啦啦 20 7 4 班级4 4 啦啦 20 7 5 班级5 4 啦啦 20 7 2 班级2 4 啦啦 20 7