数据库部分---高级查询;
2016-12-04 11:10
281 查看
例子;
1.链接查询(查询多张表的数据,有外键关系的),是对查询后列的扩展
select * from 表名1,表名2; #会形成笛卡尔积,几张表的数据挨个匹配,数据的数量是每张的数量相乘,会产生冗余;
select * from 表名1,表名2 where 表名1.列名=表名2.列名;这样就去掉了冗余的数据;
上边的两个表结合后,有title和code重复的列,去掉多余的列:select 表1.列1,表1.列2,表1.列3....表2.列2.. from 表名1,表名2 where 表名1.列名=表名2.列名;
select * from 表1 join 表2 on 表1.列名=表2.列名;
上边的两个表结合后,有title和code重复的列,去掉多余的列:select 表1.列1,表1.列2,表1.列3....表2.列2.. from 表名1 join 表名2 on表名1.列名=表名2.列名;
2.联合查询,对查询后行的扩展,把多张表的数据放到一起显示,查询的列的数量要相同
select name,firm from family
union
select code,name from title
3.子查询
父查询:外层查询
子查询:里层查询
子查询先执行,子查询的结果作为父查询的条件
(1)无关子查询
子查询在执行的时候和父查询没有关系子查询可以单独执行
1.查询民族为汉族的所有人员信息
父查询:select * from info where nation=()
子查询:select code from nation where name='汉族' [b] nation与code是有外键关系的列[/b]
把子查询的语句放到父查询的括号内
结合起来:select * from info where nation=(select code from nation where name='汉族') 相当于nation=(code)
2.查询系列名为宝马5的所有汽车信息
(2)相关子查询
子查询在执行的时候和父查询有关系,子查询不可以单独执行
1.查询汽车表中油耗小于该系列平均油耗的所有汽车信息
父查询:select * from car where oil<(该系列平均油耗)
子查询:select avg(oil) from car where brand=该系列
select * from car where oil<(select avg(oil) from car where brand=该系列)
由于父查询和子查询都是查询的一张表,所以我们给父查询查询的表名,子查询查询的表名进行命名,
select * from car as aa where oil<(select avg(oil) from car as bb where brand=该系列)
然后再确定‘该系列’,
select * from car as aa where oil<(select avg(oil) from car as bb where bb.brand=aa.brand)
1.链接查询(查询多张表的数据,有外键关系的),是对查询后列的扩展
select * from 表名1,表名2; #会形成笛卡尔积,几张表的数据挨个匹配,数据的数量是每张的数量相乘,会产生冗余;
select * from 表名1,表名2 where 表名1.列名=表名2.列名;这样就去掉了冗余的数据;
上边的两个表结合后,有title和code重复的列,去掉多余的列:select 表1.列1,表1.列2,表1.列3....表2.列2.. from 表名1,表名2 where 表名1.列名=表名2.列名;
select * from 表1 join 表2 on 表1.列名=表2.列名;
上边的两个表结合后,有title和code重复的列,去掉多余的列:select 表1.列1,表1.列2,表1.列3....表2.列2.. from 表名1 join 表名2 on表名1.列名=表名2.列名;
2.联合查询,对查询后行的扩展,把多张表的数据放到一起显示,查询的列的数量要相同
select name,firm from family
union
select code,name from title
3.子查询
父查询:外层查询
子查询:里层查询
子查询先执行,子查询的结果作为父查询的条件
(1)无关子查询
子查询在执行的时候和父查询没有关系子查询可以单独执行
1.查询民族为汉族的所有人员信息
父查询:select * from info where nation=()
子查询:select code from nation where name='汉族' [b] nation与code是有外键关系的列[/b]
把子查询的语句放到父查询的括号内
结合起来:select * from info where nation=(select code from nation where name='汉族') 相当于nation=(code)
2.查询系列名为宝马5的所有汽车信息
(2)相关子查询
子查询在执行的时候和父查询有关系,子查询不可以单独执行
1.查询汽车表中油耗小于该系列平均油耗的所有汽车信息
父查询:select * from car where oil<(该系列平均油耗)
子查询:select avg(oil) from car where brand=该系列
select * from car where oil<(select avg(oil) from car where brand=该系列)
由于父查询和子查询都是查询的一张表,所以我们给父查询查询的表名,子查询查询的表名进行命名,
select * from car as aa where oil<(select avg(oil) from car as bb where brand=该系列)
然后再确定‘该系列’,
select * from car as aa where oil<(select avg(oil) from car as bb where bb.brand=aa.brand)
相关文章推荐
- 第五部分:高级查询 第六部分:常规索引管理 第七部分:全文索引管理 第八部分:数据库的备份和恢复 第九部分:数据库的安全管理
- 主流数据库之间对SQL:2003标准的不同实现方法比较(第三部分 前n项(Top-n)查询)
- Oracle不同数据库同步Merge方法,可以部分替代高级复制。对小数据量同步问题不大。转载http://blog.chinaunix.net/u1/55091/showart_430716.html
- 数据库里面的那些高级查询的句子
- 2014.9.9数据库高级查询
- 淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划
- ScottGu之博客翻译-LINQ to SQL第三部分,查询数据库 (Part 3 - Querying our Database)
- SQL高级部分一(SET运算符 && 高级子查询)
- 查询用limit获取数据库中部分数据中最大的ID
- shell操作数据库:高级查询
- 第二部分 应用篇 第五章 MongoDB高级查询
- SQL Server 数据库设计和高级查询
- 数据库高级查询设计
- MongoDB 数据库操作(三)-高级查询
- web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
- 主流数据库之间对SQL:2003标准的不同实现方法比较(第四部分 查询结果集中间n行数据)
- Django 模型高级部分及聚集查询
- Sqlserver 数据库高级查询和设计
- 淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划
- 高级查询和连接数据库