一、多表查询/关联查询(联合查询)

在多个表中,一起完成查询操作。

能支持多表查询的核心就是,在A表中的一个字段,与B表中的一个字段是同一个字段。

这同一个字段,就将A表与B表关联了起来。

1.1 什么是关联查询

关联查询:两个或者多个表,一起查询。

前提条件: 这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。

1.2 关联查询(两表查询)的结果,一共有7种。

A表与B表,做查询,一共有7种场景。

(看起来花里胡哨的还挺唬人,不过这不重要)

本质就是2张表,拥有一个共同的字段(将这两个表串起来)

在平面上,将A表与B表平铺在一起。A表在左侧,B表在右侧。

左连接,就是以左侧A表为主,然后去B表里查对应数据。

右连接,就是以右侧B表为主,然后去A表里查对应数据。

在实际中,内联结和左联结应该是使用最多的,右连接与全外联结很少见的。

对初学者来说,在这里迷惑的原因是去记这些概念,这是没必要的,我们只要在实际中抱着问题去用一次就可以完全掌握了。

mysql sqlserver联表 mysql联表查询_mysql

(1) A ∩ B 

A表中的数据,能在B表中找到对应的记录

B表中的数据,能在A表中找到对应的记录。

mysql sqlserver联表 mysql联表查询_mysql sqlserver联表_02

(2)A +  A ∩ B

取A表的全部数据,和B表中,能在A表中找到对应记录的数据。

mysql sqlserver联表 mysql联表查询_mysql_03

(3)A - A ∩ B

只取A表中独有的数据(在B表中不存在的)

mysql sqlserver联表 mysql联表查询_数据库_04

(4)B - A ∩ B

mysql sqlserver联表 mysql联表查询_mysql_05

(5)A∪B

mysql sqlserver联表 mysql联表查询_数据_06

二、 具体实现2表查询

2.1 创建2张关联的表

create table dept (dept1 int ,dept_name varchar(11));

 create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int);

 insert into dept values

(101,'财务'),

(102,'销售'),

(103,'IT技术'),

(104,'行政');

 insert into emp values

(1789,'张三',35,'1980/1/1',4000,101),

(1674,'李四',32,'1983/4/1',3500,101),

(1776,'王五',24,'1990/7/1',2000,101),

(1568,'赵六',57,'1970/10/11',7500,102),

(1564,'荣七',64,'1963/10/11',8500,102),

(1879,'牛八',55,'1971/10/20',7300,103);

2.2 通过内/外连接实现2表查询。

本质就是2张表,拥有一个共同的字段(将这两个表串起来)

在平面上,将A表与B表平铺在一起。A表在左侧,B表在右侧。

左连接,就是以左侧A表为主,然后去B表里查对应数据。

右连接,就是以右侧B表为主,然后去A表里查对应数据。

在实际中,内联结和左联结应该是使用最多的,右连接与全外联结很少见的。

对初学者来说,在这里迷惑的原因是去记这些概念,这是没必要的,我们只要在实际中抱着问题去用一次就可以完全掌握了。

(1) 内连接 inner join

(2) 外连接 outer join

左外连接 left outer join 或 left join

右外连接 right outer join 或 right join

全外连接 full outer join 或 full join

但是mysql不支持全外连接。

MySql使用关键字union 合并其他的查询结果,实现全外连接的效果。

2.2.1 等值连接

模板:

SELECT * FROM 表A,表B WHERE A.x=B.y AND 条件 ...;

举例:

SELECT emp.NAME, dept.dept_name
FROM emp,dept
WHERE emp.dept2 = dept.dept1

2.2.2 内连接

SELECT * FROM A JOIN B ON 关联关系 WHERE 条件;

【左外连接】:
SELECT * FROM A LEFT JOIN B ON 关联关系 WHERE 条件;

【右外连接】:
SELECT * FROM A RIGHT JOIN B ON 关联关系 WHERE 条件;