本节主要内容:等值连接、非等值连接、自然连接、外连接(左、右连接);
连接分为内连接、外连接、自然连接。
其中,内连接包括等值连接、非等值连接、自连接;外连接包括左外连接、右外连接;
1、等值连接:
1)两个表查询条件相等才显示;
2)与多表联查约束主外键是一样的;
3)ON后面只写主外键;
例如1:SELECT * FROM student st INNER JOIN score sc ON st.id=sc.st_id;
例如2:SELECT * FROM student st, score sc where st.id=sc.st_id;
例如3:等值连接查询成绩大于70的学生
SELECT * FROM student st INNER JOIN score sc ON st.id=sc.st_id where sc.score>70;
2、非等值连接:
假设有员工表employer表如下:
id | name | job | shangji | hiredate | salary | reward | dep_id |
1100 | 张一 | 经理 | 2001 | 2020-10-12 | 15000 | 300 | 00 |
1101 | 张二 | 客服 | 2002 | 2019-09-09 | 8000 | 01 | |
1102 | 张三 | 客服 | 2003 | 2017-09-23 | 8000 | 02 | |
1103 | 李四 | 业务人员 | 2004 | 2020-11-09 | 7800 | 500 | 03 |
1104 | 王五 | 经理 | 2005 | 2021-01-06 | 17800 | 04 | |
1105 | 赵六 | 业务人员 | 2006 | 2021-03-28 | 7800 | 05 | |
1106 | 赵七 | 客服 | 2007 | 2020-06-26 | 8000 | 06 |
部门表department表如下:
dep_id | name | local |
00 | 客服部 | 北京 |
01 | 业务部 | 上海 |
02 | 运营部 | 广州 |
03 | 销售部 | 青岛 |
薪水等级表SG表如下:
grade | lowsalary | highsalary |
1 | 1000 | 5000 |
2 | 5001 | 9000 |
3 | 9001 | 13000 |
4 | 13001 | 17000 |
5 | 17001 | 21000 |
查询所有员工的姓名、工资,所在部门的名称以及工资的等级
法一:SELECT e.name, e.salary, d.name FROM employer e, department d , SG s where e.dep_id=d.dep_id and e.salary >= s.lowsalary and e.salary <= s.highsalary ;
法二:SELECT e.name, e.salary, d.name FROM employer e join department on e.dep_id=d.dep_id join SG s on e.salary between s.lowsalary and s.highsalary ;
3、自连接:
连接查询会产生无用笛卡尔集,我们通常使用主外键关系等式来去除它;
而自然连接无需给出主外键等式,它会自动找到这一等式;
要求:两张连接的表中列名和类型完全一致的列作为条件;会去除相同的列;
假设学生表student表如下:
s_id | name | age |
1 | 张一 | 21 |
2 | 张二 | 25 |
3 | 张三 | 28 |
成绩表score表如下:
s_id | score | name |
1 | 80 | 张一 |
2 | 76 | 张二 |
3 | 69 | 张三 |
语句:SELECT * FROM student natural join score;
4、外连接: