一、SQL语句书写规则
1.SQL语句以英文单词构成,每个英文单词就是一个关键字,例如SELECT。
2.许多DBMS要求SQL语句以;结束,多条SQL语句必须以;分隔
3.SQL语句不区分大小写,但是语句中涉及的表名或列名是否区分大小写,有赖于使用的DBMS及其相关配置
4.SQL中的字符串用单引号括起来
5.将SQL语句分成多行更容易调试
6.使用--符号进行注释
7.SELECT语句的顺序:
SELECT 列名 FROM表 WHERE 条件 GROUP BY 列名 HAVING 条件 ORDER BY 列名
二、查询与过滤
1.查询某几列全部数据
SELECT 列名1,列名2,.... FROM 表;
不同列名之间用逗号分隔
2.查询所有列的数据
SELECT * FROM 表
3.查询某列不重复数据
SELECT DISTINCT 列名 FROM 表;
DISTINCT关键字要放在列名前面,并且只能对单列进行不重复查询,不能多列
4.查询前几行数据
SELECT TOP 5 列名 FROM 表;
SQL server和access使用TOP关键字,其他的DBMS有所不同
如果没有使用ORDER BY 排序的话,TOP顺序只取决于表中的物理顺序
5.查询某几列数据并排序
SELECT 列名 FROM 表 ORDER BY 列名(DESC);
应保证ORDER BY是所有语句的最后一个字句,ORDER BY默认按照A-Z顺序排序,如需要Z-A顺序,需要加上DESC关键字,如需多列按照Z-A顺序,则必须对每一列都加上DESC关键字。
在对多列使用ORDER BY时,列名用逗号隔开,如ORDER BY 列1,列2,......,排序并非按照先排列1,再排列2的顺序来,而是当列1有相同值的时候,才对列2排序,如果列1都是唯一值,则不会对列2排序。升序和降序可以通过设置DBMS强制改变。
6.按条件查询
SELECT 列名 FROM 表 WHERE 条件1 and 条件2....
条件通常是根据操作符如<,>等设置的,不同的DBMS支持的操作符或操作符写法是不同的。字符串要用单引号或双引号括起来。其中between操作符包含起始和结束之间的所有值,是全包含。
可以使用逻辑操作符设置更多条件。
如果可以,尽量使用in操作符代替or,因为in比or速度更快且更适合构建动态查询。
7.空值查询
空值null是指记录中不包含任何值,与0、空格、空字符串不同,因此不能使用where = null来查询,而是要使用IS NULL子句。
8.模糊查询
使用通配符进行模糊查询,通配符必须和LIKE操作符一起使用,并且通配符只能用于文本字符。
9.聚合函数的使用
AVG(),COUNT(),MAX(),AIN(),SUM(),SELECT后面要查询的列中不能同时包含使用聚合函数和没有使用聚合函数的列。
三、数据整理
1.用as关键字创建别名
SELECT 列名 AS 别名 FROM 表
2.对查询结果分组
SELECT 列名 FROM 表 GUOUP BY 列名
GROUP BY字句中的每一列都必须是检索列或有效表达式,不能是聚合函数,不能使用别名
GROUP BY子句中的列顺序不会影响查询结果
如果分组列中包含NULL,则将NULL单独作为一组
GROUP BY字句必须在WHERE子句之后,ORDER BY子句之前
3.按条件查询分组
SELECT 列名 FROM 表 GROUP BY 列名 HAVING 条件
WHERE和HAVING的区别
WHERE针对整列的筛选条件,筛选结果是源数据中的整条记录,HAVING是针对分组的筛选条件,筛选结果是分组之后数据的整条记录。
WHERE是分组之前筛选,HAVING是分组之后筛选
四、联结表和子查询
1.作为子查询的SELECT语句只能查询单列,查询多列将返回错误
2.想查询没有关联的结果,就要使用外联结。
3.使用UNION连接的两个查询必须包含相同的查询列
4.对UNION连接的查询结果排序,只对最后一个SELECT语句使用ORDER BY子句即可。