MySQL 對(duì)數(shù)據(jù)進(jìn)行檢索,排序容劳,操作符過濾

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

檢索單個(gè)列
# 從products表中檢索一個(gè)名為prod_name的列
select prod_name from products;
檢索多個(gè)列
SELECT prod_id, prod_name FROM products;
檢索所有列
SELECT * FROM products;
使用DISTINCT關(guān)鍵字
# 只返回不同的值
SELECT DISTINCT vend_id FROM products;
限制查詢喘沿,LIMIT關(guān)鍵字

可用來實(shí)現(xiàn)分頁查詢。

# 返回?cái)?shù)據(jù)不多于5行
SELECT prod_name FROM products LIMIT 5;

# 返回從行5開始的5行竭贩,第一個(gè)數(shù)字為開始位置蚜印,第二個(gè)位置為要檢索的行數(shù)
SELECT prod_name FROM products LIMIT 5, 5;
  • 檢索的第一行為行0,所以LIMIT 1, 1將檢索出第二行
  • 當(dāng)指定要檢索的行數(shù)不夠時(shí)留量,MySQL返回它能返回的那么多行
  • MySQL5支持LIMIT的另一種語法窄赋,LIMIT 4 OFFSET 3意為從行3開始讀取4行,和LIMIT 3, 4一樣

使用完全限定的表名

SELECT products.prod_name FROM crashcourse.products;

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

子句(clause)SQL語句由子句構(gòu)成楼熄,有些子句是必須的忆绰,有些是可選的,一個(gè)子句通常由一個(gè)關(guān)鍵字和所提供的數(shù)據(jù)組成可岂。
為了明確地排序用SELECT語句檢索出的數(shù)據(jù)错敢,可使用ORDER BY子句。

排序數(shù)據(jù)
# 對(duì)prod_name列以字母順序排序數(shù)據(jù)
SELECT prod_name FROM products ORDER BY prod_name;
按多個(gè)列排序
# 先按價(jià)格排序缕粹,再按名字排序
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;
指定排序方向稚茅,DESC

ORDER BY默認(rèn)的排序是升序,還可以指定降序排序

SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC;

# 先對(duì)價(jià)格降序排序平斩,然后對(duì)名字升序排序
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;

** 如果想在多個(gè)列上進(jìn)行降序排序挥吵,必須對(duì)每個(gè)列指定DESC關(guān)鍵字德撬。 **

與DESC相反的是ASC(Ascending)婚陪,也就是升序贰军,但是一般用不上爽冕,因?yàn)槟J(rèn)就是升序的。

使用ORDER BY和LIMIT找出一個(gè)列中最高或最低的值
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;

** ORDER BY子句須在FROM子句之前总棵,LIMIT子句之后 **

過濾數(shù)據(jù)

使用 WHERE 子句
SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50;

WHERE子句與 ORDER BY子句共用時(shí)廷臼,ORDER BY 在 WHERE 之后,意對(duì)過濾后的數(shù)據(jù)進(jìn)行排序塘辅。
上面 WHERE 子句使用的是相等的條件操作符晃虫,WHERE 子句還支持下面的條件操作符:

操作符 說明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的兩個(gè)值之間
SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses';
+-----------+------------+
| prod_name | prod_price |
+-----------+------------+
| Fuses     |       3.42 |
+-----------+------------+
1 row in set (0.00 sec)

由上面查詢可以知道,MySQL 在執(zhí)行匹配時(shí)默認(rèn)不區(qū)分大小寫扣墩,所以 fuses 和 Fuses 匹配哲银。

SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
空值檢查

在創(chuàng)建表時(shí),表設(shè)計(jì)人員可以指定其中的列是否可以不包含值呻惕,一個(gè)列不包含值時(shí)荆责,稱其為包含空值 NULL。

mysql> SELECT cust_id, cust_email FROM customers WHERE cust_email IS NULL;
+---------+------------+
| cust_id | cust_email |
+---------+------------+
|   10002 | NULL       |
|   10005 | NULL       |
+---------+------------+
2 rows in set (0.00 sec)

組合 WHERE 子句

AND 操作符
SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;

當(dāng)然亚脆,后面還可以繼續(xù)添加 AND 操作符以組合多個(gè)條件

OR 操作符
SELECT prod_name, prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003;
AND OR 操作符的計(jì)算次序

假如我們的需求是:列出價(jià)格為1-美元(含)以上且由1002或1003制造的所有產(chǎn)品

SELECT prod_name, prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10;

上面的 SQL 語句并不能達(dá)到需求做院,因?yàn)樵?SQL 中,會(huì)優(yōu)先處理 AND 操作符濒持,這和大部分的語言是一樣的键耕,所以上面的 SQL 語句的含義為:由供應(yīng)商1003制造的任何價(jià)格為10美元(含)以上的產(chǎn)品,或者由制造商1002制造的任何產(chǎn)品柑营,而不管其價(jià)格如何屈雄。

正確的 SQL 如下,添加括號(hào)控制優(yōu)先級(jí)即可:

SELECT prod_name, prod_price FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;

在組合使用 AND 和 OR 操作符時(shí)官套,最好能使用括號(hào)酒奶,消除歧義,哪怕計(jì)算次序符合我們要求奶赔。

IN 操作符
SELECT prod_name, prod_price FROM products WHERE vend_id IN (1002, 1003) ORDER BY prod_name;

它雖然等同于使用 OR 子句:

SELECT prod_name, prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003 ORDER BY prod_name;

但是使用 IN 子句惋嚎,SQL 更簡(jiǎn)潔,而且 IN 可以使用復(fù)合的查詢語句纺阔,后續(xù)會(huì)提到瘸彤。

NOT 操作符
SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002, 1003) ORDER BY prod_name;

MySQL 支持使用 NOT 對(duì) IN,BETWEEN笛钝,和 EXISTS 子句取反质况。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市玻靡,隨后出現(xiàn)的幾起案子结榄,更是在濱河造成了極大的恐慌,老刑警劉巖囤捻,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臼朗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)视哑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門绣否,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挡毅,你說我怎么就攤上這事蒜撮。” “怎么了跪呈?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵段磨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我耗绿,道長(zhǎng)苹支,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任误阻,我火速辦了婚禮债蜜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘堕绩。我一直安慰自己策幼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布奴紧。 她就那樣靜靜地躺著特姐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黍氮。 梳的紋絲不亂的頭發(fā)上唐含,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音沫浆,去河邊找鬼捷枯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛专执,可吹牛的內(nèi)容都是我干的淮捆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼本股,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼攀痊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拄显,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤苟径,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后躬审,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棘街,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蟆盐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遭殉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片石挂。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖险污,靈堂內(nèi)的尸體忽然破棺而出誊稚,到底是詐尸還是另有隱情,我是刑警寧澤罗心,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站城瞎,受9級(jí)特大地震影響渤闷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脖镀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一飒箭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜒灰,春花似錦弦蹂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翅溺,卻和暖如春脑漫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咙崎。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工优幸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褪猛。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓网杆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親伊滋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碳却,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348