MySQL必知必會(huì) 第4-6章

第四章 檢索數(shù)據(jù)

4.1 SELECT語(yǔ)句

SELECT語(yǔ)句的用途是從一個(gè)或多個(gè)表中檢索信息。為了使用SELECT語(yǔ)句檢索表數(shù)據(jù),至少需要給出兩條信息——想選擇什么以及從什么地方選擇。

4.2 檢索單個(gè)列

輸入:
SELECT prod_name FROM products;
輸出:略
分析:從products表中檢索一個(gè)名為prod_name的列。

注意:

  • 以上輸出的數(shù)據(jù)是沒(méi)有排序的,其當(dāng)前序列可能使添加到表中的順序,也可能不是,沒(méi)有特殊含義。
  • 多條SQL語(yǔ)句必須以分號(hào)分割。MySQL如同多數(shù)DBMS,不需要在單條SQL語(yǔ)句后加分號(hào),但加上分號(hào)也沒(méi)有壞處。
  • SQL語(yǔ)句不區(qū)分大小寫(xiě),因此SELECTselect是相同的,甚至Select也是相同的。但一般約定對(duì)所有SQL關(guān)鍵字使用大寫(xiě),對(duì)列和表名使用小寫(xiě),以便于調(diào)試與使用。
  • 在處理SQL中,其中所有空格都被忽略,SQL可以在一行上給出,也可以分為多行。
4.3 檢索多個(gè)列

在選擇多個(gè)列時(shí),一定要在列名之間加上逗號(hào),但在最后一個(gè)列名上不加。
輸入:
SELECT prod_name, prod_price FROM products;
輸出:略
分析:從products表中檢索名為prod_nameprod_price的列。

4.4 檢索所有列

除了指定所需要的列外(一個(gè)或多個(gè)),SELECT語(yǔ)句還可以檢索所有的列而非逐個(gè)將其列出。這可以通過(guò)在實(shí)際列名的位置使用星號(hào)*通配符實(shí)現(xiàn)。
輸入:
SELECT * FROM products;
輸出:略
分析:通過(guò)通配符(*),匹配出所有的列。除非確實(shí)需要表中的每個(gè)列,否則最好別使用通配符(*),檢索 不需要的列通常會(huì)降低檢索和使用程序的性能。

4.5 檢索不同的行

SELECT返回所有匹配的行,如果想讓相同的行只出現(xiàn)一次,則需要使用DISTINCT關(guān)鍵字
輸入:
SELECT DISTINCT vend_id FROM products;
輸出:略
分析:DISTINCT關(guān)鍵字必須在列名前使用。

4.6 限制結(jié)果

SELECT返回所有匹配的行,如果要控制返回的行數(shù)與行號(hào),可以使用LIMIT關(guān)鍵字。
輸入:
SELECT prod_name FROM products LIMIT 5;
輸出:略
分析:此語(yǔ)句使用SELECT檢索單個(gè)列,LIMIT 5指示MySQL返回不多于5行(至多0-4行)。

為得出下一個(gè)5行,可指定要檢索的開(kāi)始行和行數(shù):
輸入:
SELECT prod_name FROM products LIMIT 5,5;
輸出:略
分析:LIMIT 5,5指示MySQL返回從行5開(kāi)始的5行,第一個(gè)數(shù)字為開(kāi)始位置,第二個(gè)數(shù)為要檢索的行數(shù)。

注意:

  • 檢索的第一行為行0。因此,LIMIT 1,1檢索出來(lái)的是第二行。
  • 在行數(shù)不夠時(shí),MySQL返回其能夠提供的所有行。
  • MySQL 5 支持使用 LIMIT 4 OFFSET 3等價(jià)于 LIMIT 3,4表示從行3開(kāi)始取4行。
4.7 使用完全限定的表名

輸入:
SELECT products.prod_name FROM products;

SELECT products.prod_name FROM crashcourse.products;
輸出:略
分析:第一條語(yǔ)句完全限制了列名,第二條語(yǔ)句還嚴(yán)格限制了表名。有一些情形需要完全限定名,現(xiàn)在,請(qǐng)知曉這個(gè)語(yǔ)法。

第五章 排序檢索數(shù)據(jù)

5.1 排序數(shù)據(jù)

如果沒(méi)有明確規(guī)定排序順序,則不應(yīng)該假定檢索出的數(shù)據(jù)的順序有意義。SQL語(yǔ)言由子句(clause)構(gòu)成,有些子句是必須的,而有些是可選的,為了明確排序SELECT的檢索結(jié)果,可使用ORDER BY子句。
輸入:
SELECT prod_name FROM products ORDER BY prod_name;
輸出:略
分析:ORDER BY prod_name指示MySQL對(duì)SELECT語(yǔ)句的檢索結(jié)果以prod_name列字母順序進(jìn)行排序。

注意:使用非檢索的列排序數(shù)據(jù)是完全合法的。

5.2 按多個(gè)列排序

按多個(gè)列排序時(shí),只需要指定列名,列名間用逗號(hào)分隔開(kāi)即可。使用前,注意理解其含義,排序結(jié)果首先按照第一列排序,如果第一列結(jié)果相同,再按照第二列進(jìn)行排序,以此類推。
輸入:
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;
輸出:略
分析:對(duì)檢索結(jié)果先按照prod_price排序,二者相等時(shí),再按照prod_name排序。

5.3 指定排序方向

數(shù)據(jù)排序默認(rèn)為升序排序,但可以使用DESC關(guān)鍵字指示MySQL對(duì)檢索結(jié)果以降序排序。
輸入:
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC;
輸出:略
分析:對(duì)檢索結(jié)果按照prod_price以降序排序。

DESC關(guān)鍵字只應(yīng)用于直接位于其前面的列名。如果需要對(duì)多個(gè)列調(diào)整排序方式,則需要分別指定。
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;
輸出:略
分析:對(duì)檢索結(jié)果按照prod_price以降序排序,prod_price相同時(shí),按照prod_name以升序排列。

使用ORBER BY和LIMIT的組合,可以找到一個(gè)列中最大或最小值。
輸入:
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;
輸出:略
分析:返回prod_price最大值。

注意:

  • DESC相反的關(guān)鍵詞是ASC,由于排序默認(rèn)是升序的,因此ASC很少使用。
  • 在字典排序中,A與a視為相同,這是默認(rèn)行為,如果需要改變這種行為,ORBER BY語(yǔ)句無(wú)法實(shí)現(xiàn),必須請(qǐng)求數(shù)據(jù)庫(kù)管理員更改配置。
  • ORDER BY子句必須保證位于FROM子句之后。

第六章 過(guò)濾數(shù)據(jù)

6.1 使用WHERE子句

數(shù)據(jù)庫(kù)一般包含大量的數(shù)據(jù),很少需要檢索表中所有行。通常需要通過(guò)WHERE子句給檢索指定搜索條件(過(guò)濾條件)。
輸入:
SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50;
輸出:略
分析:從products中檢索兩個(gè)列,并選取其中prod_price = 2.50 的列返回。

** 注意:**在同時(shí)使用ORDER BYWHERE子句時(shí),應(yīng)讓ORDER BY位于WHERE之后。

6.2 WHERE子句操作符

MySQL允許的搜索條件不僅僅是相等測(cè)試,MySQL支持的所有操作符如下。


6.2.1 檢索單個(gè)值

單引號(hào)用來(lái)限定字符串。如果將值與串類型的列進(jìn)行比較,則需要限定引號(hào)。用來(lái)與數(shù)值列進(jìn)行比較時(shí),則不需要使用引號(hào)。
輸入:
SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses';
輸出:略
分析:MySQL在匹配時(shí)不分大小寫(xiě),fusesFuses一行相匹配。

類似的,我們可以分別修改WHERE子句為WHERE prod_price < 10WHERE prod_price <= 10 來(lái)指示MySQL檢索prod_price小于10,或小于等于10的行。

6.2.2 不匹配檢查

輸入:
SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003:
輸出:略
分析:列出的是不由供應(yīng)商1003制造的所有產(chǎn)品

6.2.3 范圍值檢查

為了檢查某個(gè)范圍的值,可以使用BETWEEN操作符。其語(yǔ)法與其他WHERE子句稍有不同,需要提供兩個(gè)參數(shù)作為范圍最低值和最高值。
輸入:
SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
輸出:略
分析:BETWEEN的兩個(gè)參數(shù)由AND間隔開(kāi),5和10分別是開(kāi)始值和結(jié)束值。

6.2.4 空值檢查

在創(chuàng)建表時(shí),表設(shè)計(jì)人員可以指定其中的列是否可以不包含值,一個(gè)列不包含值時(shí),稱其值為空值NULL(與包含0、空字符串或僅包含空格不同)。用來(lái)檢測(cè)NULL值的是IS NULL子句。
輸入:
SELECT prod_name FROM products WHERE prod_price IS NULL;
輸出:略
分析:返回沒(méi)有價(jià)格的所有產(chǎn)品。

注意:在匹配過(guò)濾和不匹配過(guò)濾時(shí),并不返回NULL值的列。這是由于未知具有特殊含義,數(shù)據(jù)庫(kù)無(wú)法進(jìn)行匹配。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,610評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,939評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,668評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,004評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評(píng)論 3 449
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,173評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,426評(píng)論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,656評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,833評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,247評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,580評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,371評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,621評(píng)論 2 380

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

  • 前言 一、基礎(chǔ)知識(shí)1.了解數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)(database):保存有組織的數(shù)據(jù)的容器表(table):某種特定類型數(shù)...
    流水混帳閱讀 521評(píng)論 0 1
  • 數(shù)據(jù)庫(kù)入門(mén) 數(shù)據(jù)庫(kù): 保存有組織的數(shù)據(jù)的容器(通常是一個(gè)文件或一組文件).數(shù)據(jù)庫(kù)軟件應(yīng)該稱為 DBMS(DataB...
    Mjericho閱讀 509評(píng)論 0 0
  • 1.表中的任何列都可以作為主鍵, 只要它滿足以下條件:任意兩行都不具有相同的主鍵值;每一行都必須具有一個(gè)主鍵值( ...
    Cherryjs閱讀 685評(píng)論 0 0
  • 第七章 數(shù)據(jù)過(guò)濾 7.1 組合WHERE子句 在第六章介紹的所有WHERE子句在過(guò)濾時(shí),使用的都是單一的條件。為了...
    saviochen閱讀 433評(píng)論 0 4
  • 于是又到了梧桐絮飄滿校園的四月,又到了梧桐色相簿的季節(jié),我們迎來(lái)了實(shí)習(xí)生招聘。 “范老濕從不寫(xiě)代碼”,“范老濕從不...
    Lance_Van閱讀 752評(píng)論 0 1