一、select基础查询语句。
1、select简单条件查询:select * from table where 条件
where后可以接的运算符有:
2、当我们无法确定查询的准确内容时,用模糊查询是一种很好的查询方式。
select * from table1 where field1 like ’value1%’
3、select也可对字段进行排序。(单字段、多字段都可以,以多字段为例)
select * from table1 order by field1,field2 asc/desc (asc表示升序排列,desc表示降序排列,默认升序)
排序后也可选取排序序列在n至m的数据,这时加limit条件,如:
select * from table1 order by field1 limit n,m;
4、计数,可以对单个字段计数,也可以对表中所有数据计数。
select count(*) from table1; 或 select count(*) from table1;
经常碰到的情况有找出表中的重复数据:
单字段查询:select * from table1 where field1 in (select field from table1 group by field1 having count(field1)>1);
多字段查询:select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
过滤掉表中的重复数据::select distinct * from table1
5、统计函数
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
6、表的连接,包括内连接和外连接。
内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据。语句格式为
table1 inner join table2 on 条件,条件运算符可以为 = >、>=、<=、<、!>、!<、<>。
外连接有左外连接、右外连接、全外连接,最常用的是左右外连接
左外连接匹配左表所有行数据如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值,右外连接同理。语句为 table1 left/right join table2 on 条件 。
7、派生表。派生表是一个查询结果生成的表,类似于临时表。语句格式如下:
select * from (select * from table1) as table2; table2是别名,即临时表的名字。
派生出来的表必须要是一个有效的表.因此,它必须遵守以下几条规则:
1. 所有列必须要有名称
2. 列名称必须是要唯一
3. 不允许使用ORDER BY(除非指定了TOP)
8、分组 group by 是对分组字段进行分组。
语句格式:select * from table1 group by field1;
分组查询通常用于配合聚合函数,达到分类汇总统计的信息。而其分类汇总的本质实际上就是先将信息排序,排序后相同类别的信息会聚在一起,然后通过需求进行统计计算。
牢记查询语句的执行顺序
select top/distinct 字段列表 from 表列表 where 筛选条件 group by 分组字段列表 having 对分组之后得到的结果集筛选 order by 排序字段列表
9、between和in的用法
between是指介于固定范围之间:select * from table1 where field (not) between a and b;
in是指字段的取值只要有一个满足条件就返回记录:select * from table1 where field (not) in ('a','b'...)
10、记录搜索。
limit一般用来限制行起始位置,limit(5,10)表示从第6行开始到第15行的数据,10表示偏移量
limit 5 offset 10 则表示从第11行开始,到第15行,偏移量为5
查询前n条记录:select * from table1 limit n;或 select top n * from table1;
选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
N到结尾记录
Select Top N * From 表 Order by ID Desc
ax(a) from tablename tb where tb.b=ta.b)
11、说明:几个高级查询运算词
1、Except返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值)。
2、Intersect返回 两个结果集的交集(即两个查询都返回的所有非重复值)。
3、union返回两个结果集的并集。union(隐含distinct,去除重复)、union all。
二、限制条件
(1)所有查询中的列数和列的顺序必须相同。
(2)比较的两个查询结果集中的列数据类型可以不同但必须兼容。
(3)比较的两个查询结果集中不能包含不可比较的数据类型(xml、text、ntext、image 或非二进制 CLR 用户定义类型)的列。
(4)返回的结果集的列名与操作数左侧的查询返回的列名相同。ORDER BY 子句中的列名或别名必须引用左侧查询返回的列名。
(5)不能与 COMPUTE 和 COMPUTE BY 子句一起使用。
(6)通过比较行来确定非重复值时,两个 NULL 值被视为相等。(EXCEPT 或 INTERSECT 返回的结果集中的任何列的为空性与操作数左侧的查询返回的对应列的为空性相同)