SQL必知必會----第四版(二)

記錄自己學(xué)習(xí)這本書的過程
此篇文章包括高級數(shù)據(jù)過濾华糖、用通配符進(jìn)行過濾和創(chuàng)建計算字段

通往其他文章的入口:
SQL必知必會----第四版(一)
SQL必知必會----第四版(三)
SQL必知必會----第四版(四)
SQL必知必會----第四版(五)
SQL必知必會----第四版(六)
SQL必知必會----第四版(七)

所有例子都基于product表
product表.png

一、高級數(shù)據(jù)過濾

  • AND操作符
SELECT p_name, p_country, p_price
FROM product
WHERE p_country = 'CN' AND p_price = 7.7;

??用在WHERE子句中的關(guān)鍵字穆趴,用來指示檢索滿足所有給定條件的行衩匣。
AND操作符.png
  • OR操作符
SELECT id, p_name, p_country
FROM product
WHERE id = 3 OR p_country = 'CN';

??WHERE子句中使用的關(guān)鍵字,用來表示檢索匹配任一給定條件的行。
OR操作符.png
  • 求值順序
SELECT id, p_name, p_price
FROM product
WHERE (id = 2 OR id = 3) AND p_price >= 5;

??檢索出表中id列的值為2或者id列的值為3并且p_price列的值大于等于5的所有行。
求值順序.png

??任何時候使用具有AND和OR操作符的WHERE子句漓柑,都應(yīng)該使用小括號明確地分組操作符。不要過分依賴默認(rèn)求值順序司澎,即使它確實如你希望的那樣欺缘。使用小括號沒有什么壞處栋豫,它能消除歧義挤安。

  • IN操作符
SELECT id, p_name, p_price
FROM product
WHERE p_price IN (3.7, 7.7)
ORDER BY id;

??檢索表中p_price列為3.7或7.7的所有行,并根據(jù)id排序
IN操作符.png

等同于下面這句

SELECT id, p_name, p_price
FROM product
WHERE p_price = 3.7 OR p_price = 7.7
ORDER BY id;

IN操作符的優(yōu)點(diǎn):

  1. 在有很多合法選項時丧鸯,IN操作符的語法更清楚蛤铜,更直觀。
  2. 在與其他AND和OR操作符組合使用IN時,求值順序上更容易管理围肥。
  3. IN操作符一般比一組OR操作符執(zhí)行得更快
  4. 最大的優(yōu)點(diǎn)是可以包含其他SELECT語句剿干,能夠更動態(tài)地建立WHERE子句。詳見SQL必知必會----第四版(四)
  • NOT操作符
    WHERE子句中的NOT操作符有且只有一個功能穆刻,那就是否定其后所跟的任何條件置尔。
SELECT id, p_name, p_country
FROM product
WHERE NOT p_country = 'CN'
ORDER BY id;

??檢索表中p_country不等于CN的所有行,并用id排序氢伟。
NOT操作符.png

等同于下面這句

SELECT id, p_name, p_country
FROM product
WHERE p_country != 'CN'
ORDER BY id;

??NOT操作符的有點(diǎn)與IN相似榜轿。

二、用通配符進(jìn)行過濾

  • LIKE操作符
    通配符:用來匹配值的一部分的特殊字符朵锣。
    搜索模式:由字面值谬盐、通配符或兩者組合構(gòu)成的搜索條件。

通配符搜索只能用于文本字段(字符串)诚些,非文本數(shù)據(jù)類型字段不能使用通配符搜索飞傀。

  1. %通配符
    %表示任何字符串出現(xiàn)任意次數(shù)。
SELECT p_id, p_name
FROM product
WHERE p_id LIKE 'L%';

??檢索p_id的值以L為開頭的所有行诬烹。
%通配符-1.png
SELECT p_id, p_name
FROM product
WHERE p_id LIKE '%35%';

??檢索p_id的值包含35的所有行砸烦。
%通配符-2.png
SELECT p_id, p_name
FROM product
WHERE p_id LIKE 'D%9';

??檢索p_id的值以D為開頭并且以9為結(jié)尾的所有行。如果結(jié)尾是空格則匹配不到绞吁。
%通配符-3.png

??%匹配不到NULL

  1. _通配符
    _的作用于%一致外冀,但它只能匹配單個字符,而不是多個字符掀泳。
SELECT p_id, p_name
FROM product
WHERE p_id LIKE '_L35H9';

??檢索p_id的值以任意一個字符為開頭并以L35H9為結(jié)尾的所有行雪隧。例如:ABL35H9, ACL35H9。ABCL35H9則不可以员舵,因為_只能匹配單個字符脑沿。

其他位置與%類似,不舉過多例子马僻。
_通配符.png
  1. [ ]通配符
    [ ]用來制定一個字符集庄拇,它必須匹配指定位置(通配符的位置)的一個字符。
SELECT p_id, p_name
FROM product
WHERE p_id LIKE '[L, D]%';

??檢索表中p_id值是以L或者D為開頭的所有行韭邓。
[ ]通配符-1.png

此通配符可以用前綴字符^來否定

SELECT p_id, p_name
FROM product
WHERE p_id LIKE '[^L, D]%';

??檢索表中p_id值不是以L或者D為開頭的所有行措近。

等同于
[ ]通配符-2.png
SELECT p_id, p_name
FROM product
WHERE NOT p_id LIKE '[L, D]%';
  1. 使用通配符的技巧
    通配符很有用。但這種功能是有代價的女淑,即通配符搜索一般比前面討論的其他搜索要耗費(fèi)更長的處理時間瞭郑。
    ??不要過度使用通配符。如果其他操作能到到相同的目的鸭你,應(yīng)該使用其他操作符屈张。
    ??在確實需要使用通配符時擒权,也盡量不要把它們用在搜索模式的開始處。把通配符置于開始處阁谆,搜索起來是最慢的碳抄。
    ??仔細(xì)注意通配符的位置,如果放錯地方场绿,可能不會返回想要的數(shù)據(jù)剖效。

三、創(chuàng)建計算字段

  • 計算字段
    ??存儲在表中的數(shù)據(jù)都不是應(yīng)用程序所需要的焰盗。我們需要直接從數(shù)據(jù)庫中檢索出轉(zhuǎn)換贱鄙、計算或格式化過的數(shù)據(jù),而不是檢索出數(shù)據(jù)姨谷,然后再在客戶端應(yīng)用程序中重新格式化逗宁。
    ??這時計算字段就可以派上用場了。計算字段并不實際存在于數(shù)據(jù)庫表中梦湘。計算字段是運(yùn)行時在SELECT語句內(nèi)創(chuàng)建的瞎颗。
    ??在SQL語句內(nèi)可完成的許多轉(zhuǎn)換和格式化工作都可以直接在客戶端應(yīng)用程序內(nèi)完成。但一般來說捌议,在數(shù)據(jù)庫服務(wù)器上完成這些操作比在客戶端完成要快得多
  • 拼接字段
    拼接:將值聯(lián)結(jié)到一起(將一個值附加到另一個值)構(gòu)成單個值哼拔。
SELECT p_name || '(' || p_country || ')'
FROM product
ORDER BY p_country;
拼接字段.png
  • 使用別名
    ??從上個例子可以看出,SELECT語句可以很好地拼接國家字段瓣颅。但是倦逐,這個新計算列的名字是什么呢?實際上它沒有名字宫补,它只是一個值檬姥。一個未命名的列不能用于客戶端應(yīng)用中。為了解決這個問題粉怕,SQL支持列別名健民。別名(alias)是一個字段或值得替換名。別名用AS關(guān)鍵字賦予贫贝。
SELECT p_name || '(' || p_country || ')' AS p_title
FROM product
ORDER BY p_country;

??檢索出所有商品名和國家秉犹,并合并到一列。


使用別名.png

??別名還有其他用途。常見的用途包括在實際的表列名包含不合法的字符(如空格)時重新命名它,在原來的名字含混或容易誤解時擴(kuò)充它砾省。
??別名的名字即可以是一個單詞,也可以是一個字符串鸳劳。如果是后者,字符串應(yīng)該括在引號中幸逆。雖然這樣做法是合法的棍辕,但不建議這么去做暮现。多單詞的名字可讀性高还绘,不會給客戶端應(yīng)用帶來各種問題楚昭。因此,別名最常見的使用時將多個單詞的列名重命名為一個單詞的名字拍顷。
??別名有時也稱為導(dǎo)出列抚太,不管怎么叫,它所代表的是相同的東西昔案。

  • 執(zhí)行算術(shù)計算
SELECT p_id, p_name, p_price * p_count AS total
FROM product
WHERE p_price > 7.7
ORDER BY p_id;

??檢索所有商品單價大于7.7的商品尿贫,按p_id正序排列,并計算出總價踏揣。


執(zhí)行算術(shù)計算.png
  • SQL算術(shù)操作符
操作符 說明
+
-
*
/
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庆亡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捞稿,更是在濱河造成了極大的恐慌又谋,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娱局,死亡現(xiàn)場離奇詭異彰亥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)衰齐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門任斋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耻涛,你說我怎么就攤上這事废酷。” “怎么了抹缕?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵锦积,是天一觀的道長。 經(jīng)常有香客問我歉嗓,道長丰介,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任鉴分,我火速辦了婚禮哮幢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘志珍。我一直安慰自己橙垢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布伦糯。 她就那樣靜靜地躺著柜某,像睡著了一般嗽元。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喂击,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天剂癌,我揣著相機(jī)與錄音,去河邊找鬼翰绊。 笑死佩谷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的监嗜。 我是一名探鬼主播谐檀,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼裁奇!你這毒婦竟也來了桐猬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤刽肠,失蹤者是張志新(化名)和其女友劉穎溃肪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體五垮,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乍惊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了放仗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片润绎。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诞挨,靈堂內(nèi)的尸體忽然破棺而出莉撇,到底是詐尸還是另有隱情,我是刑警寧澤惶傻,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布棍郎,位于F島的核電站,受9級特大地震影響银室,放射性物質(zhì)發(fā)生泄漏涂佃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一蜈敢、第九天 我趴在偏房一處隱蔽的房頂上張望辜荠。 院中可真熱鬧,春花似錦抓狭、人聲如沸伯病。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽午笛。三九已至惭蟋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間药磺,已是汗流浹背告组。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留与涡,地道東北人惹谐。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓持偏,卻偏偏與公主長得像驼卖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸿秆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

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

  • 表 存儲在表中的數(shù)據(jù)是同一種類型的數(shù)據(jù)或清單酌畜。 數(shù)據(jù)庫中的表有為一個名字來標(biāo)識自己。 表具有一些特性卿叽,這些特性定義...
    蛐蛐囍閱讀 1,305評論 0 7
  • 第三課: 排序檢索數(shù)據(jù) distinct關(guān)鍵字:distinct 列名1桥胞,列名2,列名3DISTINCT 關(guān)鍵字會...
    VictorBXv閱讀 1,468評論 0 8
  • 2019.2.8.星期五.陰 上午忙里偷閑先把這兩天寫的日記傳上考婴,我覺得自己跟小時候上學(xué)一樣的堅持贩虾,就像沒完...
    lay李閱讀 246評論 0 0
  • 冬天到了,很冷沥阱。這里下了雪缎罢。 看,冬夜的潮水多美呀考杉,像一位仙女策精,文靜;像一面鏡子崇棠,平靜咽袜;像現(xiàn)在一樣,安靜…… 冬汐...
    唐小清呀閱讀 287評論 3 2
  • 花了一周時間閱讀了葉圣陶和夏丐尊合寫的《文心》枕稀,讀來酣暢淋漓询刹,愛不釋手,有茅塞頓開之感萎坷。因為工作的緣故凹联,常常需要寫...
    Sunshine_snail閱讀 457評論 0 1