连接查询和union联合

1、union联合
把两个及以上的查询结果合并
eg、 select id,name,age from php313 where age<80 union select id,name,age from php313 where age>100;

要求: 两次查询的列数一致(可以来自于多张表)
推荐: 查询的每一列相对应的列类型也一样
多次sql语句取出的列名可能不一致,以第一次的列名为准
如果不同的语句中取出的行完全一致,则会合并成一行,去重复
如果不去重复,可以加在union后加 all

问题举例:给定两张表 ta,tb,存储的列类型都是id,num

    create table ta(
    id  char(1),
    num int
    );
    insert into ta
    values
    ('a',5),
    ('b',10),
    ('c',15),
    ('d',10);
    create table tb(
    id  char(1),
    num int);
    insert into tb
    values
    ('b',5),
    ('c',10),
    ('d',20),
    ('e',99); 

“`想得到的结果:a,5 b,15 c,25 d,30 e,99
这里写图片描述

2、连接查询

理论上讲不可能存在完全相同的两个行,但是表中可以存在完全相同的两行
因为 表内都有一个rowid,是不同的

  • 左连接
    select 列1,列2,列3 ,列N from
    tableA left join tableB
    on tableA 列=tableB 列 [ 此处表连接成一张大表,完全当成普通表看]
  • 右连接
    select 列1,列2,列3 ,列N from
    tableA right join tableB
    on tableA 列=tableB 列 [ 此处表连接成一张大表,完全当成普通表看]
  • 内连接
    select 列1,列2,列3 ,列N from
    tableA inner join tableB
    on tableA 列=tableB 列 [ 此处表连接成一张大表,完全当成普通表看]

`这里写图片描述

总结:
左连接和右连接的区别:左连接以左表为准,取右表找匹配数据,找不到就用NULL补齐;
内连接:查询左右表都有的数据,不要左右连接中NULL的一部分,是左右连接的交集
注意:能否查出左右连接的并集不能,不支持外连接。但是可以用union达到目的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值