MySQL-多表查询演示

设有两张表分别为:

​ 部门表:

部门代码部门名负责人地点
0001生产部李华江重庆荣昌县
0002销售部张丽重庆渝中区
0003市场部王欣重庆江北区
0004研发部张三重庆江北区

​ 员工表:

员工代码姓名家庭住址部门代码
200001王华重庆0001
200002李想成都0003
200003张丽上海0002
200004李江华重庆0001
200005李四宁波NULL
  • 内连接

    • 查询语句:
    select e.员工代码,e.姓名,e.部门代码,d.部门名 from 员工表 e ,部门表 d where e.部门代码 = d.部门代码;	#隐式内连接
    select e.员工代码,e.姓名,e.部门代码,d.部门名 from 员工表 e inner join 部门表 d on e.部门代码 = d.部门代码;	#显式内连接
    
    • 查询结果(两句语句结果都相同):
    员工代码姓名部门代码部门名
    200001王华0001生产部
    200002李想0003市场部
    200003张丽0002销售部
    200004李江华0001生产部
  • 外连接

    • 查询语句
    select e.员工代码,e.姓名,e.部门代码,d.部门名 from 员工表 e left outer join 部门表 d on e.部门代码 = d.部门代码;	#左外连接
    select e.员工代码,e.姓名,e.部门代码,d.部门名 from 员工表 e right outer join 部门表 d on e.部门代码 = d.部门代码;	#右外连接
    
    • 查询结果

      • 左外连接:
      员工代码姓名部门代码部门名
      200001王华0001生产部
      200002李想0003市场部
      200003张丽0002销售部
      200004李江华0001生产部
      200005李四NULLNULL
      • 右外连接:
      员工代码姓名部门代码部门名
      200004李江华0001生产部
      200001王华0001生产部
      200003张丽0002销售部
      200002李想0003市场部
      NULLNULLNULL研发部
  • 自连接

    假设员工表新增了一个字段领导代码:

    员工代码姓名部门代码领导代码
    200001王华0001NULL
    200002李想0003200001
    200003张丽0002200001
    200004李江华0001200001
    • 查询语句:
    select e1.姓名 '员工' ,e2.姓名 '领导' from 员工表 e1 join 员工表 e2 on e1.领导代码 = e2.员工代码;	#意义为:查询每个员工对应的领导(实际上是一个内连接的语句,同样可以使用外连接语句)
    
    • 查询结果:
    员工领导
    李四王华
    李江华王华
    张丽王华
    李想王华
  • 联合查询

    • 查询语句:
    select e.员工代码,e.姓名 from 员工表 e where e.领导代码 is not null	#若单使用这条语句结果只有前四条数据
    union
    select e.员工代码,e.姓名 from 员工表 e where e.领导代码 is  null;	#若单使用这条语句结果只有最后一条数据
    
    • 查询结果:
    员工代码姓名
    200002李想
    200003张丽
    200004李江华
    200005李四
    200001王华
  • 子查询

    • 标量子查询

      • 查询语句:
      /*
      	此查询语句的意义为:查询"李华"所在本门的负责人,查询结果只有一条,为:李华江
      	注意:括号中的查询语句的输出结果只有一条
      */
      select d.负责人 from 部门表 d where 部门代码 = (select e.部门代码 from 员工表 e where e.姓名 = '王华');	
      
    • 列子查询

      • 查询语句:
      /*
      	此查询语句的意义为:查询生产部和销售部的员工
      	注意:括号中的查询语句的输出结果只有一列
      */
      select 员工代码,姓名,部门代码 from 员工表 where 部门代码 in (select 部门代码 from 部门表 where 部门名 = '生产部' or 部门名 = '销售部');	
      
      • 查询结果:
      员工代码姓名部门代码
      200001王华0001
      200003张丽0002
      200004李江华0001
    • 行子查询

      • 查询语句:
      /*
      	此查询语句的意义为:查询与王华部门相同且家庭住址一样的员工信息
      	注意:括号中的查询语句的输出结果只有一行
      */
      select 员工代码,姓名,家庭住址,部门代码 from 员工表 where (家庭住址,部门代码) = (select 家庭住址,部门代码 from 员工表 where 姓名 = '王华');
      
      • 查询结果:
      员工代码姓名家庭住址部门代码
      200001王华重庆0001
      200004李江华重庆0001
    • 表子查询

      • 表子查询的语法和用法与行子查询类似,可理解为在多个行子查询结果中使用or连接起来得到一个表子查询。因此不做演示。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值