標籤:mysql單表查詢
查詢的表
mysql> SELECT * FROM test;
+-----+--------------+-----+--------+------+------+------+---------------------+
| SID | Name | Age | Gender | CID1 | CID2 | TID | CreateTime |
+-----+--------------+-----+--------+------+------+------+---------------------+
| 1 | GuoJing | 19 | M | 2 | 7 | 3 | 2014-11-29 10:00:00 |
| 2 | YangGuo | 17 | M | 2 | 3 | 1 | 2014-11-29 10:00:00 |
| 3 | DingDian | 25 | M | 6 | 1 | 7 | 2014-11-29 10:00:00 |
| 4 | FuFei | 31 | M | 8 | 10 | 5 | 2014-11-29 10:00:00 |
| 5 | HuangRong | 16 | F | 5 | 9 | 9 | 2014-11-29 10:00:00 |
| 6 | YueLingshang | 18 | F | 8 | 4 | NULL | 2014-11-29 10:00:00 |
| 7 | ZhangWuji | 20 | M | 1 | 7 | NULL | 2014-11-29 10:00:00 |
| 8 | Xuzhu | 26 | M | 2 | 4 | NULL | 2014-11-29 10:00:00 |
| 9 | LingHuchong | 22 | M | 11 | NULL | NULL | 2014-11-29 10:00:00 |
| 10 | YiLin | 19 | F | 18 | NULL | NULL | 2014-11-29 10:00:00 |
+-----+--------------+-----+--------+------+------+------+---------------------+
單表查詢文法:
SELECT * FROM 表名; #查詢整張表的所有資料
SELECT 欄位1、欄位2 FROM 表名; #投影
SELECT 查詢列表 FROM 表名 WHERE 條件; #選擇
WHERE:關聯運算式,用來做比較操作 =、>、 >=
!= 不等號
<=> 空值
邏輯關係:
AND:需要所有條件才可以顯示出來
OR:只需要滿足一個條件就可以顯示出來
NOT:取反
BETWEEN ...AND ... #滿足前後兩個查詢條件
LIKE ‘‘ 像什麼
%:任意長度任一字元
_:任意長度單個字元
IN ():給一個列表,選擇出列表中合格值
IS NULL:判斷是否為空白
IS NOT NULL:判斷是否不為空白
DISTINCT:相同的值只顯示一次
DRDER BY 欄位名稱 {ASC|DESC}; 將查詢結果進行排序
ASC:升序,預設就是升序可以省略
DESC:降序
如果對大量的資料進行排序最好是事先設定好定序不然排序的代價很大。
LIMIT:顯示制定行數
LIMIT [位移量,]行數
彙總函式:
AVG:平均值
MIN:最小值
MAX:最大值
SUM:和
COUNT:個數之和
group by:分組
HAVING 過濾條件 分組過濾
欄位名 AS 欄位別名
各種查詢執行個體:
投影查詢:顯示test表中所有人的姓名和年齡
mysql> SELECT Name,Age FROM test;
+--------------+-----+
| Name | Age |
+--------------+-----+
| GuoJing | 19 |
| YangGuo | 17 |
| DingDian | 25 |
| FuFei | 31 |
| HuangRong | 16 |
| YueLingshang | 18 |
| ZhangWuji | 20 |
| Xuzhu | 26 |
| LingHuchong | 22 |
| YiLin | 19 |
+--------------+-----+
10 rows in set (0.00 sec)
選取查詢:搜尋表中年齡大於20歲的人
mysql> SELECT * FROM test WHERE Age>20;
+-----+-------------+-----+--------+------+------+------+---------------------+
| SID | Name | Age | Gender | CID1 | CID2 | TID | CreateTime |
+-----+-------------+-----+--------+------+------+------+---------------------+
| 3 | DingDian | 25 | M | 6 | 1 | 7 | 2014-11-29 10:00:00 |
| 4 | FuFei | 31 | M | 8 | 10 | 5 | 2014-11-29 10:00:00 |
| 8 | Xuzhu | 26 | M | 2 | 4 | NULL | 2014-11-29 10:00:00 |
| 9 | LingHuchong | 22 | M | 11 | NULL | NULL | 2014-11-29 10:00:00 |
+-----+-------------+-----+--------+------+------+------+---------------------+
4 rows in set (0.00 sec)
投影加選取查詢:顯示表中資料為男性的姓名和年齡
mysql> SELECT Name,Age FROM test WHERE Gender=‘M‘;
+-------------+-----+
| Name | Age |
+-------------+-----+
| GuoJing | 19 |
| YangGuo | 17 |
| DingDian | 25 |
| FuFei | 31 |
| ZhangWuji | 20 |
| Xuzhu | 26 |
| LingHuchong | 22 |
+-------------+-----+
DISTINCT:相同的值只顯示一次
mysql> SELECT DISTINCT GenDer FROM test;
+--------+
| GenDer |
+--------+
| M |
| F |
+--------+
查詢年齡加一歲大於20的所有使用者
mysql> SELECT Name,Age FROM test WHERE Age+1>20;
+-------------+-----+
| Name | Age |
+-------------+-----+
| DingDian | 25 |
| FuFei | 31 |
| ZhangWuji | 20 |
| Xuzhu | 26 |
| LingHuchong | 22 |
+-------------+-----+
5 rows in set (0.00 sec)
顯示年齡小於20的女性
mysql> SELECT Name,Age,Gender FROM test WHERE NOT Age>20 AND NOT Gender=‘M‘;
+--------------+-----+--------+
| Name | Age | Gender |
+--------------+-----+--------+
| HuangRong | 16 | F |
| YueLingshang | 18 | F |
| YiLin | 19 | F |
+--------------+-----+--------+
查詢年齡在20和25歲之間的使用者
mysql> SELECT Name,Age FROM test WHERE Age>=20 AND Age<=25;
+-------------+-----+
| Name | Age |
+-------------+-----+
| DingDian | 25 |
| ZhangWuji | 20 |
| LingHuchong | 22 |
+-------------+-----+
mysql> SELECT Name,Age FROM test WHERE Age BETWEEN 20 AND 25;
+-------------+-----+
| Name | Age |
+-------------+-----+
| DingDian | 25 |
| ZhangWuji | 20 |
| LingHuchong | 22 |
+-------------+-----+
顯示姓名是Y開頭的
mysql> SELECT Name FROM students WHERE Name Like ‘Y%‘;
+--------------+
| Name |
+--------------+
| YangGuo |
| YueLingshang |
| YiLin |
+--------------+
顯示HZD開頭的使用者名稱
mysql> SELECT Name FROM test WHERE Name RLIKE ‘^[HZD].*$‘;
+-----------+
| Name |
+-----------+
| DingDian |
| HuangRong |
| ZhangWuji |
+-----------+
顯示表中年齡為18,20,25的使用者
mysql> SELECT Name,Age FROM test WHERE Age IN (18,20,25);
+--------------+-----+
| Name | Age |
+--------------+-----+
| DingDian | 25 |
| YueLingshang | 18 |
| ZhangWuji | 20 |
+--------------+-----+
顯示課程2為空白的使用者
mysql> SELECT Name FROM test WHERE CID2 IS NULL;
+-------------+
| Name |
+-------------+
| LingHuchong |
| YiLin |
+-------------+
2 rows in set (0.00 sec)
顯示課程2不為空白的使用者
mysql> SELECT Name FROM test WHERE CID2 IS NOT NULL;
+--------------+
| Name |
+--------------+
| GuoJing |
| YangGuo |
| DingDian |
| FuFei |
| HuangRong |
| YueLingshang |
| ZhangWuji |
| Xuzhu |
+--------------+
根據查詢結果排序,預設為降序
mysql> SELECT Name FROM test ORDER BY Name;
+--------------+
| Name |
+--------------+
| DingDian |
| FuFei |
| GuoJing |
| HuangRong |
| LingHuchong |
| Xuzhu |
| YangGuo |
| YiLin |
| YueLingshang |
| ZhangWuji |
+--------------+
10 rows in set (0.05 sec)
根據查詢結果排序,預設為升序
mysql> SELECT Name FROM test ORDER BY Name DESC;
+--------------+
| Name |
+--------------+
| ZhangWuji |
| YueLingshang |
| YiLin |
| YangGuo |
| Xuzhu |
| LingHuchong |
| HuangRong |
| GuoJing |
| FuFei |
| DingDian |
+--------------+
10 rows in set (0.00 sec)
將欄位name顯示為姓名
mysql> SELECT Name AS 姓名 FROM test;
+--------------+
| 姓名 |
+--------------+
| GuoJing |
| YangGuo |
| DingDian |
| FuFei |
| HuangRong |
| YueLingshang |
| ZhangWuji |
| Xuzhu |
| LingHuchong |
| YiLin |
+--------------+
只顯示合格前兩行
mysql> SELECT Name FROM test LIMIT 2;
+---------+
| Name |
+---------+
| GuoJing |
| YangGuo |
+---------+
2 rows in set (0.00 sec)
顯示過濾掉前兩行的後三行
mysql> SELECT Name FROM test LIMIT 2,3;
+-----------+
| Name |
+-----------+
| DingDian |
| FuFei |
| HuangRong |
+-----------+
顯示平均年齡
mysql> SELECT AVG(age) FROM test;
+----------+
| AVG(age) |
+----------+
| 21.3000 |
+----------+
1 row in set (0.00 sec)
顯示最小年齡
mysql> SELECT MIN(age) FROM test;
+----------+
| MIN(age) |
+----------+
| 16 |
+----------+
1 row in set (0.02 sec)
顯示最大年齡
mysql> SELECT MAX(Age) FROM test;
+----------+
| MAX(Age) |
+----------+
| 31 |
+----------+
顯示所有人的年齡之和
mysql> SELECT SUM(Age) FROM test;
+----------+
| SUM(Age) |
+----------+
| 213 |
+----------+
mysql> SELECT COUNT(age) FROM test;
+------------+
| COUNT(age) |
+------------+
| 10 |
+------------+
查詢表中男同學和女同學的平均年齡
mysql> SELECT AVG(Age),Gender FROM test GROUP BY Gender;
+----------+--------+
| AVG(Age) | Gender |
+----------+--------+
| 22.8571 | M |
| 17.6667 | F |
+----------+--------+
顯示選修的每門課的人數大於等於2的課程和人數
mysql> SELECT COUNT(CID1) AS persons,CID1 FROM test GROUP BY CID1 HAVING Persons>=2;
+---------+------+
| persons | CID1 |
+---------+------+
| 3 | 2 |
| 2 | 8 |
+---------+------+
本文出自 “梅花香自苦寒來” 部落格,請務必保留此出處http://wangjunkang.blog.51cto.com/8809812/1582651
MySQL單表查詢