數(shù)據(jù)庫(kù)基礎(chǔ)(2)

單行函數(shù)

length():獲取參數(shù)的字節(jié)值
concat():拼接字符串
upper():變大寫(xiě)
lower():變小寫(xiě)
substr():截取字符
instr():獲取字符串第一次出現(xiàn)的索引
replace():替換
trim():去除前后空格或者指定字符

SELECT TRIM('+' FROM '++++李剛+++劉邦+++') AS out_put;

lpad():用指定的字符實(shí)現(xiàn)左填充指定長(zhǎng)度
Rpad():右填充

SELECT LPAD('梅林',8,'+') AS out_put;

8是字符串總長(zhǎng)度

流程控制

有兩種情況
方式一:
case 后面加變量 匹配 then后面的東西

SELECT salary 原始工資,department_id,
CASE department_id
WHEN 30 THEN salary1.1
WHEN 40 THEN salary
1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工資
FROM employees;

方式二:
case后面無(wú)表達(dá)式伪朽,when后加表達(dá)式

SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 工資等級(jí)
FROM employees;

組函數(shù)

介紹:作統(tǒng)計(jì)使用,又稱(chēng)聚合函數(shù)/統(tǒng)計(jì)函數(shù)/組函數(shù)
分類(lèi):sum实苞,avg,max烈疚,min黔牵,count
特點(diǎn):
1、
Where后面不能加 組函數(shù)爷肝,Having 后面可

分組查詢(xún)

結(jié)構(gòu)

select 分組函數(shù),分組后的字段
from 表
【where 篩選條件】
group by 分組的字段
【having 分組后的篩選】
【order by 排序列表】

注意;帧!
group by 后面的分組的字段 和 select 后面分組的字段要寫(xiě)成一樣的灯抛。
分組的操作消耗的資源比較大金赦,所以先過(guò)濾掉一些,再分組对嚼,這樣的效率比較高夹抗。

*案例

#引入:查詢(xún)每個(gè)部門(mén)的平均工資
SELECT AVG(salary) FROM employees;

#案例1:查詢(xún)每個(gè)工種的最高工資
SELECT MAX(salary),job_id FROM employees 
GROUP BY job_id;

#案例2:查詢(xún)每個(gè)位置上的部門(mén)個(gè)數(shù)
SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;

#添加篩選條件
#案例1:查詢(xún)郵箱中包含a字符的,每個(gè)部門(mén)的平均工資
SELECT AVG(salary),department_id FROM employees
WHERE email LIKE '%a%' GROUP BY department_id;

#案例2:查詢(xún)有獎(jiǎng)金的每個(gè)領(lǐng)導(dǎo)手下員工的最高工資
SELECT MAX(salary),manager_id FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;

#添加復(fù)雜的篩選條件
#案例1:查詢(xún)哪個(gè)部門(mén)的員工個(gè)數(shù)>2
#1.查詢(xún)每個(gè)部門(mén)的員工個(gè)數(shù)
SELECT COUNT(*),department_id FROM employees
GROUP BY department_id;

#2.根據(jù)1的結(jié)果進(jìn)行篩選猪半,查詢(xún)哪個(gè)部門(mén)的員工個(gè)數(shù)大于2
SELECT COUNT(*),department_id FROM employees
GROUP BY department_id HAVING COUNT(*)>2;

#案例2:查詢(xún)每個(gè)工種有獎(jiǎng)金的員工的最高工資>12000的工種編號(hào)和最高工資 
#1.查詢(xún)每個(gè)工種有獎(jiǎng)金的員工的最高工資 
SELECT MAX(salary),job_id FROM employees 
WHERE commission_pct IS NOT NULL GROUP BY job_id; 

#2.根據(jù)結(jié)果繼續(xù)篩選兔朦,最高工資>12000 

SELECT MAX(salary), job_id FROM employees 
WHERE commission_pct IS NOT NULL GROUP BY job_id 
HAVING MAX(salary)>12000; 

#按表達(dá)式或函數(shù)分組

#案例:按員工姓名的長(zhǎng)度分組,查詢(xún)每一組的員工個(gè)數(shù),篩選員工個(gè)數(shù)>5

#1.查詢(xún)每個(gè)長(zhǎng)度的員工個(gè)數(shù) 
SELECT COUNT(*),LENGTH(last_name) len_name 
FROM employees GROUP BY LENGTH(last_name); 

#2.添加篩選條件
SELECT COUNT(*) c,LENGTH(last_name) len_name 
FROM employees GROUP BY len_name HAVING c>5;

#按多個(gè)字段查詢(xún)
#案例:查詢(xún)每個(gè)部門(mén)每個(gè)工種的員工的平均工資

SELECT AVG(salary),department_id,job_id
FROM employees GROUP BY department_id,job_id;

#添加排序
#案例:查詢(xún)每個(gè)部門(mén)每個(gè)工種的員工的平均工資,按平均工資的高低查詢(xún)

SELECT AVG(salary),department_id,job_id
FROM employees GROUP BY department_id,job_id
ORDER BY AVG(salary) DESC;

連接查詢(xún)

使用范圍:數(shù)據(jù)來(lái)源于多個(gè)表
按功能分類(lèi):

-等值連接
-非等值連接
-自連接
-內(nèi)連接
-外連接
??左外連接
??右外連接
??全外連接
-交叉連接

內(nèi)連接:就是普通的連接
外連接:分左外連接偷线,和右外連接
左外連接:搜索的結(jié)果左邊,包含一些沒(méi)有匹配的信息(如空值等)
右連接同理沽甥。
%代表任意個(gè)声邦,一個(gè)零個(gè)或多個(gè);
等值連接:

sql92摆舟,sql99連接的有區(qū)別亥曹,
但是只記住sql99標(biāo)準(zhǔn)就好了。

SQL99的語(yǔ)法

select 查詢(xún)列表
from 表1 別名 【連接類(lèi)型】

join 表2 別名
on 連接條件
【where 篩選條件】
【group by 分組】
【having 篩選條件】
【order by 排序列表】

內(nèi)連接(★):inner
外連接
左外(★):left 【outer】
右外(★):right 【outer】
全外:full【outer】
交叉連接:cross

Inner 可以省略
Outer可以省略

子查詢(xún)

多表連接
笛卡爾積的錯(cuò)誤

自連接

非自連接

非等值連接

三張表連接

[圖片上傳失敗...(image-ab5f74-1600854090108)]

笛卡機(jī)的錯(cuò)誤

自連接

自己連接自己

基表恨诱,輔表

非等值連接

使用`` 媳瞪,代表里面的內(nèi)容是字段名,而非關(guān)鍵字照宝。

外連接蛇受。

左半連接

內(nèi)連接:就是普通的連接

外連接:分左外連接,和右外連接厕鹃。

左外連接:搜索的結(jié)果左邊兢仰,包含一些沒(méi)有匹配的信息(如空值等)

%代表任意個(gè),一個(gè)零個(gè)或多個(gè)剂碴;

Inner 可以省略

Outer可以省略

函數(shù)(方法)

字符函數(shù)

Lower把将,upper

SQL

初始下標(biāo)為1,不是0

后面位置為5忆矛,

(index,length)

LPAD 左邊填充察蹲,右對(duì)齊

RPAD 右邊填充,左對(duì)齊

TRIM 去除兩端的東西

[圖片上傳失敗...(image-b0e7a7-1600854090108)]

Ifnull

Case 表達(dá)式

Case 1

When 2 then3

When 3 then 4

Else

other

End

Case

When 表達(dá)式1 then 2

When 表達(dá)式3 then4

別名加在end后面

值 case后面 加

表達(dá)式 case后面 不加?xùn)|西

組函數(shù)

Avg 求平均值 沒(méi)把 null 算在里面

Sum

Max

對(duì)任何類(lèi)型的數(shù)值做運(yùn)算

Min

Count

統(tǒng)計(jì)不為null 的數(shù)據(jù)

Count(*), 統(tǒng)計(jì)表中有多少條數(shù)據(jù)催训。

Count(1) 和Count(2)

Count (數(shù)值)比count(*)效率高

Select 后面出現(xiàn)組函數(shù)洽议,

后面不能加字段,

若加 瞳腌,必須出現(xiàn)在group by后面

Group by

Where 約束

Having 用來(lái)過(guò)濾

Having和where

用having就一定要和group by連用,

用group by不一有having (它只是一個(gè)篩選條件用的)

[圖片上傳失敗...(image-16f96b-1600854090108)]

Max是組函數(shù)的一種绞铃,

Where 不能和組函數(shù)和一起用,

Having 可以和組函數(shù)一起用嫂侍。

Where一般放 group by前面

Having 放group 后面

分組的操作消耗的資源比較大儿捧,所以先過(guò)濾掉一些,再分組挑宠,這樣的效率比較高菲盾。

[圖片上傳失敗...(image-1f8e76-1600854090108)]

組函數(shù)

Where 和having

位置上:

Where在group by 前面

Having 在group by 后面

Where后面不能出現(xiàn)組函數(shù)

Having 能

過(guò)濾時(shí)間

Where 先過(guò)濾再分組

Having 先分組再過(guò)濾 ?

先過(guò)濾再分組

[圖片上傳失敗...(image-ef3f23-1600854090107)]

子查詢(xún)

在查詢(xún)語(yǔ)句中再嵌套其他查詢(xún)語(yǔ)句各淀。

單行子查詢(xún):結(jié)果只有一條

多行子查詢(xún):結(jié)果有多條

單行子查詢(xún): > > =

多行子查詢(xún):

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懒鉴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌临谱,老刑警劉巖璃俗,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異悉默,居然都是意外死亡城豁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)抄课,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)唱星,“玉大人,你說(shuō)我怎么就攤上這事跟磨〖淞模” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵抵拘,是天一觀的道長(zhǎng)哎榴。 經(jīng)常有香客問(wèn)我,道長(zhǎng)僵蛛,這世上最難降的妖魔是什么叹话? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮墩瞳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘氏豌。我一直安慰自己喉酌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布泵喘。 她就那樣靜靜地躺著泪电,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纪铺。 梳的紋絲不亂的頭發(fā)上相速,一...
    開(kāi)封第一講書(shū)人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音鲜锚,去河邊找鬼突诬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芜繁,可吹牛的內(nèi)容都是我干的旺隙。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼骏令,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蔬捷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤周拐,失蹤者是張志新(化名)和其女友劉穎铡俐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妥粟,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡审丘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罕容。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片备恤。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锦秒,靈堂內(nèi)的尸體忽然破棺而出露泊,到底是詐尸還是另有隱情,我是刑警寧澤旅择,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布惭笑,位于F島的核電站,受9級(jí)特大地震影響生真,放射性物質(zhì)發(fā)生泄漏沉噩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一柱蟀、第九天 我趴在偏房一處隱蔽的房頂上張望川蒙。 院中可真熱鬧,春花似錦长已、人聲如沸畜眨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)康聂。三九已至,卻和暖如春胞四,著一層夾襖步出監(jiān)牢的瞬間恬汁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工辜伟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氓侧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓游昼,卻偏偏與公主長(zhǎng)得像甘苍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烘豌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361