一般來說SQL主要是指SQL查詢語言,mysql主要是數(shù)據(jù)庫(kù)询刹。
檢索數(shù)據(jù)簡(jiǎn)單應(yīng)用
SELECT * FROM 數(shù)據(jù)庫(kù).表名
- 表示通配符,匹配表中所有字段萎坷。
# 搜索某一個(gè)字段
SELECT city FROM 數(shù)據(jù)庫(kù).表名;
# 搜索某兩個(gè)個(gè)字段
SELECT city凹联,name FROM 數(shù)據(jù)庫(kù).表名;
# 限制搜索一百條數(shù)據(jù)
SELECT city,name FROM 數(shù)據(jù)庫(kù).表名
limit 100;
這里的分號(hào)在圖形操作界面可以刪掉哆档,在命令行操作一定要帶上蔽挠。
排序用 order by
一般用數(shù)字字段來
# 升序排列
SELECT city,name FROM 數(shù)據(jù)庫(kù).表名
order by id;
# 降序排列
SELECT city瓜浸,name FROM 數(shù)據(jù)庫(kù).表名
order by id desc
limit 100;
過濾用 where
SELECT city象泵,name FROM 數(shù)據(jù)庫(kù).表名
where name = '杭州;
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where id > 100;
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where id between 100 and 200;
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where city in ('上海','長(zhǎng)沙')寞秃;
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where city not in ('上海','長(zhǎng)沙');
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where city != '上海'偶惠;
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where city <> '上海'春寿;
and or
通常的場(chǎng)景是篩選條件很多。
篩選出城市是上海忽孽,學(xué)歷為本科或者工作經(jīng)驗(yàn)為1-3年的绑改。
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where city = '上海';
and education = '本科'
or workyear = '1-3年'
這樣執(zhí)行得不到我們想要的結(jié)果的兄一,因?yàn)樵赟QL中and優(yōu)先執(zhí)行厘线。
那么上面的代碼解釋起來就是:滿足城市是上海和學(xué)歷是本科或者工作年限為1-3年。也就是下面的代碼:
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where (city = '上海'出革;
and education = '本科')
or workyear = '1-3年'
我們的需求應(yīng)該這樣寫:
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where city = '上海'造壮;
and (education = '本科'
or workyear = '1-3年')
一旦遇到復(fù)雜的邏輯一定要加上括號(hào),最里面的括號(hào)優(yōu)先級(jí)最高骂束。
模糊查找
# 包含后端
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where secondtype like '%后端%'
# 以后端開頭
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where secondtype like '后端%'
# 以后端結(jié)尾
SELECT * FROM 數(shù)據(jù)庫(kù).表名
where secondtype like '%后端'
分組
按照城市分組
SELECT * FROM 數(shù)據(jù)庫(kù).表名
group by city
嚴(yán)格一點(diǎn)的寫法,選擇城市耳璧,不能用 * 號(hào)。
SELECT city FROM 數(shù)據(jù)庫(kù).表名
group by city
有一個(gè)需求這樣:想知道不同城市下招聘的數(shù)量展箱,就可以對(duì)城市進(jìn)行分組旨枯,對(duì)職位進(jìn)行計(jì)數(shù):
SELECT city count(positionID) FROM 數(shù)據(jù)庫(kù).表名
group by city
又有需求啦:想知道城市中招聘數(shù)量在一百以上的數(shù)據(jù),招聘崗位少的我希望把它過濾掉混驰。這時(shí)候就是對(duì)分組 group by 提出了一個(gè)過濾 where 的挑戰(zhàn)攀隔。
在 SQL 中這種語法叫做 having 可以把它等價(jià)于 where 只是這個(gè) having 只是單純針對(duì)分組之后的結(jié)果進(jìn)行過濾。
實(shí)現(xiàn)起來就是這樣的:
SELECT city,count(1) FROM 數(shù)據(jù)庫(kù).表名
group by city
having count(positionID) >= 100
還可以在過濾的基礎(chǔ)上分組:
SELECT city,count(1) FROM 數(shù)據(jù)庫(kù).表名
where industryField like %電子商務(wù)%
group by city
having count(positionID) >= 50
等價(jià)于:
SELECT city,count(1) FROM 數(shù)據(jù)庫(kù).表名
group by city
having count(if(where industryField like %電子商務(wù)%,1,null)) >= 50
如果滿足條件就為 1 計(jì)數(shù)栖榨,否則為 null 不計(jì)數(shù)昆汹。
把薪資過濾出來,提取最小薪資最大薪資婴栽。
select
left(salary,location('k',salary)-1),
salary
from 表
substr(salary,locate('-',salary)+1,length(salary)-locate('-',salary)-1)
#從中間截取字段筹煮,從哪里開始,到哪里結(jié)束
from 表
利用子查詢:
select
case
when(bottom + top)/2 <= 10 then '0-10'
when(bottom + top)/2 <= 20 then '10-20'
when(bottom + top)/2 <= 30 then '20-30'
else '30+'
end,
salary from(
select
left(salary,location('k',salary)-1) as bottem,
substr(salary,locate('-',salary)+1,length(salary)-locate('-',salary)-1) as top,
salary
from 表 ) as t