一、内连接
等值连接
SELECT * FROM Student AS s INNER JOIN Class AS c ON c.ClassID = s.ClassID
1 张三 19 1 1 班级12 李四 18 1 1 班级13 王五 16 2 2 班级23 王五 16 2 2 班级2
不等值连接
SELECT * FROM Student AS s INNER JOIN Class AS c ON c.ClassID != s.ClassID
1 张三 19 1 2 班级21 张三 19 1 3 班级31 张三 19 1 4 班级41 张三 19 1 5 班级51 张三 19 1 2 班级22 李四 18 1 2 班级22 李四 18 1 3 班级32 李四 18 1 4 班级42 李四 18 1 5 班级52 李四 18 1 2 班级23 王五 16 2 1 班级13 王五 16 2 3 班级33 王五 16 2 4 班级43 王五 16 2 5 班级54 啦啦 20 7 1 班级14 啦啦 20 7 2 班级24 啦啦 20 7 3 班级34 啦啦 20 7 4 班级44 啦啦 20 7 5 班级54 啦啦 20 7 2 班级2
自然连接
SELECT * FROM Student AS s ,Class AS c WHERE c.ClassID=s.ClassID
1 张三 19 1 1 班级12 李四 18 1 1 班级13 王五 16 2 2 班级23 王五 16 2 2 班级2
二、外连接
左外连接
SELECT * FROM Class AS c LEFT JOIN Student AS s ON s.ClassID = c.ClassID
1 班级1 1 张三 19 11 班级1 2 李四 18 12 班级2 3 王五 16 23 班级3 NULL NULL NULL NULL4 班级4 NULL NULL NULL NULL5 班级5 NULL NULL NULL NULL2 班级2 3 王五 16 2
右外连接
SELECT * FROM Class AS c RIGHT JOIN Student AS s ON s.ClassID = c.ClassID
1 班级1 1 张三 19 11 班级1 2 李四 18 12 班级2 3 王五 16 22 班级2 3 王五 16 2NULL NULL 4 啦啦 20 7
全外连接
SELECT * FROM Class AS c FULL JOIN Student AS s ON s.ClassID = c.ClassID
1 班级1 1 张三 19 11 班级1 2 李四 18 12 班级2 3 王五 16 23 班级3 NULL NULL NULL NULL4 班级4 NULL NULL NULL NULL5 班级5 NULL NULL NULL NULL2 班级2 3 王五 16 2NULL NULL 4 啦啦 20 7
三、交叉连接
CROSS JOIN 后面不能用ON过滤,可以用WHERE
SELECT * FROM Class AS c CROSS JOIN Student AS s
1 班级1 1 张三 19 12 班级2 1 张三 19 13 班级3 1 张三 19 14 班级4 1 张三 19 15 班级5 1 张三 19 12 班级2 1 张三 19 11 班级1 2 李四 18 12 班级2 2 李四 18 13 班级3 2 李四 18 14 班级4 2 李四 18 15 班级5 2 李四 18 12 班级2 2 李四 18 11 班级1 3 王五 16 22 班级2 3 王五 16 23 班级3 3 王五 16 24 班级4 3 王五 16 25 班级5 3 王五 16 22 班级2 3 王五 16 21 班级1 4 啦啦 20 72 班级2 4 啦啦 20 73 班级3 4 啦啦 20 74 班级4 4 啦啦 20 75 班级5 4 啦啦 20 72 班级2 4 啦啦 20 7