关联查询
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;
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;
相关文章推荐
- 选择学生 多对多
- jQuery
- .NET设计模式(1):1.1 单例模式(Singleton Pattern)
- 设计模式(Design Pattern)系列之.NET专题
- Spring 传播行为(PROPAGATION)
- 几个有意思的题目
- rsa
- 无法获取model上的排他锁
- mysql5.7.12安装到configuration这一步卡在start service
- iOS数据库离线缓存思路和网络层封装——数据缓存操作封装
- LinkedList搭配collections.sort做字符串排序。针对上文精简了方法的实现部分
- WinForm全屏应用程序
- C#杀死Explorer(资源管理器)
- 对于库函数strstr的模拟
- iOS开发-纯代码自定义TableViewCell
- 【面试题】小数转换为人民币大写形式,PHP实现。
- URL出现特殊字符影响正常传参的处理
- 中文VS2008 安装ASP.NET MVC框架问题?
- LeetCode之18---4Sum
- JAVA面试经验宝典