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');