Mysql多表查询全教程

多表查询

查询语法:

select 列名列表
from  表名列表
where ....

(一)笛卡尔积

select * from emp,dept;

(二)多表查询的分类

①内连接查询

1.隐式内连接查询

查询所有的员工信息以及对应的部门信息,使用where 消除无用数据的就是隐式内连接查询
select * from  dept,emp WHERE dept.id=emp.dept_id; 
查询emp表中的name 以及 dept表中的name
select emp.`NAME`, dept.`NAME` from dept,emp where dept.id=emp.dept_id; 

2.显式内连接查询

select 字段列表 from 表1 inner join 表2 on 条件
  1. 从哪些表中查询数据
    1. 条件是什么
      1. 查询哪些字段

②外连接查询

1.左外链接查询

select * from 表1 left join 表2 on 条件;

查询的是左表所有数据以及其交集部分

左表指的是相对于left join 而言 左边的那个表

SELECT 	* FROM dept t2 left JOIN emp t1 ON t1.`dept_id` = t2.`id`;

2.右外连接查询

select * from 表1 right join 表2 on 条件;

查询的是右表所有数据以及其交集部分

右表指的是相对于right join而言右边的那张表

SELECT 	* FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;

③子查询

概念:查询中嵌套查询,称嵌套查询为子查询

SELECT * FROM `emp`
查询最高工资是多少
select max(salary) from emp;
查询员工信息,并且工资等于9000的
select * from emp where salary=9000;
其实这样一个查询一条语句就可以完成
select * from emp where salary=(select max(salary) from emp);

④子查询的不同情况

1.子查询结果是单行单列的

子查询可以作为条件,使用运算符去判断 运算符: > >= < <= =

查询员工工资小于平均工资的人
select * from emp where salary<(select avg(salary) from emp);

2.子查询的结果是多行单列的

子查询可以作为条件,使用运算符in来判断

查询市场部和财务部所有员工的信息
select * from emp where emp.dept_id in (select id from dept WHERE `NAME`='市场部' or name='财务部');

3.子查询的结果是多行多列的

子查询可以作为一张虚拟表来参与查询

查询员工是在2011-11-11之后入职的员工信息和部门信息
select * from emp where emp.join_date>'2011-11-11';
select * from dept d inner join  (select * from emp where emp.join_date>'2011-11-11') e  on e.dept_id=d.id;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值