MySql:多表查询(mysql多表查询技巧)

多表关系

  • 一对多
  • 一对一
  • 多对多

一对多

案例: 部门 与 员工的关系
关系: 一个部门对应多个员工,一个员工对应一个部门
实现: 在多的一方建立外键,指向一的一方的主键

MySql:多表查询(mysql多表查询技巧)

多对多

案例: 学生 与 课程的关系
关系: 一个学生可以选修多门课程,一门课程也可以供多个学生选择
实现: 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

MySql:多表查询(mysql多表查询技巧)

一对一

案例: 用户 与 用户详情的关系
关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

MySql:多表查询(mysql多表查询技巧)

内连接

内连接的查询语法:

隐式内连接:select 字段列表 from 表1,表2 where 条件....;

显示内连接:select 字段列表 from 表1 [inner] join 表2 on 链接条件....;

如上面一对多的数据表,查询员工姓名以及对于的部门:

select emp.name , dept.name from emp,dept where emp.dept_id=dept.id;

select e.name , d.name from emp e inner join dept d on e.dept_id = d.id;

外连接

左外连接:select 字段列表 from 表1 left [outer] join 表2 on 条件 ... ;

相当于查询表1(左表)的所有数据包含表1表2 交集部分的数据.

右外连接:select 字段列表 from 表1 right [outer] join 表2 on 条件 ... ;

相当于查询表2(右表)的所有数据包含表1表2 交集部分的数据.

自连接

语法:select 字段列表 from 表A 别名A join 表A 别名b on 条件...;

自连接查询,可以是内连接查询,也可以是外连接查询

案例:

MySql:多表查询(mysql多表查询技巧)

1.查询员工以及所属领导的名字(每条数据中的managerid对于其领导的id,自连接查询要将这个表看成是两个表进行查询)

(使用的内连接)

2.查询所有员工 emp 及其领导的名字 emp,如果员工没有领导,也需要查询出来.

 联合查询

对于联合查询来说,就是把多次查询的结果合并起来,形成一个新的查询结果集.

语法:

案例:

将薪资低于5000的员工,和年龄大于50岁的员工全部查询出来

 子查询

概念:SQL语句中嵌套select语句,成为嵌套查询,又称子查询

子查询外部的语句可以是 insert/update/delete/select 的任何一个

根据子查询的结果不同,分为:

  • 标量子查询(子查询结果为单个值)
  • 列子查询(子查询结果为一列)
  • 行子查询(子查询结果为一行)
  • 表子查询(子查询结果为多行多列)

标量子查询

子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式,这种子查询称为 标量子查询.

常用的操作符: =  <>  >  >=  <  <=

查询在’东方白’入职之后的员工信息: select * from emp where entrydate > (select entrydate from emp where name = '东方白');

列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询

常用的操作符:

  • in(在指定集合范围内,多选一)
  • not in(不在指定的集合范围之内)
  • any (子查询返回的列表中,有任意一个满足即可)
  • some(与any等同,使用some的地方都可以使用any)
  • all (子查询返回列表的所有值都必须满足)

案例:

1.查询”销售部”和”市场部”的所有员工信息

2.查询  比 财务部  所有人工资 都高 的员工信息

3.查询比研发部其中任意一人工资高的员工信息

 行子查询

子查询返回的结果是一行(可以是多列),这种子查询为行子查询

常用的操作符:=,<>,in,not in

案例:

1.查询与”张无忌”的  薪资以及直属领导  相同的员工信息

 表子查询

子查询返回的结果是多行多列,这种子查询称为 表子查询.

常用的操作符: in

案例:

1.查询与 鹿杖客 宋远桥 的职位和薪资相同的员工信息

2.查询入职日期是”2006-01-01″之后的员工信息,以及其部门的信息

案例:

正文完
 0