數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)最主要的功能就是數(shù)據(jù)查詢,它不應(yīng)只是簡(jiǎn)單的返回?cái)?shù)據(jù)庫(kù)中的數(shù)據(jù),還應(yīng)該是對(duì)數(shù)據(jù)的篩選杏头,以及數(shù)據(jù)用什么樣方式顯示出來。
Mysql從數(shù)據(jù)表中查詢數(shù)據(jù)的基本語句為SELECT語句沸呐。
1.單表查詢:就是從以一張表數(shù)據(jù)中查詢所需的數(shù)據(jù)醇王。
- 查詢所有字段:
SELECT * FROM 表名;
- 查詢指定字段:
SELECT 列名 FROM 表名; //查詢單個(gè)字段
SELECT 字段名1,字段名2崭添,...字段n FROM 表名; //查詢多個(gè)字段
- 查詢指定記錄:
SELECT 字段名1寓娩,字段名2,...字段名n
FROM 表名
WHERE 查詢條件;
WHERE條件判斷符 | 說明 |
---|---|
= | 相等 |
<>,!= | 不相等 |
< | 小于 |
<= | 小于或者等于 |
> | 大于 |
>= | 大于或者等于 |
BETWEEN | 位于兩值之間 |
- 帶in關(guān)鍵字的查詢:用來查詢滿足指定范圍內(nèi)的條件的記錄呼渣。
eg:查詢id為101和102的記錄
SELECT ID ,其他字段名棘伴,
FROM 表名
WHERE ID IN(101,102);
- 帶between and 的范圍查詢:用來查詢某個(gè)范圍內(nèi)值。反之屁置,加not,查詢不在某個(gè)范圍內(nèi)焊夸。(舉例請(qǐng)參考上面例子)
- 帶like的字符匹配查詢:(舉例請(qǐng)參考上面例子)
1通配符“%”,匹配任意長(zhǎng)度的字符蓝角,甚至包括零字符阱穗。
2下劃線通配符“_”饭冬,一次只能匹配任意一個(gè)字符。 - 查詢空值:在WHERE條件中使用IS NULL;
- 帶AND的多條件查詢:在WHERE條件中使用AND與多個(gè)條件表達(dá)式分開揪阶;
- 帶OR的多條件查詢:表示只需要滿足其中一個(gè)條件的記錄即可昌抠,用OR連接;
- 查詢結(jié)果不重復(fù):
SELECT DISTINCT 字段名 FROM 表名;
- 對(duì)查詢結(jié)果排序:
SELECT 字段名 FROM 表名 ORDER BY 字段名; // 默認(rèn)為升序排列鲁僚,若要降序排序炊苫,則在最后加上DESC
2.分組查詢:指對(duì)數(shù)據(jù)按照某個(gè)或多個(gè)字段進(jìn)行分組,Mysql中使用GROUP BY 關(guān)鍵字對(duì)數(shù)據(jù)分組冰沙。
[GROUP BY 字段] [HAVING <條件表達(dá)式>]
- 使用HVAING過濾分組:GROUP BY 和HAVING 一起限定顯示
HAVING和WHERE 區(qū)別:having在數(shù)據(jù)分組之后進(jìn)行過濾來選擇分組劝评,而where在分組之前來選擇記錄。 - 在GROUP BY 子句中使用 WITH ROLLUP:指在所有查詢出的分組記錄之后增加一條記錄倦淀,該記錄是計(jì)算查詢出的所有記錄的總和蒋畜。
- 使用LIMIT限制查詢結(jié)果的數(shù)量:
LIMIT [位置偏移量] 行數(shù);
3.使用集合函數(shù)查詢:
- COUNT()函數(shù):統(tǒng)計(jì)數(shù)據(jù)表中包含的記錄行的總數(shù),返回某列的行數(shù)撞叽。
SELECT COUNT(*) AS 字段名 FROM 表名;
注意: count()與count(指定列字段名)的區(qū)別:如果指定列的值為空時(shí)姻成,計(jì)算時(shí)就會(huì)被忽略;但是count()就不會(huì)忽略愿棋。
- SUM函數(shù):求總和科展,返回指定列值的和。
SELECT SUM(quantity)AS 字段名 FROM 表名 WHERE [指定條件];
- AVG 函數(shù):計(jì)算返回的行數(shù)和每一行數(shù)據(jù)的和糠雨,求得指定列數(shù)據(jù)的平均值才睹。(如sum函數(shù)舉例)
- MAX 函數(shù):返回指定列的最大值。(如sum函數(shù)舉例)
- MIN 函數(shù):返回指定列的最小值甘邀。(如sum函數(shù)舉例)
4.連接查詢:
- 內(nèi)連接:使用比較符進(jìn)行表間列數(shù)據(jù)的比較操作琅攘,并列出這些表中與連接條件相匹配的數(shù)據(jù)行,組成新的記錄松邪。
舉例:
SELECT suppliers.s_id,s_name,f_name,f_pirce FROM fruits ,suppliers WHERE fruits.s_id=suppliers.s_id;
// 其中suppliers和fruits為表名坞琴,兩個(gè)表中都有相同的字段s_id;所以建起連接,新紀(jì)錄就是兩個(gè)表中
具逗抑。有相同s_id的列值剧辐。因此在比較的時(shí)候需要完全限定表名(格式為"表名.列名")
- 外連接查詢:連接查詢的內(nèi)查詢時(shí),返回查詢結(jié)果集合中的僅是符合查詢條件邮府,但有時(shí)還需要查看沒有被包含信息的行荧关。包括左連接和右連接。
- 左連接:左連接的結(jié)果包括left outer 子句中的指定的左表的所有行褂傀,而不僅僅是連接列所匹配的行忍啤。右連接與左連接相反。