联表查询

联表查询

联表查询

查询语句的结果如果在一张表中无法获取时,或者查询某写内容需要多张表时,这样就需要联表查询,

而联表查询的基础在于外键的约束,使得表与表之间存在一定的关联。

联表查询的种类

1. 连接查询:分为内连接,外连接和自连接

①内连接:相当于查询表A和表B之间交集部分数据

②外连接:

左外连接:查询左表所有数据,以及两张表交集部分数据

右外连接:查询右表所有数据,以及两张表交集部分数据

③自连接:当前表与自身的连接查询,自连接必须使用表别名

2. 子查询:通过使用表与表嵌套的方式

如下表:

内连接

内连接是查询两张表之间的交集的部分。

语法:

①隐式内连接

select 字段列表 from 表1,表2 where 两表连接条件 其它条件......;

②显示内连接

select 字段列表 from 表1 [inner] join 表2 on 两表连接条件 where 其它条件....;

隐式内连接

举个例子:

select * from emp,dept

效果展示:

发现数据特点多,而且仔细发现还存在重复出现的数据。

因为当你如果没有添加【联表条件】时,会出现笛卡尔积现象,所以为了解决这个问题一定一定要写【联表条件】

正确的例子:

select * from emp,dept where emp.deptno=dept.deptno

效果展示:

如果后续需要过滤某些数据时,可以在where条件后面继续添加条件语句。

显式内连接

举个例子:

select * from emp inner join dept on emp.deptno=dept.deptno

效果展示:

两者显式内连接和隐式内连接效果完全一样的。

外连接

左外连接:相当于查询左表的所有数据包含表1和表2 交集部分的数据

右外连接:相当于查询右表的所有数据包含表1和表2 交集部分的数据

语法:

①左外连接

select 字段列表 from 表1 left [outer] join 表2 on 两表连接条件 where 条件语句;

①右外连接

select 字段列表 from 表1 right [outer] join 表2 on 两表连接条件 where 条件语句;

左外连接

举个例子:

-- 左外连接

select * from emp left join dept on emp.deptno=dept.deptno;

效果展示:

右外连接

举个例子:

-- 右外连接

select * from emp right join dept on emp.deptno=dept.deptno;

效果展示:

会发现右外连接它会把表2(dept)中的deptno=40的也查询出来,即使左表(emp)没有员工在这个部门里面。

自连接

自己与自己进行连接,必须给表起别名

语法:

①隐式自连接

select 字段列表 from 表A as 别名1 表A as 别名2 where 连接条件

②显示自连接

select 字段列表 from 表A as 别名1 join 表A as 别名2 on 连接条件

举个例子:

要求: 查询员工名称以及对应的领导名

分析: 查询的结果都在一张表中。但是设计员工表---领导表

select e.ename 员工姓名,l.ename 领导名 from emp e join emp l on e.mgr=l.empno;

效果展示:

子查询(嵌套查询)

把一次查询的结果作为另一个查询的条件值。这种方式就是嵌套查询。

语法:

select * from 表名 where 字段 [in|=] (select 字段 from 表名 where 条件)

例子:

根据部门名称查询到部门的编号

select * from emp where deptno=(

select deptno from dept where dname='研发部'

)

相关文章

怎么把银行卡的钱转到微信
365bet亚洲体育

怎么把银行卡的钱转到微信

📅 09-30 👁️ 3158
‎圣经软件 App
365bet亚洲体育

‎圣经软件 App

📅 01-28 👁️ 2210
伺服系统的常见控制方式
网上365bet

伺服系统的常见控制方式

📅 08-13 👁️ 272