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