SQL語句
SQL分類:
DDL:數(shù)據(jù)定義語句
create,alter,drop...
DML:數(shù)據(jù)操作語句
insert(添加記錄),update(修改記錄中的值),delete(刪除記錄),select(查詢語句(表中))
添加記錄:INSERT
語法1:
insert into 表名 (列名1,列名2,...,列名n)
values (值1,值2,...,值n);
語法2:
insert into 表名
values (值1,值2,...,值n);
注意:
列可以按照自己的順序來寫,值必須和列一一對(duì)應(yīng)
主鍵列:如果設(shè)定為自動(dòng)增長,不指定值,默認(rèn)從1開始,如果已經(jīng)有數(shù)據(jù),取上一個(gè)記錄值+1娱仔,也可以根據(jù)自己需要指定值,如果賦值0或者NULL,也是表示自動(dòng)增長,建議使用NULL
單表查詢:
select 字段,...
from 表
where 行篩選
group by 分組字段
having 組篩選
order by 列排序
limit m,n取結(jié)果中的一部分行辅鲸;
1.基本查詢語句:
select 字段,...,字段
from 表名;
注意:
1.執(zhí)行流程:from,確定表-->select,確定列
2.如果要查詢所有的列,可以用*
3.對(duì)于數(shù)值,日期時(shí)間類型的列可以做算術(shù)運(yùn)算,? +,-,*,/
4.查詢的結(jié)果稱為結(jié)果集,由行和列組成
5.在查詢時(shí),可以修改結(jié)果集中的列名,就是給列取別名:
select 列名或者表達(dá)式 [as] 別名,...
from 表名;
6.查詢時(shí),可以把多個(gè)值拼接到一起,? concat(值1,值2,...,值n)
7.null: 代表的未知的,不確定的,不是一個(gè)固定值,一種語義的描述,很特殊
表達(dá)式中如果有空值,結(jié)果還是空笛厦,如果null需要轉(zhuǎn)換成某一個(gè)值:
ifnull(列或表達(dá)式,特殊值)
列或表達(dá)式為空時(shí),結(jié)果取特殊值
8.查詢?nèi)ブ氐慕Y(jié)果,利用distinct
select distinct 字段
from 表;
2.查詢語句之排序子句:order by
語法:
order by 字段 asc|desc,...,字段 asc|desc;
注意:
1.執(zhí)行流程:from,確定表-->select,確定列,結(jié)果集確定->order by,排序
2.asc:升序,? desc:降序,? 如果不指定升降,默認(rèn)升序
3.如果要按照多個(gè)列排序
order by 列1 asc|desc,列2? asc|desc
優(yōu)先看前面的列,前面的列值相等再看下一個(gè)列
3.查詢語句之行篩選子句--where
語法:
where 條件表達(dá)式
注意:
1.執(zhí)行流程:from,確定表-->where,行篩選,一行一行篩選->select,列->order by,排序
2.條件運(yùn)算符
????關(guān)系運(yùn)算符:>,>=,<,<=,=(等于),!=,<>(不等于)
????between...and...: 在...和...之間,閉區(qū)間,包含兩個(gè)端點(diǎn)值
????in(點(diǎn)值,...):在列舉的值中存在
????is null:是空的, null代表未知不確定,語義表達(dá)
????判斷是否是空的,不能用=,無法查詢結(jié)果,只能用is null
????like:模糊查詢
????通配符:_:可以代表任意一個(gè)字符????????????%:可以代表任意個(gè)(0,1,多個(gè))字符
????where 列或表達(dá)式 like '通配符組合表達(dá)式'
????eg:查詢名字中包含a? '%a%'
邏輯運(yùn)算符:
????not,? and,? or
????與或非和Java中一樣
????注意:優(yōu)先級(jí),? not>and>or
????如果判斷時(shí),可以利用()改變順序
????not使用
????not between...and...:
????not in(點(diǎn)值,...):
????is not null:
????not like:
4.limit:取一部分結(jié)果
語法:
limit m,n;
注意:
1.執(zhí)行流程:from->where->select->order by,排序->limit,取一部分結(jié)果
2.limit m,n:?
????m:從第m條開始, 計(jì)數(shù)從0開始計(jì)數(shù)
????n:共取多少行
????如果從0開始,m可以省略? , limit n
作用:可以實(shí)現(xiàn)分頁效果
eg:設(shè)定一頁10條
? 一共有105條,需要11頁
? 第1頁:limit 0,10
? 第2頁:limit 10,10
? 第n頁:limit (n-1)*10,10
5.查詢之分組子句---group by
目的:統(tǒng)計(jì)時(shí),把數(shù)據(jù)分成多塊,分別統(tǒng)計(jì)
語法:
group by 字段,...
注意:
1.執(zhí)行流程:from->where,行的篩選->group by,剩下的所有行分組->
select,對(duì)每個(gè)組做統(tǒng)計(jì),一個(gè)組得到一個(gè)結(jié)果->order by,排序->limit
2.當(dāng)使用group by分組時(shí),除了查詢每組統(tǒng)計(jì)結(jié)果,建議把分組的列查詢出來,這樣會(huì)更有意義
3.如果查詢中涉及到組, select中使用組函數(shù),或者使用了group by子句,不能直接查詢普通的列,但可以查詢分組的列
4.同時(shí)按照多個(gè)列分組,多個(gè)列值都相等才算作一組
group by 列1,列2...
函數(shù):
mysql中內(nèi)置了很多函數(shù)
單行函數(shù):一個(gè)行得到一個(gè)結(jié)果, ifnull(), concat()
多行函數(shù)(組函數(shù)):多個(gè)行(一個(gè)組)得到一個(gè)結(jié)果, 統(tǒng)計(jì)函數(shù),聚合函數(shù)
如果所有的數(shù)據(jù)沒有分組,算作一組
聚合函數(shù),組函數(shù):
sum(列或表達(dá)式):求和
avg(列或表達(dá)式):求平均
max(列或表達(dá)式):求最大值
min(列或表達(dá)式):求最小值
count(列或表達(dá)式):統(tǒng)計(jì)個(gè)數(shù)
注意:
1.組函數(shù),統(tǒng)計(jì)是不包括空值
2.sum(),avg()只針對(duì)數(shù)值型,其它三個(gè)可以針對(duì)任意類型
3.count()為了統(tǒng)計(jì)有多少行,建議統(tǒng)計(jì)非空列,主鍵最合適,還可以用count(*)
4.select中使用組函數(shù),就不能同時(shí)查詢普通的列或使用單行函數(shù)
未完待續(xù)......