MySQL 7.DQL - 資料查詢
阿新 • • 發佈:2021-10-28
DQL 資料查詢
select */欄位列表/函式 from 表名;
[where 檢索條件]
[group by 欄位列表 [having 檢索條件]]
[order by 欄位列表 asc/desc]
[limit 分頁引數]
子句 | 值 | 功能 |
---|---|---|
select | * / 欄位列表 / 函式 | 返回被查詢的欄位列或表示式 |
from | 表名 | 選擇被查詢的表 |
where | 檢索條件(and、or、like、in、between and) | 篩選、過濾資料 |
group by | 分組欄位 [having 檢索條件] | 根據指定欄位對資料分組 |
having | 檢索條件 | 篩選、過濾分組結果 |
order by | 排序欄位 [desc / asc] | 根據指定欄位對資料排序 |
limit | 分頁引數 / 跳過引數,分頁引數 | 分頁查詢資料行 |
1.基礎查詢
(1).查詢所有資料行的所有欄位列
select * form users;
(2).查詢所有資料行的部分欄位列
select id,name,pw from users;
2.Where 條件查詢
- 可以在 where 子句中指定任何條件
- 可以使用 and 或 or 指定多個條件,兩者同時使用時優先運算 and
- like 子句使用 % 或 _ 模糊搜尋時,效能消耗大,所以儘量不要使用 % 和_
- where子句還可以用在 update 和 delete 語句中
and or
(1).查詢值在某個區間的資料 select * from users where age < 22 and age > 23; (2).查詢值不在某個區間的資料 select * from users where age not between 22 and 23; (3).查詢同時滿足多個條件的資料, and 和 or 同時使用時要注意運算順序 select * from users where age = 22 or age = 24 and sex = '女'; -- age=24且sex='女',或age=24 select * from users where (age = 22 or age = 24) and sex = '女'; -- age=22或age=24,且sex='女'
like
(1).一個 _ 表示一個任意字元
select * from users where name like '__';
-- name為兩個任意字元的資料
select * from users where name like '_y';
select * from users where name like 'l_';
select * from users where name like '__y';
select * from users where name like 'l__';
(2). % 表示任意個任意字元
select * from users where name like '%q%';
-- name中任意位置含有 q 的資料
select * from users where name like 'q%'/'%q';
-- 以 q 開頭/結尾的資料
3.MySQL中的聚合函式
max(), min(), sum(), avg(), count()
聚合函式通常搭配分組進行資料的統計
-- 計算表中最大score,最小score,score總和,平均score,score項數,並分別命名
select max(score) as s_max,
min(score) as s_min,
sum(score) as s_sum,
avg(score) as s_avg,
count(score) as s_count from users;
select count(*) from users;
-- count(*) 按照表中所有列進行統計,只要其中一列有資料,就會統計
-- count(欄位) 按照指定欄位進行統計,如果列中出現 null ,則這個資料不會被統計
4.Group by 分組
- group by 語句根據一列或者多列欄位對資料進行分組
- 通常配合聚合函式使用,可以對分組後的結果統計、求和、求平均等
- 使用 group by 時,除了聚合函式,其他在 select 後面出現的欄位都需要寫在 group by 後面
(1).根據兩個欄位對資料分組後,統計各組的總數
select classid,sex,count(*) as num from users group by classid,sex;
-- 根據classid、sex欄位對資料進行分組,然後使用 count(*) 統計各組的總數
(2).根據一個欄位對資料分組後,求各組中另一個欄位的平均值
select classid,avg(age) as AVGage from class group by classid;
-- 根據classid欄位對資料進行分組,然後使用 avg(age) 求各組中age的平均值
(3).根據兩個個欄位對資料分組後,先求各組中另一個欄位的平均值,再對平均值的結果進行篩選
select age,sex,avg(score) as AVGscore from class group by age,sex having avg(score) >= 75;
-- 根據age、sex欄位對資料進行分組,然後使用 avg(score) 求各組中score的平均值,最後篩選出平均值在75及以上的組
5.order by 排序
- 在MySQL中使用select語句查詢的結果是根據資料在底層檔案中的結構來排序的
- 預設使用 asc ,即升序排列,使用 desc 為倒序排列
(1).根據多個欄位對資料進行排序
select * from class order by classid,age desc,score desc;
-- 先根據classid升序排列,classid相同時根據age降序排列,age相同時根據score降序排列
6.limit 分頁
- limit 語句運用在資料分頁,或查詢排序後值為最大/最小的資料
- limit n : 查詢表中前 n 條資料
- limit m,n : 跳過前 m 條資料,再查詢 n 條資料
(1).查詢表中前 n 條資料
select * from class limit 3;
(2).在表中跳過前 m 條資料,再查詢 n 條資料
select * from class limit 5,3;
(3).查詢表中某個欄位值最大的 n 條資料
select * from class order by score desc limit 5;