1. 程式人生 > 其它 >mysql查詢關鍵字補充與多表查詢

mysql查詢關鍵字補充與多表查詢

目錄

查詢關鍵字補充

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;