直接,代表笛卡尔积
聚合函数将一袋元组作为输入,然后产生一个标量值作为输出。聚合函数(几乎)只能在 SELECT 输出列表中使用。
SELECT中非聚合函数值如果要和聚合函数一起出现,需要用GROUP BY
对每组聚合函数结果再加条件筛选,需要用having
%匹配一串字符,_匹配一个字符
SUBSTR(' ',起点(下标1开始),长度)
UPPER->大写字母
CONCAT连接
输出重定向:
可以告诉数据库管理系统将查询结果存储到另一个表中,而不是将查询结果返回给客户端(如终端)。然后,您可以在后续查询中访问这些数据。
新建一个表
已经存在表
输出控制:
由于结果 SQL 是无序的,我们必须使用 ORDER BY 子句对元组进行排序
加DESC降序排序
grade降序,sid升序
使用limit限制输出个数:
加上offset输出从第几行开始的limit个
LIMIT 2表示返回 2 行,而 OFFSET 1
表示从结果集的第 2 行开始。这样,你可以获取从第 2 行到第 3 行的数据。
嵌套查询:
在其他查询内部调用查询,在单个查询中执行更复杂的逻辑。嵌套查询通常很难优化。
外部查询的范围包含在内部查询中(即内部查询可以访问外部查询的属性),但不能反过来。
比如下面,外部查询有course,内部查询就可以使用course.id:
IN() 先看()内,生成了一个表1,包含所有cid=15-445的学生的sid,再从外面判断,student表的每行的sid是否在表1内,在表1内就输出name
先内后外
JOIN和,区别,join和on连用
EXIST 先搜索外面,遍历每一个course中的记录,去和enrolled中的每一个记录比较,如果不满足course.cid = enrolled.cid就返回false,false发给NOT EXIST,就会输出查询
窗口函数:
窗口函数对一组相关的元组进行 "滑动 "计算。与聚合函数类似,但元组不会被组合成一个单一的输出数据元组。
两个特殊的窗口函数:
ROW NUMBER->当前行号,无重复1,2,3...
OVER (PARTION BY xxx) 分组排行号
OVER(ORDER BY xxx)按序排行号
RANK()->排名,相同的级别可以有相同的排名
Common Table Expressions(CTEs)
在编写更复杂的查询时,通用表表达式(CTEs)可替代窗口或嵌套查询。它们提供了一种在大型
查询中为用户编写辅助语句的方法,CTEs被认为是一个临时表,只适用于一次查询。
WITH 子句将内部查询的输出绑定到名称为该名称的临时结果上。
如下:先创建一个临时表ctesource,存maxid,再在这个临时表和student连接后的表中select