Mysql數據庫(五)表記錄的檢索
一、基本查詢語句
二、單表查詢
1.查詢所有字段
mysql> SELECT * FROM tb_bookinfo; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 3 rows in set (0.00 sec)
2.查詢指定字段
mysql> SELECT bookname,author FROM tb_bookinfo; +-----------+-----------+ | bookname | author | +-----------+-----------+ | Java King | LianJiang | | Lian | QiaoJiang | | Tian King | TianJiang | +-----------+-----------+ 3 rows in set (0.00 sec)
3.查詢指定數據
mysql> SELECT * FROM tb_bookinfo WHERE bookname=‘Tian King‘; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 1 row in set (0.00 sec)
4.帶IN關鍵字的查詢
mysql> SELECT bookname,author,price,page,bookcase FROM tb_bookinfo WHERE bookcase IN(1,2); +-----------+-----------+-------+------+----------+ | bookname | author | price | page | bookcase | +-----------+-----------+-------+------+----------+ | Java King | LianJiang | 49.80 | 350 | 1 | | Lian | QiaoJiang | 50.00 | 351 | 2 | +-----------+-----------+-------+------+----------+ 2 rows in set (0.00 sec) mysql> SELECT bookname,author,price,page,bookcase FROM tb_bookinfo WHERE bookcase IN(1,3); +-----------+-----------+-------+------+----------+ | bookname | author | price | page | bookcase | +-----------+-----------+-------+------+----------+ | Java King | LianJiang | 49.80 | 350 | 1 | | Tian King | TianJiang | 51.10 | 352 | 3 | +-----------+-----------+-------+------+----------+ 2 rows in set (0.00 sec)
5.帶BETWEEN AND的範圍查詢
mysql> SELECT * FROM tb_bookinfo WHERE inTime BETWEEN ‘2017-04-17‘ and ‘2017-04-19‘; Empty set (0.00 sec) mysql> SELECT * FROM tb_bookinfo WHERE inTime BETWEEN ‘2018-04-17‘ and ‘2018-04-19‘; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 3 rows in set (0.00 sec) mysql> SELECT * FROM tb_bookinfo WHERE inTime BETWEEN ‘2018-04-17‘ and ‘2018-04-18‘; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 2 rows in set (0.00 sec) mysql> SELECT * FROM tb_bookinfo WHERE inTime NOT BETWEEN ‘2018-04-17‘ and ‘2018-04-18‘; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 1 row in set (0.00 sec)
6.帶LIKE的字符匹配查詢,通過它可以實現模糊查詢,有兩種通配符:%(可以匹配一個或多個字符,可以代表任意長度的字符串)和_(只匹配一個字符)
mysql> SELECT * FROM tb_bookinfo WHERE barcode LIKE ‘%71%‘; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 3 rows in set (0.00 sec)
7.用IS NULL關鍵字查詢空值
mysql> SELECT * FROM tb_bookinfo WHERE bookname IS NULL; Empty set (0.00 sec)
8.帶AND的多條件查詢
mysql> SELECT * FROM tb_bookinfo WHERE bookcase=1 AND del=0; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 1 row in set (0.00 sec)
9.帶OR的多條件查詢
mysql> SELECT * FROM tb_bookinfo WHERE bookcase=1 OR bookcase=2; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 2 rows in set (0.00 sec)
10.用DISTINCT關鍵字去除結果中的重復行
mysql> SELECT DISTINCT del FROM tb_bookinfo ; +------+ | del | +------+ | 0 | +------+ 1 row in set (0.00 sec)
11.用ORDER BY關鍵字對查詢結果排序(ASC表示升序,DESC表示降序)
mysql> SELECT * FROM tb_bookinfo ORDER BY price DESC; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 | | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 3 rows in set (0.00 sec)
mysql> SELECT * FROM tb_bookinfo ORDER BY typeid ASC; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 | | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 3 rows in set (0.00 sec)
12.用GROUP BY關鍵字分組查詢
(1)使用GROUP BY關鍵字分組查詢
mysql> SELECT del,COUNT(*) FROM tb_bookinfo GROUP BY del; +------+----------+ | del | COUNT(*) | +------+----------+ | 0 | 3 | +------+----------+ 1 row in set (0.00 sec)
(2)GROUP BY關鍵字與GROUP_CONCAT()函數一起使用
mysql> SELECT del,GROUP_CONCAT(barcode) FROM tb_bookinfo GROUP BY del; +------+----------------------------+ | del | GROUP_CONCAT(barcode) | +------+----------------------------+ | 0 | 17120107,17120108,17120109 | +------+----------------------------+ 1 row in set (0.00 sec)
(3)按多個字段進行分組,當第一個字段有相同值時,再按第二個字段進行分組
mysql> SELECT del,barcode FROM tb_bookinfo GROUP BY del,barcode; +------+----------+ | del | barcode | +------+----------+ | 0 | 17120107 | | 0 | 17120108 | | 0 | 17120109 | +------+----------+ 3 rows in set (0.00 sec)
13.用LIMIT限制查詢結果的數量(顯示前兩條數據和從第1個編號開始(記錄編號是從0開始的),查詢兩條數據)
mysql> SELECT * FROM tb_bookinfo ORDER BY price DESC LIMIT 2; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 | | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 2 rows in set (0.00 sec)
mysql> SELECT * FROM tb_bookinfo ORDER BY price DESC LIMIT 1,2; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 2 rows in set (0.00 sec)
三、聚合函數查詢
聚合函數的最大特點是它們根據一組數據求出一個值。聚合函數的結果值只根據選定行中非NULL的值進行計算,NULL值被忽略。
1.COUNT()函數用於對除“*”以外的任何參數,返回所選擇集合中非NULL值的行的數目;對於參數“*”,返回選擇集合中所有行的數目,包含NULL值的行。
mysql> SELECT COUNT(*) FROM tb_bookinfo; +----------+ | COUNT(*) | +----------+ | 3 | +----------+ 1 row in set (0.00 sec)
2.SUM()函數
mysql> SELECT price FROM tb_bookinfo; +-------+ | price | +-------+ | 49.80 | | 50.00 | | 51.10 | +-------+ 3 rows in set (0.00 sec) mysql> SELECT SUM(price) FROM tb_bookinfo; +------------+ | SUM(price) | +------------+ | 150.90 | +------------+ 1 row in set (0.00 sec)
3.AVG()函數
mysql> SELECT AVG(price) FROM tb_bookinfo; +------------+ | AVG(price) | +------------+ | 50.299999 | +------------+ 1 row in set (0.00 sec)
4.MAX()函數
mysql> SELECT MAX(price) FROM tb_bookinfo; +------------+ | MAX(price) | +------------+ | 51.10 | +------------+ 1 row in set (0.00 sec)
5.MIN()函數
mysql> SELECT MIN(price) FROM tb_bookinfo; +------------+ | MIN(price) | +------------+ | 49.80 | +------------+ 1 row in set (0.00 sec)
四、連接查詢
1.內連接查詢
連接是把不同表的記錄連到一起的最普遍的方法。內連接是最普遍的連接類型,而且是最勻稱的,因為它們要求構成連接的每個表的共有列匹配,不匹配的行將被排除。內連接包括相等連接和自然連接,最常見的例子是相等連接,也就是使用等號運算符根據每個表共有的列的值匹配兩個表的行。這種情況下,最後的結果集只包含參加連接的表中與指定字段相符的行。
mysql> SELECT * FROM tb_bookinfo; +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 | | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 | | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 | +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+ 3 rows in set (0.00 sec) mysql> SELECT * FROM tb_borrow; +----+----------+--------+------------+------------+----------+--------+ | id | readerid | bookid | borrowTime | backTime | operator | ifback | +----+----------+--------+------------+------------+----------+--------+ | 1 | 1 | 1 | 2018-04-17 | 2018-04-20 | mr | 1 | | 2 | 1 | 2 | 2018-04-16 | 2018-04-21 | mr | 1 | +----+----------+--------+------------+------------+----------+--------+ 2 rows in set (0.00 sec) mysql> SELECT bookid,borrowTime,backTime,ifback,bookname,author,price -> FROM tb_borrow,tb_bookinfo WHERE tb_borrow.bookid=tb_bookinfo.id; +--------+------------+------------+--------+-----------+-----------+-------+ | bookid | borrowTime | backTime | ifback | bookname | author | price | +--------+------------+------------+--------+-----------+-----------+-------+ | 1 | 2018-04-17 | 2018-04-20 | 1 | Java King | LianJiang | 49.80 | | 2 | 2018-04-16 | 2018-04-21 | 1 | Lian | QiaoJiang | 50.00 | +--------+------------+------------+--------+-----------+-----------+-------+ 2 rows in set (0.00 sec)
2.外連接查詢
與內連接不同,外連接是指使用OUTET JOIN關鍵字將兩個表連接起來。外連接生成的結果集不僅包含符合連接條件的行數據,而且含包括左表、右表或兩邊連接表中所有的數據行。
3.復合條件連接查詢
五、子查詢
1.帶IN關鍵字的子查詢
2.帶比較運算符的子查詢
3.帶EXISTS關鍵字的子查詢
4.帶ANY關鍵字的子查詢
5.帶ALL關鍵字的子查詢
六、合並查詢結果
1.使用UNION關鍵字
2.使用UNION ALL關鍵字
七、定義表和字段的別名
1.為表取別名
2.為字段取別名
八、使用正則表達式查詢
1.匹配指定字符集中任意一個
2.使用“*”和“+”來匹配多個字符
Mysql數據庫(五)表記錄的檢索