连接查询和union联合

来源:互联网 发布:sql查询例题 编辑:程序博客网 时间:2024/05/17 03:49

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达到目的

0 0