多表查询

Posted C3的脚印

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多表查询相关的知识,希望对你有一定的参考价值。

先准备两张表

一张员工表 一张部门表

     

 要交叉连接, 生成笛卡尔积, 在在笛卡尔积的基础上建立连接查询数据

(有内连接查询, 左链接查询, 右链接查询, 还有全链接查询)

 1:交叉连接:不适用任何匹配条件, 生成笛卡尔积

select * from emp, dep

2:内连接 把两张表有对应关系的记录链接成一张虚拟表

用emp,和dep 表来举例

语法:select  * from emp inner join dep on emp.dep_id = dep.id;

应用

select * from emp,dep where emp.dep_id =dep.id and dep.name=\'技术\';   # 不要用where 做连表的活,所以应该内连接语法来写

select * from emp inner join dep on emp.dep_id =dep.id where dep.name=\'技术\';

 

3:左链接  在内连接的基础上保留左边没有对应的关系的记录

select  * from emp left join dep on emp.dep_id = dep.id:

4:右链接,在内连接的基础上保留右边没有对应的关系的记录

select * from emp right join dep on emp.dep_id = dep.id;

5 全链接:在内连接的基础上,保留左右边没有对应关系的记录

select  * from emp left join dep on emp.dep_id = dep.id

unique

select * from emp right join dep on emp.dep_id = dep.id;

 需要补充的是多表连接可以不断的与虚拟表连接:

用单表中的列子举例说明:

现要查询各个部门员工的工资最高的人的信息 需求

select  t1.* from emp as t1  #把emp 另赋别名t1, 方便操作, 查询t1 的信息  相当于 select * from t1

 inner join                   #内连接

(select post,max(salary) as  ms from emp  group by post )as t2   # 内连接一个虚拟表

on t1.post=p2.post  where t1.salary =t2.ms;

 

 

以上是关于多表查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL-04-笔记

Oracle笔记 多表查询

SQL语句 - 多表查询使用详细介绍

多表查询_左连接多表操作_子查询

多表查询

MySQL 如何多表查询