您的位置:首页 > 其它

关联查询

2016-04-16 00:00 225 查看
摘要: 查询某个人,有什么车 – 关联查询

create table persons(
id varchar(32) primary key,
name varchar(30),
age int
);
--车表-外表
create table cars(
id varchar(32) primary key,
name varchar(30),
price number(10,2),
pid varchar(32),
constraint cars_fk foreign key(pid) references persons(id))

1:查询某个人,有什么车 – 关联查询
insert into persons values('P001','Jack',44);
insert into cars values('C001','Audi',40.00,'P001');
insert into cars values('C002','Auto',1.2,'P001');

insert into persons values('P002','Mary',33);
insert into cars values('C003','Buick',18,'P002');

insert into persons values('P003','Alex',22);

insert into cars values('C004','BMW',45,null);

--以下的查询用的SQL92标准
select p.name,c.name
from persons p,cars c
where p.id=c.pid;

使用SQL99的标准:建议使用 innser join 内联接:
--SQL99标准
select p.name,c.name
from persons p inner join cars c on p.id=c.pid;

2:查询没有车的人
连接的方式:
内联接
左外 – 以左 left [outer] join
select p.name,c.name
from persons p left join cars c on p.id=c.pid
where c.name is null;
右外
--SQL99标准
select p.name,c.name
from persons p right outer join cars c on p.id=c.pid;

全外

连接的方式:
Inner join
Left outer join
Right outer join
Full outer join

3:查询有N部车的人
--查询pid在cars中出现的次数
select pid from cars group by pid having count(pid)=2;

--子查询 - 以下的子查询叫非相关子查询 - 即子查询可以独立执行的子查询叫非相关的子查询
select * from persons where id in(select pid from cars group by pid having count(pid)=2);

--以下是相关子查询 - 子查询不能独立执行。
select * from persons where (select count(*) from cars where cars.pid=persons.id)=0;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: