1.全表查询
示例:select * from 表名
2.选择查询 选择特定的列或者字段
示例:select name,age 表名
3.查询别名 {原始字段名} as {别名}
示例:select name as '学生姓名' 表名
4.查询 常量和运算 加减乘除、取平均值、连接文本等
示例:select name,score,score / 2 as double_score from student
5.条件查询 where
示例:select name,score from student where name = '鱼'
6.条件查询 运算符 =
、 !=
、<
、>
示例:select name,score,age from student where name != 'dog'
7.条件查询 空值 "IS NULL" 和 "IS NOT NULL" 来判断字段是否为空值或非空值
示例:select name,age,score from student where age is not null
8.条件查询 模糊查询 like not like
- 百分号(%):表示任意长度的任意字符序列。
- 下划线(_):表示任意单个字符。
示例:select name,score from student where name not like '%李%'
9.条件查询 逻辑运算
- AND:表示逻辑与,要求同时满足多个条件,才返回 true。
- OR:表示逻辑或,要求满足其中任意一个条件,就返回 true。
- NOT:表示逻辑非,用于否定一个条件(本来是 true,用了 not 后转为 false)
示例:select name,score from student where name like '%李%' or score > 500
10.基础语法 去重 使用 DISTINCT
关键字来实现去重操作
示例:select distinct class_id ,score from student
11.基础语法 排序
在 SQL 中,我们可以使用 ORDER BY
关键字来实现排序操作。ORDER BY
后面跟上需要排序的字段,可以选择升序(ASC)或降序(DESC)排列
示例:select name,age,score from student order by score desc ,age asc
12.基础语法 截断和偏移
1)你可以使用手指挡住不需要看的部分(即截断)
2)根据任务的编号,直接翻到需要查看的位置(即偏移)
在 SQL 中,我们使用 LIMIT
关键字来实现数据的截断和偏移。
示例:select name,age from student order by age asc limit 1,3
13.基础语法 条件分支 case when
是 SQL 中用于根据条件进行分支处理的语法
示例:
select name, case when (age > 60) then '老同学' when (age > 20) then '年轻' else '小同学' end as age_level from student order by name asc14.函数 时间函数
- DATE:获取当前日期
- DATETIME:获取当前日期时间
- TIME:获取当前时间
示例:select name ,date() as '当前日期' from student
15.函数 - 字符串处理 转换大小写、计算字符串长度以及搜索和替换子字符串等
示例:select id,name ,upper(name) as upper_name from student where name = '热dog'
16.函数 - 聚合函数
- COUNT:计算指定列的行数或非空值的数量。
- SUM:计算指定列的数值之和。
- AVG:计算指定列的数值平均值。
- MAX:找出指定列的最大值。
- MIN:找出指定列的最小值。
示例:
select sum(score) as total_score, avg(score) as avg_score, max(score) as max_score, min(score) as min_score from student17.分组聚合 - 单字段分组 GROUP BY
关键字对数据进行分组
示例:
select class_id, avg(score) as avg_score from student group by class_id18.分组聚合 - 多字段分组 多字段分组和单字段分组的实现方式几乎一致,使用 GROUP BY
语法即可
示例:
select class_id, exam_num, count(id) as total_num from student group by class_id, exam_num19.分组聚合 - having 子句
HAVING 子句与条件查询 WHERE 子句的区别在于,WHERE 子句用于在 分组之前 进行过滤,而 HAVING 子句用于在 分组之后 进行过滤。
示例:
select class_id, sum(score) as total_score from student group by class_id having sum(score) > 15020.查询进阶 - 关联查询 - cross join
CROSS JOIN
是一种简单的关联查询,不需要任何条件来匹配行,它直接将左表的 每一行 与右表的 每一行 进行组合,返回的结果是两个表的笛卡尔积
示例:
select s.name as student_name, s.age as student_age, s.class_id as class_id, c.name as class_name from student s cross join class c21.查询进阶 - 关联查询 - inner join
INNER JOIN 只返回两个表中满足关联条件的交集部分,即在两个表中都存在的匹配行
示例:
select s.name as student_name, s.age as student_age, s.class_id as class_id, c.name as class_name, c.level as class_level from student s join class c on s.class_id = c.id22.查询进阶 -关联查询 - outer join
OUTER JOIN 是一种关联查询方式,它根据指定的关联条件,将两个表中满足条件的行组合在一起,并 包含没有匹配的行 。
在 OUTER JOIN 中,包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 两种类型,它们分别表示查询左表和右表的所有行(即使没有被匹配),再加上满足条件的交集部分
示例:
select s.name as student_name, s.age as student_age, s.class_id as class_id, c.name as class_name, c.level as class_level from student s left join class c on s.class_id = c.id23.查询进阶 - 子查询
子查询是指在一个查询语句内部 嵌套 另一个完整的查询语句,内层查询被称为子查询。子查询可以用于获取更复杂的查询结果或者用于过滤数据。
示例:
select name, score, class_id from student where class_id in ( select id from class );24.查询进阶 -子查询 - exists
子查询中的一种特殊类型是 "exists" 子查询,用于检查主查询的结果集是否存在满足条件的记录,它返回布尔值(True 或 False),而不返回实际的数据。
和 exists 相对的是 not exists,用于查找不满足存在条件的记录
示例:
select name, age, class_id from student where not exists ( select 1 from class where class.id = student.class_id )25.查询进阶 -组合查询
两种常见的组合查询操作:UNION 和 UNION ALL。
-
UNION 操作:它用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行。
-
UNION ALL 操作:它也用于将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留。两种常见的组合查询操作:UNION 和 UNION ALL。
-
UNION 操作:它用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行。
-
UNION ALL 操作:它也用于将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留。
-
示例
select name,age,score,class_id from student union all select name,age,score,class_id from student_new26.查询进阶 -开窗函数 - sum over
在 SQL 中,开窗函数是一种强大的查询工具,它允许我们在查询中进行对分组数据进行计算、 同时保留原始行的详细信息 。
开窗函数可以与聚合函数(如 SUM、AVG、COUNT 等)结合使用,但与普通聚合函数不同,开窗函数不会导致结果集的行数减少。
SUM(计算字段名) OVER (PARTITION BY 分组字段名)
示例
select id,name,age,score,class_id, avg(score) over (partition by class_id) as class_avg_score from student27.查询进阶 -开窗函数 - sum over order by
sum over order by,可以实现同组内数据的 累加求和
SUM(计算字段名) OVER (PARTITION BY 分组字段名 ORDER BY 排序字段 排序规则)
示例
select id,name,age,score,class_id, sum(score) over (partition by class_id order by score asc) as class_sum_score from student28.查询进阶 -开窗函数 -rank
Rank 开窗函数是 SQL 中一种用于对查询结果集中的行进行 排名 的开窗函数。它可以根据指定的列或表达式对结果集中的行进行排序,并为每一行分配一个排名。在排名过程中,相同的值将被赋予相同的排名,而不同的值将被赋予不同的排名。
当存在并列(相同排序值)时,Rank 会跳过后续排名,并保留相同的排名。
Rank 开窗函数的常见用法是在查询结果中查找前几名(Top N)或排名最高的行。
Rank 开窗函数的语法如下:
RANK() OVER (
PARTITION BY 列名1, 列名2, ... -- 可选,用于指定分组列
ORDER BY 列名3 [ASC|DESC], 列名4 [ASC|DESC], ... -- 用于指定排序列及排序方式
) AS rank_column
其中,PARTITION BY
子句可选,用于指定分组列,将结果集按照指定列进行分组;
ORDER BY
子句用于指定排序列及排序方式,决定了计算 Rank 时的排序规则。
AS rank_column
用于指定生成的 Rank 排名列的别名。
示例
select id,name,age,score,class_id, rank() over (partition by class_id order by score desc) as ranking from student29.查询进阶 -开窗函数 - row_number
Row_Number 开窗函数是 SQL 中的一种用于为查询结果集中的每一行 分配唯一连续排名 的开窗函数。
它与之前讲到的 Rank 函数,Row_Number 函数为每一行都分配一个唯一的整数值,不管是否存在并列(相同排序值)的情况。每一行都有一个唯一的行号,从 1 开始连续递增。
Row_Number 开窗函数的语法如下(几乎和 Rank 函数一模一样):
ROW_NUMBER() OVER (
PARTITION BY column1, column2, ... -- 可选,用于指定分组列
ORDER BY column3 [ASC|DESC], column4 [ASC|DESC], ... -- 用于指定排序列及排序方式
) AS row_number_column
其中,PARTITION BY
子句可选,用于指定分组列,将结果集按照指定列进行分组;
ORDER BY
子句用于指定排序列及排序方式,决定了计算 Rank 时的排序规则。
AS rank_column
用于指定生成的 Rank 排名列的别名。
示例
select id,name,age,score,class_id, row_number() over (partition by class_id order by score desc) as row_number from student30.查询进阶 -开窗函数 - lag / lead
开窗函数 Lag 和 Lead 的作用是获取在当前行之前或之后的行的值,这两个函数通常在需要比较相邻行数据或进行时间序列分析时非常有用
1)Lag 函数
Lag 函数用于获取 当前行之前 的某一列的值。它可以帮助我们查看上一行的数据。
Lag 函数的语法如下:
LAG(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)
参数解释:
column_name
:要获取值的列名。offset
:表示要向上偏移的行数。例如,offset为1表示获取上一行的值,offset为2表示获取上两行的值,以此类推。default_value
:可选参数,用于指定当没有前一行时的默认值。PARTITION BY
和ORDER BY
子句可选,用于分组和排序数据。
2)Lead 函数
Lead 函数用于获取 当前行之后 的某一列的值。它可以帮助我们查看下一行的数据。
Lead 函数的语法如下:
LEAD(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)
示例
select id,name,age, score,class_id, lag(name,1,null) over (partition by class_id order by score desc) as prev_name, lead(name,1,null) over (partition by class_id order by score desc) as next_name from student参考鱼皮大佬的SQL之母
学习链接:http://sqlmother.yupi.icu/#/learn
标签:name,知识,id,语法,score,student,SQL,查询,class From: https://www.cnblogs.com/xq0422/p/17651714.html