MYSQL学习3-多表查询

多表关系

1.一对多(多对一)

关系:一个部门对应多个员工,一个员工对应一个部门

实现:在多的一方建立外键,指向的一方的主键

2.多对多

关系:一个学生可以选修多门课程,一门课程可以供多个学生选择

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

3.一对一

关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提示操作效率

实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的UNIQUE

连接查询:

内连接(查询内容为两张表交集的部分)

隐式内连接语法:

select 字段列表 from 表1,表2 where 条件 ...;

显示内连接语法:

select 字段列表 from 表1 [INNER] JOIN 表2 on 连接条件 ...;

备注:distinct 用于查询时候去重

外连接

左外连接语法(查询左表的所有数据包含表1和表2交集部分的数据):

select 字段列表 from 表1 LEFT [OUTER] JOIN 表2 ON 条件 ...;

右外连接语法(查询右表的所有数据包含表1和表2交集部分的数据):

select 字段列表 from 表1 RIGHT [OUTER] JOIN 表2 ON 条件 ...;

自连接

自连接查询语法:

select 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件:

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

联合查询(union,union all)

查询语法:

select 字段列表 from 表A ...

union [all]

select 字段列表 from 表B ...;

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

union all 只是将数据合并到一起,而union 则是合并在一起然后进行去除处理

子查询

定义:SQL语句中嵌套select语句,称嵌套查询,又称子查询

语法:select * from t1 where column1 = (Select column1 from t2)

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

子查询结果不同,可以分为:

1.标量子查询(子查询结果为单个值)

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

语法:select * from t1 where column1 = (Select column1 from t2)

2.列子查询(子查询结果为一列)

常用的操作符:IN,NOT IN ,ANY ,SOME,ALL

语法:select * from emp where dept_id in (select id from dept where name = '销售部');

select * from emp where salary > all (select salary from dept where name = '销售部');

3.行子查询(子查询结果为一行或多行)

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

语法:select * from emp where (salary,managerid) = (select salary,managerid from emp where name = '张无忌');

4.表子查询(子查询结果为多行多列)

常用操作符: IN

语法:select * from emp where (job,salary) in (select job,salary from emp where name ='鹿杖客' or name = '宋远桥');

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值