select语句学习笔记

select语句(1)

注:这篇博客是博主通过学习B站这位UP主(https://space.bilibili.com/508641166/video?tid=0&page=1&keyword=&order=pubdate)18到22有关select语句的教程所得出的总结。

1.SELECT一般格式

SELECT 目标表达式 别名(,目标表达式 别名...)
FROM 表名或视图名 别名 (,表名或视图名 别名... )
WHERE 条件表达式  
GOUOP BY 列名(,列名...) HAVING 条件表达式
ORDER BY 列名(,列名...)[ASC|DESE]

2.select子句

(1)属于投影运算——不消除重复行

(2)SELECT语句后+全部列名或经过计算的值

(3)各列的先后顺序可以与表中的逻辑顺序不一样,用户可以根据需要改变列的显示顺序

eg1.SELECT A FROM B

eg2.SELECT *(代表全部列名) FROM A

PS.

1.GETDATE()——函数得到系统时间

2.YEAR()——返回指定日期的年日期部分的整数

eg3.SELECT A,YEAR(GETCHAR())-AGE FROM B
注:这里的YEAR(GETCHAR())-AGE中-是减号

3.DISTLNCT筛选避免重复

eg4.SELECT DISTINCT A FROM B

3.WHERE子句中的condition

(1)使用比较运算符

 =,>,<,>=,<=,!=或<>,!>,!<

ps.逻辑运算符NOT+含上述比较运算符表达式
eg1.SELECT A FROM B WHERE NOT C>20;

(2)(NOT) BETWEEN…AND…

ps.

1.BETWEEN后:范围的下限(及低值);AND后范围的上限

eg1.SELECT A FROM WHERE A BETWEEN 1 AND 2;

(3)确定集合 (NOT) IN <表值,表值,表值…>

eg2.SELECT A FROM B WHERE C IN('a','b')

(4)使用字符串匹配(NOT)LIKE

格式: [NOT] LIKE ‘<匹配串>’ [ESCAPE’<转码字符>’]

  • 匹配模板:固定字符串或含通配符的字符串(当匹配模板为固定字符时,可以用=运算符取代LIKE,用!=或<>取代NOT LIKE 谓语)

(5)通配符:%——代表任意长度(长度可以为0)的字符串

eg3.a%b表示以a开头,以b结尾的任意长度的字符串。acb、addgb等都符合该匹配串。

(6)_——代表任意单个字符

eg4.a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb等都满足该匹配串。

eg5.查询第2个汉字为“阳”字的学生的姓名

SELECT name FROM Student WHERE name LIKE'_阳%'

(7)ESCAPE短语

  • 用户查询字符串本身带有%或_时要用ESCAPE’<转码字符>’短语对通配符进行转义

      eg1.
    
      错误表达:SELECT A FROM B WHERE C LIKE'DB_DESIGN'
      注:C包含于A中
      正确表达:SELECT A FROM B WHERE C LIKE'DB\_DESIGN' ESCAPE'\'
    
      eg2.SELECT * FROM A WHERE LIKE 'DB\_%I__' ESCAPE'\'
    

(8)涉及空值的查询

  • 使用谓语IS NULL 或 IS NOT NULL

  • “IS NULL”不能用“=NULL”代替

      eg1.SELECT A FROM B WHERE A(C) IS NULL
    

(10)多重条件查询:用逻辑运算符AND和OR来连接多个查询条件(注:1.AND的优先级高于OR ; 2.可以用括号改变优先级 ; 3.可以用来实现多种其他谓语)

eg1.SELECT A FROM B WHERE C='a' AND D<20;
eg2.SELECT A FROM B WHERE C IN('a','b','c')

4.对查询结果排序:使用ORDER BY 子句

  • 可以按一个或多个属性列排序

a.ASC(升序):排序列为空值的元组最后显示

b.DESC(降序):排序列为空值的元组最先显示

eg1.SELECT A FROM B WHERE C=3 ORDER BY D DESC

5.使用集函数·5类主要集函数

(1)COUNT(<列名>):统计个数

(2)SUM(<列名>):求总和

(3)ATG(<列名>):求平均值

(4)MAX(<列名>):求最大值

(5)MIN(<列名>):求最小值

eg1.SELECT AVG(A) FROM B WHERE C=1;
  • ps

1.统计时不计NULL值

2.COUNT(*)统计行数

3.DISTINCT 在列名前加DISTINCT则统计时去掉重复行

6.对查询结果分组

###a.使用GEOUP BY子句分组

eg1.SELECT A FROM B WHERE C>=90 GROUP BY A;
  • ps

1.分组方法按指定的一列或多列值分组,值相等的为一组

2.使用GROUP BY 子句后,SELECT子句只能包含GROUP BY 后列名和集函数

3.GROUP BY 子句作用对象是查询的中间结果表

###b.使用HAVING短语筛选最终输出的结果
(WHERE是对FROM后的对象筛选,而HAVING是对ORDER BY分组后的结果筛选)

eg1.SELECT A FROM B GROUP BY A HAVING COUNT(*)>=3
  • ps

1.只有满足HAVING短语指定条件的组才输出

2.HAVING短语与WHERE子句区别:作用对象不同

WHERE子句作用于基表或视图,从中选择满足条件的元组

HAVING短语作用于组,从中选择满足条件的组

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2023 00hello00

请我喝杯咖啡吧~

支付宝
微信