總結(jié)
查詢的完整格式台腥,格式很難看,實(shí)際很好寫
SELECT select_expr [,select_expr,...] [
FROM tb_name
[WHERE 條件判斷]
[GROUP BY {col_name | postion} [ASC | DESC], ...]
[HAVING WHERE 條件判斷]
[ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
[ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
完整的select語句
select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit start,count
執(zhí)行順序?yàn)椋?br>
from 表名
where ....
group by ...
select distinct *
having ...
order by ...
limit start,count
實(shí)際使用中绒北,只是語句中某些部分的組合黎侈,而不是全部
分頁查詢
當(dāng)數(shù)據(jù)量過大時(shí),在一頁中查看數(shù)據(jù)是一件非常麻煩的事情
語法
select * from 表名 limit start,count
說明
從start開始闷游,獲取count條數(shù)據(jù)
例1:查詢前3行男生信息
select * from students where gender=1 limit 0,3;
示例:分頁
已知:每頁顯示m條數(shù)據(jù)峻汉,當(dāng)前顯示第n頁
求總頁數(shù):此段邏輯后面會(huì)在python中實(shí)現(xiàn)
查詢總條數(shù)p1
使用p1除以m得到p2
如果整除則p2為總數(shù)頁
如果不整除則p2+1為總頁數(shù)
求第n頁的數(shù)據(jù)
select * from students where is_delete=0 limit (n-1)*m,m
連接查詢
當(dāng)查詢結(jié)果的列來源于多張表時(shí),需要將多張表連接成一個(gè)大的數(shù)據(jù)集脐往,再選擇合適的列返回
mysql支持三種類型的連接查詢休吠。
語法
select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列
例1:使用內(nèi)連接查詢班級(jí)表與學(xué)生表
select * from students inner join classes on students.cls_id = classes.id;
例2:使用左連接查詢班級(jí)表與學(xué)生表
此處使用了as為表起別名,目的是編寫簡單
select * from students as s left join classes as c on s.cls_id = c.id;
例3:使用右連接查詢班級(jí)表與學(xué)生表
select * from students as s right join classes as c on s.cls_id = c.id;
例4:查詢學(xué)生姓名及班級(jí)名稱
select s.name,c.name from students as s inner join classes as c on s.cls_id = c.id;
子查詢
在一個(gè) select 語句中,嵌入了另外一個(gè) select 語句, 那么被嵌入的 select 語句稱之為子查詢語句
主查詢
主要查詢的對(duì)象,第一條 select 語句
主查詢和子查詢的關(guān)系
子查詢是嵌入到主查詢中
子查詢是輔助主查詢的,要么充當(dāng)條件,要么充當(dāng)數(shù)據(jù)源
子查詢是可以獨(dú)立存在的語句,是一條完整的 select 語句
子查詢分類
標(biāo)量子查詢: 子查詢返回的結(jié)果是一個(gè)數(shù)據(jù)(一行一列)
列子查詢: 返回的結(jié)果是一列(一列多行)
行子查詢: 返回的結(jié)果是一行(一行多列)
標(biāo)量子查詢
查詢班級(jí)學(xué)生平均年齡
查詢大于平均年齡的學(xué)生
查詢班級(jí)學(xué)生的平均身高
select * from students where age > (select avg(age) from students);
列級(jí)子查詢
查詢還有學(xué)生在班的所有班級(jí)名字
找出學(xué)生表中所有的班級(jí) id
找出班級(jí)表中對(duì)應(yīng)的名字
select name from classes where id in (select cls_id from students);
行級(jí)子查詢
需求: 查找班級(jí)年齡最大,身高最高的學(xué)生
行元素: 將多個(gè)字段合成一個(gè)行元素,在行級(jí)子查詢中會(huì)使用到行元素
select * from students where (height,age) = (select max(height),max(age) from students);
子查詢中特定關(guān)鍵字使用
in 范圍
格式: 主查詢 where 條件 in (列子查詢)