Mysql(4)

多表查询 (重点)

多表关系:一对多(多对一),多对多,一对一

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

case:员工和部门的关系

多对多:建立一张中间表,中间表包含两个外键,分别关联两方主键

case:学生和课程的关系

一对一:用于单表拆分,将一张表的基础信息放在一张表中,其他详情放到另一张表中

case:用户和用户详情的关系

多表查询

查询员工信息和所属部门

select * from user,dept where user.dept_id = dept.id
内连接:查询a,b交集的部分
外连接:
    左外:查询左表的所有数据,以及交集的数据
    右外:查询右表的所有数据,以及交集的数据
自连接:当前表与自身的连接查询,自连接必须使用表别名
  • 内连接

    • 隐式内连接

      select 字段列表 from 表1,表2 where 条件
      select user.name as name,dept.name as dept from user,dept where user.dept_id = dept.id;
      select u.name,d.name from user u,dept d where u.dept_id = d.id; //起别名,简化开发
    • 显示内连接

      select 字段列表 from 表1 inner join 表2 on 连接条件;
      select user.name as name,dept.name as dept from user inner join dept where user.dept_id = dept.id;

sql执行,先执行from关键字

  • 外连接

    • 左外

      select 字段列表 from 表1 left outer join 表2 on 条件;
      select u.*,d.name from user u left join dept d on u.dept_id = d.id;
    • 右外

      select 字段列表 from 表1 right outer join 表2 on 条件;
      select d.*,u.name from user u right join dept d on d.id = u.dept_id;
  • 自连接

    必须对表起别名

    select 字段列表 from 表a 别名a join 表a 别名b on 条件;
    select u.name,m.name from user u join user m on u.managerid = m.id;   //内连接
    select u.name,m.name from user u left join user m on u.managerid = m.id; //左外连接
联合查询
select 字段列表 from A
union all
select 字段列别 from B
select 字段列表 from A
union               // 表示去重查询
select 字段列别 from B
子查询

嵌套查询

select/update/insert/delete  * from t1 where column = (select column1 from t2)
  • 标量子查询

select * from user where dept_id = ( select id from dept where name = '研发部');   
​
select * from user where entrydate > (select entrydate from user where name = '金庸');
  • 列子查询

  • select * from user where dept_id in (select id from dept where name = '销售部' or name = '市场部');
    select * from user where salary > all(select salary where id = (select id from dept where name = '财务部'));
    ​
    select * from user where salary > any(select salary where id = (select id from dept where name = '研发部'));
  • 行子查询

    select * from user where (salary,managerid) = (select salary,managerid from user where name = '张无忌');
    ​
  • 表子查询

    select * from user where (job,salary) in (select job,salary from user where name = '鹿杖客' or name = '宋远桥');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值