mysql查詢關鍵字補充與多表查詢
阿新 • • 發佈:2022-05-06
目錄
查詢關鍵字補充
having過濾
關鍵字having和where的功能一樣的,都是對資料進行篩選,只不過where是用在分組之前的查詢篩選,having是用在分組之後的查詢篩選。
select 欄位 from 表 group by 分組欄位 having 條件
distinct去重
distinct關鍵字用於去掉一模一樣的記錄,如果資料中有主鍵,那麼肯定無法去重。
select distinct 查詢的欄位 from 表
order by排序
order by可以對查詢出來的資料進行排序。
升序排序
select 欄位 from 表 order by 排序欄位
# 或者
select 欄位 from 表 order by 排序欄位 asc
降序排序
select 欄位 from 表 order by 排序欄位 desc
多欄位排序:先按排序欄位1升序排序,如果值一樣,那麼按照排序欄位2降序排序。
select 欄位 from 表 order by 排序欄位1 asc 排序欄位2 desc
limit分頁
limit關鍵字用於限制查詢出來的記錄數。
語法1:只展示m條記錄
select 欄位 from 表 limit m
語法2:展示m條記錄後的n條記錄
select 欄位 from 表 limit m,n
補充:查詢記錄最大值
select 欄位 from 表 order by 排序欄位 desc limit 1
regexp正則
regexp關鍵字可以使用正則表示式篩選資料。
select 展示的欄位 from 表 where 欄位 regexp '正則表示式'
多表查詢
多表查詢的思路有兩種:子查詢和連表查詢
子查詢
子查詢就是將一條SQL語句的查詢結果加括號當做另外一條SQL語句的查詢條件;
比如現有學生表與班級表:
- student(sid,sname,cid(外來鍵))
- class(cid,cname)
如果想要查詢名字為'張三'的學生所在班級,可以先查詢'張三'所在的班級id:
select cid from student where sname='張三';
然後把查詢的結果當作條件:
select cname from class where cid=(
select cid from student where sname='張三'
);
這種多表查詢方式就是子查詢。
連表查詢
連表查詢即兩張表或多張表聯合查詢,連表操作有四個關鍵字:
- inner join:只連線兩張表中有對應關係的資料
- left join:以左邊的表為基準,展示所有的資料,沒有對應項則用NULL填充
- right join:以右邊的表為基準,展示所有的資料,沒有對應項則用NULL填充
- union:兩張的表的查詢結果拼接在一起輸出,前提是兩個查詢的列數要相同
比如現有學生表與班級表:
- student(sid,sname,cid(外來鍵))
- class(cid,cname)
inner join關鍵字查詢
select sname,cname from student inner join class
on student.cid=class.cid;
left join關鍵字查詢
select sname,cname from student left join class
on student.cid=class.cid;
right join關鍵字查詢
select sname,cname from student right join class
on student.cid=class.cid;
union關鍵字查詢
select sname,cname from student left join class
on student.cid=class.cid
union
select sname,cname from student right join class
on student.cid=class.cid;