多表查询

多表查询

  • 如果两张表没有任何引用的关系,那么使用select * from 表格1,表格2;结果会成为,将表格2追加到表格1的后面这里写图片描述

合并结果集

  • 可以将结果类型相同的列合并,如果要进行整张表的合并,那么必须这两个表列数必须是相同的,
  • union 去除重复的行
  • union all 不去除重复的行
select * from aa
union [all]
select * from bb;

连接查询之内连接

  • 方言:格式
    • select * from 主表名1,外表名2;这样子查询 ,外键表的每一行都会匹配主键的表的所有行一次,产生了大量的垃圾数据这里写图片描述
    • 同时设置where条件,让互相引用的主外键相同,可以去除笛卡尔积,格式:select * from 表格名1,表格名2 where 表格名1.xxx=表格2.xxx;这里写图片描述
    • ==注意==为了解决如果要查询的表名过长,不容易书写的问题,也可以对表格设置别名,格式:select * from aa a,bb b where a.id=b.id;
  • 标准(推荐使用)
    • 格式:select 要查询的列… from 表格1 别名 inner join 表格2 别名 on 条件;
    • 例如:select * from aa a inner join bb b on a.id=b.id;
  • 自然:
    • 格式: select 要查询的列… from 表格1 别名 natural join 表格2 别名
    • 这种方式不需要添加on条件,会自动将表名中相同的列的记录进行匹配。

连接查询之外连接

  • 外连接查询,必须写查询条件,这样才可以知道,要合并的是哪一个列
  • 左外连接
    • 除了内连接的结果外,右表内容找不到和左表对应的信息,使用null填充。这里写图片描述
    • 格式:select 查询的列 from 表格名1 [别名] left join 表格名2 [别名] on 条件
    • 这里写图片描述
  • 右外连接
    • 除了内连接结果外,左表找不到和右表对饮的信息时候进行使用null填充。
    • 格式:select 要查询的列 from 表格名1 [别名] right join 表格名2 [别名] on 条件
    • 这里写图片描述
  • 全外连接
    • 除了内连接的结果外,还有左表和右表不符合条件的记录使用null填充
    • mysql是不支持全外连接的,
    • 但是可以通过合并左外连接,和右外连接的结果集可以得到
    • 例如:
             select a.id,b.id from aa a right outer join bb b on a.id=b.id
            union
             select a.id,b.id from aa a left outer join bb b on a.id=b.id;

子查询

  • 所谓的子查询就是,一条查询语句包含了另一条查询语句
  • 子查询可以出现额位置

    • where 后作为条件存在

      • 下面的例子子查询的含义:从表bb中查询出id=1的列
      • 外部查询的意思是:查询aa表中所有列条件是id值比子查询出来的结果要大
        select * from aa where id>(select id from bb where id=1);
        
    • from 后作为表存在

      • 使用这种方式查询必须,给表名添加别名,否则报错
      • 这种方式就是,把一个查询结果当作一个表格,进行二次查询
      • ==使用这样的方式,必须个表格一个别名,否则,系统找不到要查询的表==
      • 格式:select 要查询的列 from (select 子查询的列 from 表格名 where 子查询条件) [as] ==表格别名== where 外层查询条件;
      • 例如:select * from (select * from bb where id<4) b where b.id>1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值