【SQL】(高級(jí)篇):函數(shù)脑沿、多表操作、操作關(guān)聯(lián)表马僻、連接查詢(xún)以及子查詢(xún)

函數(shù)在SQL數(shù)據(jù)庫(kù)中使用十分廣泛庄拇,下面分別介紹了一些比較常用的函數(shù)用法,具體請(qǐng)看下表韭邓。

函數(shù)名稱(chēng) 作用
ABS(x) 返會(huì)的絕對(duì)值
SQRT(x) 返會(huì)x的非負(fù)2次方根
MOD(x,y) 返會(huì)x被y除后的余數(shù)
CEILING(x) 返會(huì)不小于x的最小整數(shù)
FLOOR(x) 返會(huì)不大于x的最大整數(shù)
ROUND(x,y) 對(duì)x進(jìn)行四舍五入措近,小數(shù)點(diǎn)后保留y位
TRUNCATE(x,y) 舍去x中的小數(shù)點(diǎn)y位后面的數(shù)
SIGN(x) 返會(huì)x的符號(hào)(正負(fù)1、0)

函數(shù)名稱(chēng) 作用
LENGTH(str) 返會(huì)字符串的長(zhǎng)度
CONCAT(S1女淑,...瞭郑,S n 返會(huì)一個(gè)或者多個(gè)字符串連接產(chǎn)生的新字符串
trim(str) 刪除字符串兩則的空格
replace(str,S1鸭你,S 2 使用字符串S2替代字符串str中的所有字符串S1
substring(str屈张,n,len) 返會(huì)字符串str的子串袱巨,起始位置為n阁谆,長(zhǎng)度為len
reverse(str) 返會(huì)字符串反轉(zhuǎn)后的結(jié)果
lacate(S1,str) 返會(huì)字符串S1在字符串str中的起始位置

比較懶...就不做表格了愉老,直接上圖


函數(shù)功能(續(xù))

舉幾個(gè)實(shí)際中使用函數(shù)的語(yǔ)句

  • (1)
SELECT CONCAT( id,'_', name,'_', grade,'_', gender) 
FROM student;
  • (2)
SELECT if(total_price % 2 = 1,total_price, 0)
 FROM tb_order;
  • (3)
SELECT CONCAT( id,'_', name,'_', grade,'_', gender) 
FROM student;

關(guān)于表和字段的別名
  • 為表取別名
SELECT * FROM 表 名 [AS] 別名;
  • 為字段取別名
SELECT 字段 名 [AS] 別名[, 字段 名 [AS] 別名,…] 
FROM 表 名;

多表操作(SQL中的重點(diǎn)操作)

(1) 外鍵
【概述】:外 鍵 是指 引用 另一個(gè) 表中 的 一列 或 多列场绿, 被 引 用的 列 應(yīng)該 具 有主 鍵 約束 或 唯一 性 約束。

【注意】:引入外鍵后嫉入,外鍵列的值只能是參照列的值焰盗,并且參照列中的值不能被刪除璧尸。

  • 為表添加外鍵約束
alter table 表 名 add constraint FK_ ID foreign 
key( 外 鍵 字段 名) REFERENCES 外表 表 名( 主 鍵 字段 名);

【補(bǔ)充】show create table 表名:可執(zhí)行此操作來(lái)查看約束效果。

【例】

 create table 表名(
    字段描述熬拒,
   constraint fk_name foreign
key (外鍵字段名) references 外鍵表表名(主鍵字段)
)
constraint fk_name foreign key (cat_id)
 references tb_category(id)

【注意點(diǎn)】:

  • 1爷光、建立外鍵的表必須是InnoDB型

  • 2梦湘、定義外鍵名時(shí)不能加引號(hào)瞎颗。

添加外鍵約束參數(shù)

 alter table 表 名 add constraint FK_ ID foreign key(外鍵字段名) 
REFERENCES 外表表名( 主鍵字段名); 
[ON DELETE {CASCADE | SET NULL | NO ACTION || RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

  • 關(guān)于幾個(gè)外鍵約束參數(shù)的功能匯總表
參數(shù)名稱(chēng)(小寫(xiě)) 作用描述
cascade 刪除包含與已刪除鍵值有參照關(guān)系的所有記錄
set null 修改包含與已刪除鍵值有參照關(guān)系的所有記錄,并使用NULL值替換(不用于已標(biāo)記的Not NULL字段)
no action 不進(jìn)行任何操作
restrict 拒絕主表刪除或者修改外檢關(guān)聯(lián)列捌议。(在不定義ON DALETE 和ON UPDATE 的子句時(shí)哼拔,這是默認(rèn)設(shè)置,也是比較安全的設(shè)置)
  • 刪除外鍵約束
alter table 表名 drop foreign key 外鍵名;

關(guān)于 - 操作關(guān)聯(lián)表

主要分為三種情況:

  • 1瓣颅、多對(duì)一(員工與部門(mén))外鍵倦逐;

  • 2、多對(duì)多(課程與學(xué)生)關(guān)系表宫补;

  • 3檬姥、一對(duì)一(證件號(hào)碼與個(gè)體)一般情況;


連接查詢(xún)

主要分為交叉連接粉怕、內(nèi)連接以及外連接三種情況健民。

  • 交叉連接
    【笛卡兒積】:兩個(gè)表行數(shù)的乘積。
    交叉連接返會(huì)的就是笛卡爾積贫贝。
 SELECT * FROM department(部門(mén)) CROSS JOIN employee(員工);
  • 內(nèi)連接
    【解釋】:在內(nèi)連接查詢(xún) 中秉犹, 只有滿(mǎn)足 條件的記錄才能出現(xiàn)在查詢(xún)結(jié)果中。
SELECT 查詢(xún) 字段 FROM 表 1 
[INNER] JOIN 表 2 ON 表 1\. 關(guān)系字段 = 表 2\. 關(guān)系字段
  • 外連接
    【解釋】: 返回查詢(xún)結(jié)果中不僅包含符合條件的數(shù)據(jù)稚晚,而且還包括左表( 左連接或左外連接)崇堵、右表(右連接或右外連接)或兩個(gè)表(全外連接)中的所有數(shù)據(jù)。
SELECT 所 查字 段 FROM 表 1 LEFT| RIGHT [OUTER] JOIN 表 2 
ON 表 1\. 關(guān)系 字段= 表 2\. 關(guān)系 字段 WHERE 條件

關(guān)于左連接與右連接的區(qū)別

  • LEFT JOIN(左連接):返會(huì)包括左表中的所有記錄和右表中符合連接的條件的記錄客燕;
  • RIGHT JOIN(右連接):返會(huì)包括右表中的所有記錄和左表中符合連接的條件的記錄鸳劳;(沒(méi)有數(shù)據(jù)的部分,使用NULL來(lái)補(bǔ)充

子查詢(xún)

【解釋】:指 一個(gè)查詢(xún)語(yǔ)句嵌套在另 一個(gè)查詢(xún)語(yǔ)句內(nèi)部的查詢(xún)也搓。

  • 帶 IN 關(guān)鍵字的子查詢(xún)
SELECT * FROM department WHERE did 
 IN( SELECT did FROM employee WHERE age= 20);
  • 帶 ANY 關(guān)鍵字的子查詢(xún)
SELECT * FROM department 
WHERE did > any( select did from employee);
  • 帶 ALL 關(guān)鍵字的子查詢(xún)
SELECT * FROM department 
WHERE did > all( select did from employee);
  • 帶 比較運(yùn)算符 的子查詢(xún)
SELECT * FROM department 
WHERE did=( select did from employee where name=' GGG');
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赏廓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子傍妒,更是在濱河造成了極大的恐慌楚昭,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拍顷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡塘幅,警方通過(guò)查閱死者的電腦和手機(jī)昔案,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)尿贫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人踏揣,你說(shuō)我怎么就攤上這事庆亡。” “怎么了捞稿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵又谋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我娱局,道長(zhǎng)彰亥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任衰齐,我火速辦了婚禮任斋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耻涛。我一直安慰自己废酷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布抹缕。 她就那樣靜靜地躺著澈蟆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卓研。 梳的紋絲不亂的頭發(fā)上趴俘,一...
    開(kāi)封第一講書(shū)人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音鉴分,去河邊找鬼哮幢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛志珍,可吹牛的內(nèi)容都是我干的橙垢。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伦糯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼柜某!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起敛纲,我...
    開(kāi)封第一講書(shū)人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喂击,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后淤翔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體翰绊,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了监嗜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谐檀。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖裁奇,靈堂內(nèi)的尸體忽然破棺而出桐猬,到底是詐尸還是另有隱情,我是刑警寧澤刽肠,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布溃肪,位于F島的核電站,受9級(jí)特大地震影響音五,放射性物質(zhì)發(fā)生泄漏惫撰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一放仗、第九天 我趴在偏房一處隱蔽的房頂上張望润绎。 院中可真熱鬧,春花似錦诞挨、人聲如沸莉撇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)棍郎。三九已至,卻和暖如春银室,著一層夾襖步出監(jiān)牢的瞬間涂佃,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工蜈敢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辜荠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓抓狭,卻偏偏與公主長(zhǎng)得像伯病,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子否过,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361