1.數(shù)據(jù)查詢
基本語(yǔ)法select 字段列表/* from 表名 [where 條件];
完整語(yǔ)法select [select 選項(xiàng)] 字段列表 [字段別名] / * from 數(shù)據(jù)源 [where 條件子句][group by 子句] [having 子句] [order by 子句] [limit 子句];
--1.select選項(xiàng) :select 對(duì)產(chǎn)出來(lái)的結(jié)果的處理方式
????????all(默認(rèn))晃听,保留所有的結(jié)果 select * from 表名 === select all * from 表名
? ? ? ? destinct扒接,去重 查出來(lái)的結(jié)果伐弹,將重復(fù)給去除(只發(fā)生在所有字段都相同的情況下)
2.字段別名 :當(dāng)數(shù)據(jù)進(jìn)行查詢時(shí)寨躁,有時(shí)候名字并不一定滿足需求(多表查詢是吼鱼,會(huì)有同名字段)劈伴,需要對(duì)字段名進(jìn)行重命名 :既別名
--1.as? :字段名 as 別名
--2.字段名 別名
3.數(shù)據(jù)源
數(shù)據(jù)源即為 數(shù)據(jù)來(lái)源劲藐,關(guān)系行數(shù)據(jù)庫(kù)的來(lái)源都是數(shù)據(jù)表:本質(zhì)上只要保證數(shù)據(jù)類(lèi)似二維表愈污,都可以作為數(shù)據(jù)源
數(shù)據(jù)源 分為多種,既單表數(shù)據(jù)源涨缚、多表數(shù)據(jù)源轧粟、查詢語(yǔ)句
--1.單表數(shù)據(jù)源:select * from 表名
--2.多表數(shù)據(jù)源:select * from 表名1,表名2脓魏,表名3...........;
select * from 表1兰吟,表2;
從一張表中 取出一條記錄,去另外一張表中匹配所有記錄茂翔,且全部保留:(記錄數(shù)和字段數(shù))混蔼,將這種結(jié)果 稱之為笛卡爾集 既一種交叉連接?
笛卡爾集一般并沒(méi)有什么卵用,耗費(fèi)相當(dāng)多資源 珊燎,需要盡量避免出現(xiàn)笛卡爾集
--3.子查詢 數(shù)據(jù)的來(lái)源是一條查詢語(yǔ)句(查詢語(yǔ)句的結(jié)果是一張二維表)
select * from (select 語(yǔ)句) as 表名 ; 相當(dāng)于將括號(hào)內(nèi)select 語(yǔ)句 的查詢結(jié)果起一個(gè)別名(as 表名)
4.where 子句?
where 子句用來(lái)判斷數(shù)據(jù)惭嚣,篩選數(shù)據(jù)
where 子句返回結(jié)果 0或者1 false or true
????????????基本運(yùn)算符:> ,< ,>= 等等
? ? ? ? ? ? 邏輯運(yùn)算符:&&(and)遵湖,|| (or) ,! (not)
? ? ? ? ? ? 模糊查詢 :like , %表示任意多個(gè)字符 ,_表示一個(gè)任意字符
? ? ? ? ? ? select * from students where name like '黃%'? (表示查詢姓黃的學(xué)生)
? ? ? ? ? ? select * from students where name like '黃_'? (查詢姓黃并且名字是一個(gè)字的學(xué)生)
? ? ? ? ? ? select * from students where name like “黃%” or name like "%靜" (查詢姓黃或叫靜的學(xué)生)
? ? ? ? ? ? 范圍查詢:between .......and..........(在...區(qū)間)(當(dāng)存在多個(gè)and 時(shí) 晚吞,將優(yōu)先匹配between and)延旧,in/not in??
where 是唯一一個(gè)直接從磁盤(pán)獲取數(shù)據(jù)的時(shí)候就開(kāi)始判斷的條件,從磁盤(pán)取出一條記錄槽地,則開(kāi)始進(jìn)行where 判斷迁沫,判斷結(jié)果成立則加載進(jìn)內(nèi)存,如果不成立則放棄(從源頭保證盡可能避免的無(wú)效數(shù)據(jù)占用內(nèi)存)捌蚊;而其他的判斷集畅,都是后期對(duì)內(nèi)存進(jìn)行的判斷
--1.集合 in( )
--2.between A and B (在 A 到 B 之間)
其中 between 本身是閉區(qū)間 且 左邊的值必須小于右邊的值
5.Group by 子句 (根據(jù)某個(gè)字段進(jìn)行分組,相同的放一組缅糟,不同的放不同的組)
Group by 只會(huì)將同類(lèi)型數(shù)據(jù)進(jìn)行分組挺智,且只展示該組第一個(gè)數(shù)據(jù)?
在新MySQL 中 group by 字段 必須被 select 約束?
按照字段分組,表示此字段相同的數(shù)據(jù)會(huì)被放在一個(gè)組中
分組后窗宦,只能查詢出相同的數(shù)據(jù)列赦颇,對(duì)于有差異的數(shù)據(jù)列無(wú)法出現(xiàn)在結(jié)果集中
可以對(duì)分組后的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),做聚合運(yùn)算
--1.基礎(chǔ)語(yǔ)法
select 列1迫摔,列2沐扳,聚合.......from 表名 group by 列1,列2句占,列3.沪摄。。
--2.having? 對(duì)分組的結(jié)果進(jìn)行篩選
where 和 having 的區(qū)別
where 對(duì) from 后面指定的表進(jìn)行篩選 杨拐,屬于篩選原始數(shù)據(jù)
having 對(duì)group by? 的結(jié)果進(jìn)行篩選
--3.分組的意義是為了統(tǒng)計(jì)數(shù)據(jù)(按照分組字段 進(jìn)行數(shù)據(jù)統(tǒng)計(jì))
SQL 提供了一系列的統(tǒng)計(jì)函數(shù):
count () :統(tǒng)計(jì)分組后的記錄數(shù)
? ? ? ? ? ? 里面可以使用兩種參數(shù): * 代表統(tǒng)計(jì)記錄,字段名代表統(tǒng)計(jì)對(duì)應(yīng)的字段 (null? 不進(jìn)行統(tǒng)計(jì))
max():統(tǒng)計(jì)最大值
min ():最小值
avg():平均值
sum():和
--4.分組的排序
group by 字段 [asc/desc]?分組 會(huì)自動(dòng)排序擂啥,根據(jù)分組字段哄陶, 默認(rèn)升序asc ,需要降序desc需要聲明出
對(duì)分組排序的結(jié)果 合并之后的整體結(jié)果進(jìn)行排序? 而不是對(duì)于分組內(nèi)部的數(shù)據(jù)進(jìn)行排序
--5. 多字段分組 哺壶,先班級(jí)屋吨,后男女
查詢每個(gè)班級(jí) 對(duì)應(yīng)性別下有多少人 先按照班級(jí)排序 后按照性別排序
select class_id,male,count(*) from my_stu group by class_id,male;
--6.group_concat() 函數(shù)
可以對(duì)分組的結(jié)果中某個(gè)字段進(jìn)行 字符串鏈接(保留該組所有的某個(gè)字段)
--7.回溯統(tǒng)計(jì) with rollup
任何一個(gè)分組后 都會(huì)有一個(gè)小組 至扰, 最后都需要向上級(jí)分組進(jìn)行一次匯報(bào)統(tǒng)計(jì):(根據(jù)當(dāng)前分組的字段)
這就是回溯統(tǒng)計(jì):回溯統(tǒng)計(jì)時(shí),會(huì)將分組字段至空
單字段分組 回溯統(tǒng)計(jì)??
既 查詢每一個(gè)班級(jí)资锰,然后按照班級(jí)排序 完成后進(jìn)行一次回溯
多字段分組 回溯統(tǒng)計(jì)
既 先按照班級(jí)分組 班級(jí)又按照性別分組 ------->既性別會(huì)按照班級(jí)統(tǒng)計(jì)一次( x3 )敢课,而班級(jí)會(huì)單獨(dú)統(tǒng)計(jì)一次,
既:第一層分組 會(huì)有一次回溯 ,第二次分組 需要考慮 上一層分組的組數(shù)? 直秆。濒募。。圾结。瑰剃。。疫稿。培他。鹃两。遗座。直到最后一層分組
6.order by 子句
order by 排序 ,根據(jù)某個(gè)字段進(jìn)行升序或者降序排序,依賴校對(duì)集(大小寫(xiě)等)
基本語(yǔ)法:
order by 字段1 [asc/desc],字段2[asc/desc]..............?其中 asc 是升序(默認(rèn)操作) desc是降序
多字段排序 :先根據(jù)某個(gè)字段進(jìn)行排序俊扳,然后在排序好的內(nèi)部途蒋,再按照某個(gè)數(shù)據(jù)再進(jìn)行一次排序
7.limit子句?
是一種限制結(jié)果的子句:可以用來(lái)限制數(shù)量 多用于分頁(yè)
way1:只用來(lái)限制數(shù)據(jù)量 limit 數(shù)據(jù)量
way2:限制起始位置 & 限制長(zhǎng)度 多用于分頁(yè) 既從指定的位置開(kāi)始 向后找多少條數(shù)據(jù)
兩個(gè)參數(shù)分別對(duì)應(yīng)偏移量和長(zhǎng)度