【SQL】关键字
ORDER BY
ORDER BY(排序) 语句可以按照一个或多个列的值进行升序(ASC)或降序(DESC)排序。
MAX / MIN
MAX() 函数返回一组值中的最大值。这个函数常用于数字字段,但也可以用于文本字段来找出按字典顺序最后的元素。
与 MAX() 函数相对的是 MIN() 函数,它返回一组值中的最小值。
AS
为字段起别名
COUNT
对某个限定条件下的字段计数
COUNT(字段名)
AVG
对限定条件下的某个字段计算平均值
AVG(字段名)
ROUND
限定浮点数精度
GROUP BY
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1;
GROUP BY 后跟多个分组时,分组之间用逗号连接
HAVING
类似WHERE, 但是WHERE不可以使用搜索的聚合结果,HAVING可以使用
例如,where条件中不
select avg(a) as a from table_a where id = 1;
INNER JOIN
inner join表示内连接,用于将两个表中符合条件的数据进行匹配。在MySQL中,inner join通常会使用on子句来指定连接条件。
关键字 JOIN、INNER JOIN的含义是一样的,都表示内连接
SELECT * FROM employee INNER JOIN department ON employee.department_id = department.id;
多个表join时,每两个表需要用ON限定连接的字段。
子查询
一个查询的查询条件是另一个查询的查询结果
嵌套在其他SQL查询中的查询
WHERE IN:
查询在graders表中有记录的学生的名字
先从grades中查询所有有成绩记录的学生的id,通过id再从表students中查询学生的名字
SELECT name
FROM students
WHERE id IN (SELECT student_id FROM grades);
去重
关键字 DISTINCT
例如:从表A 表B中计算每个device提问的平均数,因为一个device可以提多个问题,所以需要对device进行去重。
select up.university, round(count(qpd.question_id) / count(DISTINCT qpd.device_id), 4) as avg_answer_cnt from user_profile as up inner join question_practice_detail as qpd on up.device_id = qpd.device_id group by up.university order by up.university;
UNION 与 UNION ALL
union 用于把来自多个select 语句的结果组合到一个结果集合中, 结果会去重
union功能与 union 相同,结果不去重
例如
select column,......from table1union [all]select column,...... from table2
day month year
YEAR函数用于返回date中的年份值
语法结构
YEAR(date)
-- 2022
SELECT YEAR('2022-05-23');
SELECT YEAR('2022-05-23 15:30:00');
MONTH函数用于返回date中的月份值
语法结构
MONTH(date)
-- 5
SELECT MONTH('2022-05-23');
SELECT MONTH('2022-05-23 15:30:00');
WEEK函数用于返回date中的星期数
语法结构
WEEK(date)
-- 21
SELECT WEEK('2022-05-23');
SELECT WEEK('2022-05-23 15:30:00');
DAY函数用于返回date中的日期值
语法结构
DAY(date)
-- 23
SELECT DAY('2022-05-23');
SELECT DAY('2022-05-23 15:30:00');