1. 程式人生 > >Mysql數據庫(五)表記錄的檢索

Mysql數據庫(五)表記錄的檢索

別名 from 參數 生成 ice arc 指定字段 則表達式 基本查詢

  一、基本查詢語句

  二、單表查詢

  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數據庫(五)表記錄的檢索