0
点赞
收藏
分享

微信扫一扫

MySQL 的多表查询


内连接查询

  1. 隐式内连接:使用where条件来消除无用的数据;
  1. select  *  from  表名,表名  where 条件;

1.  select  *  from  emp,dapt  where  emp.'dept_id'=dept.'id';
//使用别名
2.  select  t1.--,
            t1.--,
            t2.--  
    from  emp  t1, 
          dapt  t2  
    where  t1.'dept_id'=t2.'id';

  1. 显式内连接:显式指定内连接的方式
  1. 语法:select  字段列表  from  表名1  inner  join   表名2  on   条件;

1.select  *  from  emp  inner(可选)  join  dept  on  emp.'dept_id'=dept.id;
  select  *  from  emp  join  dept  on  emp.'dept_id'=dept.id;

3.内连接查询条件:

  1. 从哪些表中查询数据;
  2. 查询的条件是什么;
  3. 明确要查询哪些字段;

外连接查询

  1. 左外连接;查询的是左表的全部信息和左表与右表的交集部分;
  1. 语法:select  字段列表  from  表1  left  (outer) join  表2 on  条件;

//查询所有的信息
select  *  from  dept;  //查询所有的部门信息
select  *  from  emp;   //查询所有的员工信息

//查询所有员工的部门信息,如果有部门则查询部门信息,如果没有部门,则显示部门名称
select  t1.*,t2.'name'
from   emp  t1   left  join  dept  t2
on  t1.'dept_id'=t2.id;

  1. 右外连接;查询的是右表的全部信息和右表与左表的交集部分
  1. 语法:select  字段列表  from  表1  right (outer) join  表2 on  条件;

select  *  from  dept  t2   right  join  emp  t1  on t1.'dept_id'=t2.id;

子查询:就是查询中嵌套查询,称嵌套查询为子查询

  1. 单行单列子查询

//查询工资最高的员工信息
//1.查询出最高的工资
select  max(salary)  from  emp;
//2.查询出员工信息,并且工资等于上面查询的工资
select  *  from  emp  where  emp.'salary'=(max(salary));  //max(salary)指第一条语句中查询出来的最高工资

//一条SQL完成查询
select  *  from  emp  where  emp.'salary'=(select  max(salary)  from  emp);

  1. 子查询的不同情况
  1. 子查询的结果是单行单列的
  1. 子查询可以作为条件,使用运算符去判断;(<  >  >=  =<  =)

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

  1. 子查询的结果是多行单列的
  1. 子查询可以作为条件,使用运算符in来判断

//查询财务部和市场部的所有员工信息
select  id  from  dept  where  name=‘财务部’  or name=‘市场部’ ;
select  *  from  emp  where  dept_id=2  or  dept_id=3;//2,3是上一条语句所查询出来的结果


//select  *  from  emp  where  dept_id  in  (2,3);

select  *  from  emp  where  dept_id  in  (select  id  from  dept  where  name=‘财务部’  or name=‘市场部’);

  1. 子查询的结果是多行多列的
  1. 子查询可以作为一张虚拟表来完成查询

//查询员工入职日期是2011-11-10之后的员工信息和部门信息

select  *  from  dept  t1,(select  *  from  emp  where  emp.'join_date'>'2011-11-10'
)  t2  where  t1.id=t2.dept_id;


//普通内连接查询
select  *  from emp  t1,dept  t2 where  t2.id=t1.‘dept_id’  and t1.'join_date'>'2011-11-10';

举报

相关推荐

0 条评论