ps:老本行,复习一下
SQL
查询语句总结
- 列名
Select Sname AS 姓名 from Student;
·这里AS可以省略。
- 去重:distinct
Select distinctSno from sc;
- WHERE条件查询
比较
=/>/</>=/<=确定范围
between … and …/notbetween … and …确定集合
IN/NOT IN字符匹配
LIKE/NOT LIKE空值
IS NULL/IS NOTNULL多重条件
AND/OR - LIKE匹配
_下划线:匹配任意一个字符
%百分号:匹配0个或多个字符;
[]:匹配[]中的任意一个字符。如[acgd]表示匹配a/c/g/d中的任何一个,对于连续的,可以写成[a-d];
[^]:不匹配[]中的任何一个字符。写成[^abgd]。
- SQL Server中的库函数
如:RTRIM,去掉尾随空格的干扰(默认保存时,多余位补充空格。)
Select Sname from Student WHERE RTRIM(Sname)LIKE ‘王__’
- 涉及空值NULL的查询
这里注意不能使用=/!=等符号,需要使用 ISNULL/IS NOT NULL。
- 多重查询条件,使用AND、OR
Select Snamefrom Student WHERE Sdept=’计算机系’ AND Sage<20;
- 查询结果排序
·ASC从小到大、DESC从大到小
·默认按照升序
·可以按多个列进行排序,首先按前面的列排序,遇到相同记录再按照第二列排序。
- 聚合函数
·COUNT(*):统计表中元素的个数;
·COUNT(DISTINCT 列名):统计本列中非空列值的个数;(DISTINCT表示不包括列重复值)
·SUM:计算列值的和;
·AVG:平均值
·MAX:最大值
·MIN:最小值
上述函数中除了COUNT(*)外,其他函数在计算过程中均忽略NULL值。
- 分组GROUP BY
比如需要统计每个学生的考试成绩,而不是全体学生的考试平均成绩时,就需要现将学生进行分组。(按每个人)
GROUPBY 分组依据
HAVING组条件
要求:
(1)查询表中的每个列必须要么是分组依据列(在GROUP BY后边的列),要么是聚合函数;
(2)GROUP BY后不能使用别名;
- 带WHERE分组的子句
过程:先执行WHERE子句,再对筛选出的满足条件的数据执行GROUP BY操作。
- 按多列分组
GROUP BYSdept,Ssex
多列分组,多列值合在一起唯一的分组。
- 使用HAVING子句
用于对分组后的结果进行再筛选。
如:
SelectSno,COUNT(*) 选课门数 FROM SC
GROUP BY Sno
HAVINGCOUNT(*)>3
最后筛选出统计结果满足大于3的组。
分组总结:
·WHERE子句用来筛选FROM子句中指定的数据源所产生的行数据;
·GROUP BY子句用来对经WHERE子句筛选后的结果数据进行分组;
·HAVING子句用来对分组后的结果数据再进行筛选。
- 普通多表连接查询
如:
SelectSname,Cno,Grade FROM Student S
JOIN SC
ON S.Sno =SC.Sno
WHERE Sdep = ‘计算机系’
注意:当为表指定了表名,在查询语句中的其他地方,所有用到表名的地方都要使用别名,而不能再使用原表名。
- 自连接
一种特殊的内连接,指互相连接的表在物理上为同一张表。
- 外连接
如:查询学生的选课情况,包括选了课程的学生和没有选课程的学生。
SelectStudent.Sno,Sname,Cno,Grade
From StudentLeft OUTER JOIN SC
ON Student.Sno =SC.Sno
有部分不满足表连接条件,但进行左外连接时也将它们显示出来,并将不满足连接条件的结果在相应列上放置NULL值。
- 子查询一个Select嵌套在另一个Select中。
常用到IN、NOT IN。
版权声明:本文为博主原创文章,未经博主允许不得转载。