【摘】《SQL必知必會(huì)》


Chapter1:了解SQL

數(shù)據(jù)類(lèi)型兼容

數(shù)據(jù)類(lèi)型及其名稱(chēng)是SQL不兼容的一個(gè)主要原因。雖然大多數(shù)基本數(shù)據(jù)類(lèi)型得到了一致的支持,但是很多高級(jí)的數(shù)據(jù)類(lèi)型卻沒(méi)有。更糟的是褐健,偶爾會(huì)有相同的數(shù)據(jù)類(lèi)型在不同的DBMS中具有不同的名稱(chēng)。對(duì)此用戶(hù)毫無(wú)辦法澜汤,重要的是在創(chuàng)建表結(jié)構(gòu)時(shí)要記住這些差異蚜迅。

主鍵(primary key)

主鍵用來(lái)表示一個(gè)特定的列。表中的任何一列都可以成為主鍵俊抵,只要它具有以下條件:

  • 任意兩行都不具有相同的主鍵值谁不;
  • 每一行必須具有一個(gè)主鍵值(主鍵列不允許NULL值);
  • 主鍵列中的值不允許修改或更新
  • 主鍵值不能重用(如果某行從表中刪除务蝠,它的主鍵不能賦給以后的新行)

Chapter2:檢索數(shù)據(jù)

SELECT DISTINCT vend_id, prod_price
FROM Products
LIMIT 3 OFFSET 4;

SQL語(yǔ)句和大小寫(xiě)

SQL語(yǔ)句不區(qū)分大小寫(xiě)拍谐,因此SELECT與select是相同的烛缔。同樣馏段,寫(xiě)成Select也沒(méi)有關(guān)系。許多SQL開(kāi)發(fā)人員喜歡對(duì)SQL關(guān)鍵字使用大寫(xiě)践瓷,而對(duì)列名和表名使用小寫(xiě)院喜,這樣做使得代碼更易于閱讀和調(diào)試。不過(guò)晕翠,一定要認(rèn)識(shí)到喷舀,SQL不區(qū)分大小寫(xiě)砍濒,但是表名、列名和值可能有所不同(這依賴(lài)于具體的DBMS及其設(shè)置)硫麻。

當(dāng)心逗號(hào)

在選擇多列時(shí)爸邢,一定要在列名之間加上逗號(hào),但最后一個(gè)列名后不加拿愧。如果在最后一個(gè)列名之后加了逗號(hào)杠河,就會(huì)出現(xiàn)錯(cuò)誤。

數(shù)據(jù)表示

SQL語(yǔ)句一般返回原始的浇辜、無(wú)格式的數(shù)據(jù)券敌。數(shù)據(jù)的格式化是表示問(wèn)題,而不是檢索問(wèn)題柳洋。因此待诅,表示一般在顯示數(shù)據(jù)的應(yīng)用程序中規(guī)定。通常很少直接使用實(shí)際檢索出的數(shù)據(jù)熊镣。

使用通配符

一般而言卑雁,除非你確實(shí)需要表中的每一列,否則最好別使用*通配符轧钓,因?yàn)闄z索不需要的列會(huì)降低檢索的性能序厉。

檢所不同的值

DISTINCT關(guān)鍵字必須直接放在列名前面,而且不能部分使用DISTICT毕箍,DISTINCT關(guān)鍵字作用與所有列弛房,不僅僅是跟在其后的那一列。

限制結(jié)果

LIMIT 3 OFFSET 4   --返回從第3行起的四個(gè)數(shù)據(jù)
LIMIT 3,4  --同上
LIMIT 0 OFFSET 1      --返回從第0行

第一個(gè)被檢索的行是第0行而柑,而不是第1行文捶。

注釋

-- 行內(nèi)注釋
# 單行注釋
/* 多行注釋 */ 

Chapter3:排序檢索數(shù)據(jù)

SELECT prod_name
FROM Products
ORDER BY prod_name DESC;
/*等價(jià)于*/
SELECT prod_name
FROM Products
ORDER BY 1;

注意:
在指定 ORDER BY 子句時(shí),應(yīng)該保證它是 SELECT 語(yǔ)句中最后一條子句媒咳。如果它不是最后的子句粹排,將會(huì)出現(xiàn)錯(cuò)誤信息。通常涩澡, ORDER BY 子句中使用的列將是為現(xiàn)實(shí)而選擇的列顽耳。但是,實(shí)際上用非檢索列排序數(shù)據(jù)是完全合法的妙同。ORDER BY 子句還可以通過(guò)多列進(jìn)行排序射富。此外, ORDER BY 還支持按相對(duì)位置進(jìn)行排序粥帚。這種排序方法的好處是不用重新輸入列名胰耗,但它也有缺點(diǎn)。首先芒涡,不明確給出列名有可能造成錯(cuò)用列名排序柴灯。其次卖漫,在對(duì)SELECT 清單進(jìn)行更改時(shí)容易錯(cuò)誤地對(duì)數(shù)據(jù)進(jìn)行排序(忘記ORDER BY 子句做相應(yīng)的改動(dòng))。最后赠群,如果進(jìn)行排序的列不在 SELECT 清單中羊始,顯然不能使用這項(xiàng)技術(shù)。

DESC 關(guān)鍵字用于指定降序排列查描。 這個(gè)關(guān)鍵字只應(yīng)用于直接位于其前面的列名店枣,如果想在多個(gè)列上進(jìn)行降序排列,必須對(duì)對(duì)每一列指定 DESC 關(guān)鍵字叹誉。


Chapter4:過(guò)濾數(shù)據(jù)

WHERE 子句操作符
操作符 說(shuō)明 操作符 說(shuō)明
= 等于 > 大于
<> 不等于 >= 大于等于
!= 不等于 !> 不大于
< 小于 BETWEEN 在指定的兩個(gè)值之間
<= 小于等于 IS NULL 為NULL值
!< 不小于

字符串比較

SELECT vend_id, prod_name
FROM Products
WHERE vennd_id != 'DLL01'

提示:WHERE 子句中鸯两,單引號(hào)用來(lái)限定字符串。如果將值與字符串類(lèi)型的列比較长豁,就需要限定引號(hào)钧唐。而用來(lái)與數(shù)值列比較的值不用引號(hào)。

數(shù)值比較

SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10

提示:在使用BETWEEN時(shí)匠襟,必須指定兩個(gè)值——所需范圍的低端值和高端值钝侠。這兩個(gè)值必須用AND關(guān)鍵字分隔。BETWEEN匹配范圍中所有的值酸舍,包括開(kāi)始值和結(jié)束值帅韧。

空值檢查

在創(chuàng)建表時(shí),表的設(shè)計(jì)人員可以指定其中的列能否不包含值啃勉。在一個(gè)列不包含值時(shí)忽舟,成其包含空值NULL。
確定值是否為空值不能簡(jiǎn)單的檢查是否=NULL淮阐。SELECT語(yǔ)句中有一個(gè)特殊的WHERE子句叮阅,可用來(lái)檢查具有NULL值得列。這個(gè)WHERE子句時(shí)IS NULL子句泣特。

SELECT cust_name
FROM Customers
WHERE cust_email IS NULL

注意:NULL和非匹配
通過(guò)過(guò)濾選擇不包含指定值的所有行時(shí)浩姥,你可能希望返回含有NULL值的列。但是状您,這做不到勒叠。因?yàn)閡nknown有特殊的含義,數(shù)據(jù)庫(kù)不知道它們是否匹配膏孟,所以在進(jìn)行匹配過(guò)濾時(shí)不會(huì)返回這些結(jié)果眯分。
過(guò)濾數(shù)據(jù)時(shí),一定要驗(yàn)證被過(guò)濾列中含NULL的行的確出現(xiàn)在返回?cái)?shù)據(jù)中骆莹。


Chapter5:高級(jí)數(shù)據(jù)過(guò)濾

AND

用在WHERE子句中的關(guān)鍵字颗搂,用來(lái)檢索滿(mǎn)足所有給定條件的行担猛。

OR

用在WHERE子句中的關(guān)鍵字幕垦,用來(lái)檢索匹配任意給定條件的行丢氢。

IN

IN 操作符用來(lái)指定條件范圍,范圍中的每個(gè)條件都可以進(jìn)行匹配 先改。IN 取一組由逗號(hào)分隔疚察、括在圓括號(hào)中的合法值。
IN 操作符的優(yōu)點(diǎn):

  • 在有很多合法項(xiàng)時(shí)仇奶, IN 操作符的語(yǔ)法更清楚貌嫡,更直觀(guān)。
  • 在與其他AND 和 OR 操作符組合使用 IN 時(shí)求值順序更容易管理该溯。
  • IN 操作符一般比一組OR操作符執(zhí)行的更快岛抄。
  • IN 操作符可以包含其它 SELECT 語(yǔ)句,能夠更動(dòng)態(tài)地建立WHERE子句狈茉。

NOT

WHERE 子句中用來(lái)否定其后條件的關(guān)鍵字夫椭。
分析:為什么使用 NOT ?
在與 IN 操作符聯(lián)合使用時(shí)氯庆, NOT 可以非常簡(jiǎn)單的找出與條件列表不匹配的行蹭秋。


Chapter6:用通配符進(jìn)行過(guò)濾

通配符只能用于文本字段(字符串),非文本數(shù)據(jù)類(lèi)型字段不能使用通配符搜索堤撵。

%

%表示任何字符出現(xiàn)任意次數(shù)仁讨。%看起來(lái)好像可以匹配任何東西i,但是有個(gè)例外实昨,那就是NULL洞豁。子句WHERE prod_name LIKE '%' 不會(huì)匹配N(xiāo)ULL的行。

_

_剛好匹配一個(gè)字符荒给,不能多也不能少族跛。

[]

[]用來(lái)指定一個(gè)字符集,它必須匹配指定位置的一個(gè)字符锐墙。

通配符使用技巧

  • 不要過(guò)度使用通配符礁哄。在其他操作符可以達(dá)到相同目的時(shí),應(yīng)使用其他操作符溪北。
  • 確定需要使用操作符時(shí)桐绒,盡量不要把它們用在搜索模式的開(kāi)始處。把通配符放在開(kāi)始處之拨,搜索起來(lái)最慢茉继。

Chapter7:創(chuàng)建計(jì)算字段

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蚀乔,隨后出現(xiàn)的幾起案子烁竭,更是在濱河造成了極大的恐慌,老刑警劉巖吉挣,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件派撕,死亡現(xiàn)場(chǎng)離奇詭異婉弹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)终吼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)镀赌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人际跪,你說(shuō)我怎么就攤上這事商佛。” “怎么了姆打?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵良姆,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我幔戏,道長(zhǎng)歇盼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任评抚,我火速辦了婚禮豹缀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慨代。我一直安慰自己邢笙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布侍匙。 她就那樣靜靜地躺著氮惯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪想暗。 梳的紋絲不亂的頭發(fā)上妇汗,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音说莫,去河邊找鬼杨箭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛储狭,可吹牛的內(nèi)容都是我干的互婿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辽狈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慈参!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起刮萌,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤驮配,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體壮锻,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琐旁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了躯保。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡澎语,死狀恐怖途事,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情擅羞,我是刑警寧澤尸变,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站减俏,受9級(jí)特大地震影響召烂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娃承,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一奏夫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧历筝,春花似錦酗昼、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)姻灶。三九已至富岳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胸梆,已是汗流浹背匿沛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工扫责, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逃呼。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓公给,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蜘渣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子淌铐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容