SQL面试题(没看错是面试题,并不是笔试):
表1有一个字段,有a,b,c,d四行数据
表2有一个字段,有a,a,b,b四行数据
求:
(1)表1 inner join 表2,有几行数据,分别是?
(2)表1 left join 表2,有几行数据,分别是?
(3)在表1但不在表2的数据是哪几个,可以先说出哪些数据,再说使用关联怎么做。
解答:
数据库版本:Oracle 11g
--创建两个表
create table tb_a(name varchar2(5));
create table tb_b(name varchar2(5));
--插入数据
insert into tb_a values('a');
insert into tb_a values('b');
insert into tb_a values('c');
insert into tb_a values('d');
insert into tb_b values('a');
insert into tb_b values('a');
insert into tb_b values('b');
insert into tb_b values('b');
commit;
--1表1 inner join 表2
select tb_a a inner join tb_b b on a.name = b.name;
ANAME BNAME
a a
a a
b b
b b
--2表1 left join 表2
select a.name as aname
, b.name as bname
from tb_a a
left join tb_b b
on a.name = b.name;
ANAME BNAME
a a
a a
b b
b b
d null
c null
--3在表1但不在表2的数据,其实在上面2的基础上再加一个where条件即可
select a.name as aname
from tb_a a
left join tb_b b
on a.name = b.name
where b.name is null;
ANAME
d
c