个人学习笔记,仅供参考
select 后面跟着的
- <目标列表达式>:可以是列名、算术表达式、字符串常量"xxxx"、聚集函数
- <目标列表达式>可以用到的聚集函数:遇到空值,除了Count*之外,都跳过空值只处理非空值
Lower()\Upper() 转换大小写 Count 统计一列中值的个数 1、使用COUNT(*)对表中行的数目进行计数,不管表的列中包含的是空值( NULL ) 还是非空值,不忽略NULL值。
2、使用COUNT( 列名 ) 对特定列中具有值的行进行计数,忽略NULL值。
Sum 求一列值的总和(数值型) Avg 求一列值的平均(数值型) AVG()函数忽略列值为NULL的行。 Max、Min 求最大最小值 - DISTINCT:写在查询的列名前面,表示该列去除重复值,DISTINCT后面必须使用列名,不能用于计算或表达式。DISTINCT只能用于COUNT(distinct xxx)函数,DISTINCT不能用于COUNT( * )。
- TOP:表示输出查询表的前多少条记录,后面可以加数字“ TOP 5” 输出前五条,也可以加百分比“ TOP 50 PERCENT ” 表示输出前百分之五十
from 后面跟着的
- AS语句:给表起别别名,也可以用在select后面给列起别名
where 后面跟着的
- where主要是在什么时候用呢?这一列不是随便取的,是有条件的取出某些值的时候
- 条件运算符,注意是字符串加单引号,数字就不用处理
= 等于 <>或者写作!= 不等于 > 、<
大于、小于 >= 、 <= 大于等于、小于等于 AND\OR\NOT 条件并列/条件选择 IN(某个集合)NOT IN 只要是在该集合中就可以 (NOT) BETWEEN……AND…… 在某个范围内(但是是包括还是不包括
不同的数据库处理方式不同)
LIKE(一般和通配符一起用)NOT LIKE
搜索某种模式 Escape<换码字符> 当like后面的字符串中需要转置的时候ESCAPE'\' IS NULL\IS NOT NULL 空值查询 - LIKE子句:因为like后面的模式是要结合通配符的,所以先说通配符知识
这里演示一下[charlist]用法,假如我想查找不以C/A/R开头的人的信息,可以这样写 NOT LIKE '[CAR]%' 。另外根据数据的编码方式不同,一个汉字ASCII需要两个'_',GBK需要一个通配符 描述 % 代表零个或多个字符 _ 仅替代一个字符 [charlist] 表示从这个list中任选一个字符 [^charlist]
或者
[!charlist]
不在字符列中的任何单一字符 - 'like'什么时候等价于'='?当Like后面不是模糊查询的时候
Group by 语句
- 有Group by的函数必然有聚集函数
- 聚集函数只存在于SELECT子句或者Group by 的HAVING子句中
- Having子句的应用场景:分组后,有些不满足要求的组不予输出,比如“查询选修了三门以上课程的学生学号”,having后的聚集函数是对于分组后的每一个组进行聚集。
- WHERE子句和HAVING子句的作用对象不同,前者是整张表,后者是一个个小组
Order by 语句
- 一般是放在一个查询语句的最后,因为它是对整体结果(也就是对上面已经查找完毕的表)进行排序操作的
- 升序ASC 降序DESC 默认升序 ——ORDER BY XXXX DESC/ASC
- 可以对多列进行排序,且排序的升降序可以不同,当前面一列有完全相同的值时(包括nulls),才会让下一列的值进行排序。
-
对空值的排序NULLS FIRST \ NULLS LAST
等值连接和非等值连接:界定标准--WHERE子句后的连接字段之间的连接符号——如果是等号--等值,其他符号(大于小于betweenand等等)都是非等值,连接字段名字不必相同但是必须可比
嵌套循环连接算法:在连接条件‘表1.列名1=表2.列名2’,先从表1提取一个元组,找到列名1,然后遍历表2元组的列名2,找到满足条件表1.列名1=表2.列名2的元组,提取所需信息
自然连接:连接多表的输出中去掉重复的列
自身连接:记得取别名,一般在from子句中
外连接:表1 Left(right) Outer Join 表2 On(表1.列名1=表2.列名2)——去除结果中的重复值,也可以用Using(列名)
嵌套查询:外层查询|父查询、内层查询|子查询(不能有ORDER BY 子句)
不相关子查询:子查询的查询条件不依赖于外层查询——直接把子查询拿出来,也能够运行
相关子查询:子查询的查询条件依赖于外层查询,整个查询语句成为相关嵌套查询——直接拿出子查询运行会报错,因为子查询中的条件包含外层查询的数据。
例子:找出每个学生超过他所选课平均成绩的课的课程号
带有ANY(任意一个)或ALL(所有)谓词的子查:与>\<\>=\<=\!匹配使用,但其实可以等价到max、min、in中.解释一下,就比如xxx<ANY(一个集合),相当于xxx只需要小于这个集合中最大的那个值就可以
= | != | < | <= | > | >= | |
ANY | IN | -- | <MAN | <=MAN | >MIX | >=MIX |
ALL | -- | NOT IN | <MIN | <=MIN | >MAX | >=MAX |
带有EXISTS(NOT EXIST)的子查询:只返回存在还是不存在(boolen--true--false)
例子:查询所有选修了一号课程的同学姓名——课程号=1这个信息是Exists的
所有IN\比较运算\ANY和ALL都可以用带EXIST的子查询替代,大部分时候都需要全称量词和存在之间的转换。!这部分比较难,很难懂,我现在也不是很懂,准备问一下老师。