多表联查的复习

目录

1.多表联查连接分类

2. 内连接 inner join(等值连接,制定对应的等值条件)

3.自然连接 natural(不需要指定等值条件)

4.非等值连接:

5.等值连接

6.子查询


1.多表联查连接分类

内连接、自然连接、外链接(左外连接、右外连接、全外连接(mysql不支持))、非等值连接

2. 内连接 inner join(等值连接,制定对应的等值条件)

SELECT * FROM emp,dept;/*得到的数据是不对的*/

得到的数据叫做笛卡尔积:结果是两个表数据的乘积

使用内连接去查

SELECT * FROM emp INNER JOIN dept;

结果依然是笛卡尔积,是因为我们没有制定对应的等值条件

SELECT * FROM emp e INNER JOIN dept d WHERE e.deptno = d.deptno;

提示:一般来讲,我们不使用内连接,因为效率低。用外链接

标准写法:select * from 表1 别名1 inner join 表2 别名2 where 别名1.xxx = 别名2.xxx;

SELECT * FROM emp e INNER JOIN dept d WHERE e.deptno = d.deptno;

3.自然连接 natural(不需要指定等值条件)

自动使用多表中所有相同字段(不但值相同,名字也要相同)进行连接(两表中有几个相同,就连接合并几个相同字段)

select * from A natural join B

4.非等值连接:

注意:使用多表联查,不一定要有外键。

select * from B,B mm where B.成绩>mm.成绩

使用on关键字可以直接在其后书写链接条件,没有限制 ,想和那个字段连接都可以。

select * from A inner join B on A.成绩>B.学号

5.等值连接

外链接(难点)

左外:select * from 表1 别名1 left [ outer ] join 表2 别名2 on 等值条件;

SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno;

左外的意思是:左表的记录无论是否满足条件,都会被查出来,而右表的记录只有满足条件的,才会被查出来。(左表中数据在右表中如果不存在,则右表的字段值为null)

/*右外 */

右外跟左外的机制刚好相反。

如何去判断主副表?(左外连接:左边的是主表,右外连接:右边的是主表)

SELECT * FROM table1 t1 RIGHT JOIN table2 t2 ON t1.id = t2.id;

注意:使用多表联查,不一定要有外键。

全外链接 full outer join

全连接:实现左外和右外连接的效果。

select * from A full outer join B on A.成绩=B.成绩 order by A.学号

6.子查询

子查询:查询中还有查询(数select的个数)

1、 出现的位置

A from前:作为字段存在的

 

B where后:作为条件存在的

/*查询出工资高于在30部门工作的所有员工的工资的员工信息*/

 

C from后:表(极为罕见)

你可能感兴趣的:(mysql,mysql,数据库,database)