多表的查询(重要)

多表查询(去除重复的查询)之内连接

如果不用多表查询直接用SELECT * FROM dept,emp;查询还有很多少重复的数据。

  1. 前提条件:两个表有关联,通过外键关联。
  2. 普通内链接
    • 关键字:**inner join **
    • 语法:select * from 表 **inner join ** 表 on 条件
    • 注意:
      在inner join关键字之前写表1
      在inner join关键字之后写表2
      on的后面写条件:(表1是dept,表2是emp)dept.did = emp.dno
      哪个表写在 inner join关键字 之前查询的时候就显示在表的前面,反之就是后面。
    • 语句:select * from dept inner join emp on dept.did = emp.dno;
  3. 隐式内连接(用的最多的)
    • 语法:select * from 表1,表2 where 表1.字段 = 表2.字段;
    • 语句:select * from dept,emp where dept.did = emp.dno;
    • 别名:select * from dept d,emp e where d.did = e.dno;
    • 指定字段:select d.dname,e.ename,e.sal from dept d,emp e where d.did = e.dno;

多表查询之外连接

  1. 外连接分成左外连接和右外连接
    • 左外连接
      使用关键字 select * from 表1 left outer join 表2 on 条件;
      outer关键字省略不写
      select * from dept left outer join emp on dept.did=emp.dno;
      select * from dept left join emp on dept.did=emp.dno;
    • 左外连接查询的是左表中所有的数据和2张表主外键关联的数据。
      《MySQL入门到精通》(6)多表查询与子查询
    • 右外连接
      使用关键字 select * from 表1 right outer join 表2 on 条件;
      outer省略不写
      select * from dept right outer join emp on dept.did=emp.dno;
      select * from dept right join emp on dept.did=emp.dno;
    • 右外连接查询的是右表中有的数据和2张表主外键关联的数据。
      《MySQL入门到精通》(6)多表查询与子查询

内连接与外连接的区别

先添加数据
《MySQL入门到精通》(6)多表查询与子查询
《MySQL入门到精通》(6)多表查询与子查询
注意:这里添加的数据,行政部和销售部是没有人的。冠希和柏芝也是没有部门的。
执行:SELECT * FROM emp,dept WHERE emp.dno=dept.did; —内连接

《MySQL入门到精通》(6)多表查询与子查询
这里的内连接没有查询到添加的数据,冠希和柏芝。
执行:SELECT * FROM dept LEFT JOIN emp ON dept.did=emp.dno; —外连接
《MySQL入门到精通》(6)多表查询与子查询
这里的外连接查询到了冠希和柏芝。

区别

内连接查询的是2张表交集的数据,外连接查询的是关联的数据。
《MySQL入门到精通》(6)多表查询与子查询

子查询

  1. 子查询,嵌表查询,一个select语句不能查询出结果的,可以通过多个select语句查询结果。
  2. 练习
    先找出前边练习用的stu表
    • 例子:查询出英语成绩大于英语平均分的同学
      1. 先查询出英语的平均分**(select avg(english) from stu)**
      2. 在编写select语句
      - SELECT username,english FROM stu WHERE english>(SELECT AVG(english) FROM stu);

相关文章: