一、基本查询语句

  二、单表查询

  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关键字将两个表连接起来。外连接生成的结果集不仅包含符合连接条件的行数据,而且含包括左表、右表或两边连接表中所有的数据行。

  (1)左外连接(这里要弄清楚左外连接和内连接的区别)

mysql> SELECT bookid,borrowTime,backTime,ifback,bookname,author,price
-> FROM tb_borrow LEFT JOIN tb_bookinfo ON 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)
mysql> SELECT bookid,borrowTime,backTime,ifback,bookname,author,price
-> FROM tb_bookinfo LEFT JOIN tb_borrow ON 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 |
| NULL | NULL | NULL | NULL | Tian King | TianJiang | 51.10 |
+--------+------------+------------+--------+-----------+-----------+-------+
3 rows in set (0.00 sec)
 

  (2)右外连接

mysql> SELECT bookid,borrowTime,backTime,ifback,bookname,author,price
-> FROM tb_bookinfo RIGHT JOIN tb_borrow ON 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)
mysql> SELECT bookid,borrowTime,backTime,ifback,bookname,author,price
-> FROM tb_borrow RIGHT JOIN tb_bookinfo ON 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 |
| NULL | NULL | NULL | NULL | Tian King | TianJiang | 51.10 |
+--------+------------+------------+--------+-----------+-----------+-------+
3 rows in set (0.00 sec)

  3.复合条件连接查询

mysql> UPDATE tb_borrow SET ifback=0 WHERE id=2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0 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 | 0 |
+----+----------+--------+------------+------------+----------+--------+
2 rows in set (0.00 sec) 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 bookid,borrowTime,backTime,ifback,bookname,author,price
-> FROM tb_bookinfo,tb_borrow 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 | 0 | Lian | QiaoJiang | 50.00 |
+--------+------------+------------+--------+-----------+-----------+-------+
2 rows in set (0.00 sec)
mysql> SELECT bookid,borrowTime,backTime,ifback,bookname,author,price
-> FROM tb_bookinfo,tb_borrow WHERE tb_borrow.bookid=tb_bookinfo.id AND ifback=0;
+--------+------------+------------+--------+----------+-----------+-------+
| bookid | borrowTime | backTime | ifback | bookname | author | price |
+--------+------------+------------+--------+----------+-----------+-------+
| 2 | 2018-04-16 | 2018-04-21 | 0 | Lian | QiaoJiang | 50.00 |
+--------+------------+------------+--------+----------+-----------+-------+
1 row in set (0.00 sec)

  五、子查询

  MySQL可以嵌套多个查询,在外面一层的查询中使用里面一层查询产生的结果集。这样就不是执行两个独立地查询,而是执行包含一个(或者多个)子查询的单独查询。

  1.带IN关键字的子查询

mysql> SELECT id FROM tb_bookinfo;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set (0.00 sec) mysql> SELECT bookid FROM tb_borrow;
+--------+
| bookid |
+--------+
| 1 |
| 2 |
+--------+
2 rows in set (0.00 sec) mysql> SELECT id,bookname,author,price
-> FROM tb_bookinfo WHERE id IN (SELECT bookid FROM tb_borrow);
+----+-----------+-----------+-------+
| id | bookname | author | price |
+----+-----------+-----------+-------+
| 1 | Java King | LianJiang | 49.80 |
| 2 | Lian | QiaoJiang | 50.00 |
+----+-----------+-----------+-------+
2 rows in set (0.01 sec)
mysql> SELECT id,bookname,author,price
-> FROM tb_bookinfo WHERE id NOT IN (SELECT bookid FROM tb_borrow);
+----+-----------+-----------+-------+
| id | bookname | author | price |
+----+-----------+-----------+-------+
| 3 | Tian King | TianJiang | 51.10 |
+----+-----------+-----------+-------+
1 row in set (0.00 sec)

  2.带比较运算符的子查询

mysql>
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 | 0 |
+----+----------+--------+------------+------------+----------+--------+
2 rows in set (0.00 sec) 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 ifback FROM tb_borrow WHERE borrowTime='2018-04-17';
+--------+
| ifback |
+--------+
| 1 |
+--------+
1 row in set (0.00 sec)
mysql> SELECT * FROM tb_bookinfo
-> WHERE typeid > (SELECT ifback FROM tb_borrow WHERE borrowTime='2018-04-17');
+----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
| 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 |
| 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 |
+----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
2 rows in set (0.00 sec)

  3.带EXISTS关键字的子查询

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 | 0 |
+----+----------+--------+------------+------------+----------+--------+
2 rows in set (0.00 sec) 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 id,bookname,author,price
-> FROM tb_bookinfo WHERE EXISTS (SELECT * FROM tb_borrow WHERE tb_borrow.bookid=tb_bookinfo.id);
+----+-----------+-----------+-------+
| id | bookname | author | price |
+----+-----------+-----------+-------+
| 1 | Java King | LianJiang | 49.80 |
| 2 | Lian | QiaoJiang | 50.00 |
+----+-----------+-----------+-------+
2 rows in set (0.01 sec)
mysql> SELECT id,bookname,author,price
-> FROM tb_bookinfo WHERE NOT EXISTS (SELECT * FROM tb_borrow WHERE tb_borrow.bookid=tb_bookinfo.id);
+----+-----------+-----------+-------+
| id | bookname | author | price |
+----+-----------+-----------+-------+
| 3 | Tian King | TianJiang | 51.10 |
+----+-----------+-----------+-------+
1 row in set (0.00 sec)

  4.带ANY关键字的子查询

  ANY关键字表示满足其中任意一个条件,通常与比较运算符一起使用,只要满足内层查询语句返回的结果中的任意一个,就可以通过该条件来执行外层查询语句。

  <表示小于子查询结果集中某一个值;>表示至少大于子查询结果集中的某一个值。

mysql> SELECT * FROM tb_student;
+----+------+------+---------+-------+
| id | name | sex | classid | score |
+----+------+------+---------+-------+
| 1 | a | 男 | 1 | 199 |
| 2 | b | 女 | 3 | 150 |
| 3 | c | 女 | 2 | 199 |
| 4 | d | 男 | 2 | 188 |
| 5 | e | 女 | 5 | 198 |
| 6 | f | 女 | 5 | 200 |
+----+------+------+---------+-------+
6 rows in set (0.00 sec)

  得到的结果是只要大于188都可以输出。

mysql> SELECT * FROM tb_student WHERE score > ANY (SELECT score FROM tb_student WHERE classid=2);
+----+------+------+---------+-------+
| id | name | sex | classid | score |
+----+------+------+---------+-------+
| 1 | a | 男 | 1 | 199 |
| 3 | c | 女 | 2 | 199 |
| 5 | e | 女 | 5 | 198 |
| 6 | f | 女 | 5 | 200 |
+----+------+------+---------+-------+
4 rows in set (0.00 sec)

  得到的结果是只要比199小都输出。

mysql> SELECT * FROM tb_student WHERE score < ANY (SELECT score FROM tb_student WHERE classid=2);
+----+------+------+---------+-------+
| id | name | sex | classid | score |
+----+------+------+---------+-------+
| 2 | b | 女 | 3 | 150 |
| 4 | d | 男 | 2 | 188 |
| 5 | e | 女 | 5 | 198 |
+----+------+------+---------+-------+
3 rows in set (0.00 sec)

  5.带ALL关键字的子查询

  和ANY相反,<表示小于查询结果中的最小值,>表示大于查询结果中的最大值

mysql> SELECT * FROM tb_student WHERE score > ALL (SELECT score FROM tb_student WHERE classid=2);
+----+------+------+---------+-------+
| id | name | sex | classid | score |
+----+------+------+---------+-------+
| 6 | f | 女 | 5 | 200 |
+----+------+------+---------+-------+
1 row in set (0.00 sec) mysql> SELECT * FROM tb_student WHERE score < ALL (SELECT score FROM tb_student WHERE classid=2);
+----+------+------+---------+-------+
| id | name | sex | classid | score |
+----+------+------+---------+-------+
| 2 | b | 女 | 3 | 150 |
+----+------+------+---------+-------+
1 row in set (0.00 sec)

  六、合并查询结果

  1.使用UNION关键字

mysql> SELECT barcode FROM tb_bookinfo;
+----------+
| barcode |
+----------+
| 17120107 |
| 17120108 |
| 17120109 |
+----------+
3 rows in set (0.00 sec) mysql> SELECT barcode FROM tb_bookinfo_copy;
+----------+
| barcode |
+----------+
| 17120107 |
| 17120108 |
| 17120106 |
+----------+
3 rows in set (0.00 sec) mysql> SELECT barcode FROM tb_bookinfo UNION SELECT barcode FROM tb_bookinfo_copy;
+----------+
| barcode |
+----------+
| 17120107 |
| 17120108 |
| 17120109 |
| 17120106 |
+----------+
4 rows in set (0.00 sec)

  2.使用UNION ALL关键字

mysql> SELECT barcode FROM tb_bookinfo UNION ALL SELECT barcode FROM tb_bookinfo_copy;
+----------+
| barcode |
+----------+
| 17120107 |
| 17120108 |
| 17120109 |
| 17120107 |
| 17120108 |
| 17120106 |
+----------+
6 rows in set (0.00 sec)

  七、定义表和字段的别名

  1.为表取别名

mysql> SELECT bookname,author,price,page
-> FROM tb_bookinfo AS book
-> LEFT JOIN tb_borrow AS type ON book.typeid=type.id;
+-----------+-----------+-------+------+
| bookname | author | price | page |
+-----------+-----------+-------+------+
| Java King | LianJiang | 49.80 | 350 |
| Lian | QiaoJiang | 50.00 | 351 |
| Tian King | TianJiang | 51.10 | 352 |
+-----------+-----------+-------+------+
3 rows in set (0.00 sec)

  2.为字段取别名,统计del的次数并取别名为degree

mysql> SELECT del,COUNT(*) AS degree FROM tb_bookinfo GROUP BY del;
+------+--------+
| del | degree |
+------+--------+
| 0 | 3 |
+------+--------+
1 row in set (0.00 sec)

  八、使用正则表达式查询

  1.匹配指定字符集中任意一个(查询出bookname中包括字幕g或v)

mysql> SELECT * FROM tb_bookinfo
-> WHERE bookname REGEXP '[gv]';
+----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
| 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 |
| 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 |
+----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
2 rows in set (0.01 sec)

  2.使用“*”和“+”来匹配多个字符(*表示匹配多个该符号之前的字符,包括0和1个;+表示匹配多个该符号之前的字符,包括一个)

mysql> SELECT email FROM tb_student;
+-----------------------+
| email |
+-----------------------+
| sjy534948129@sina.com |
| sjy.com |
| a.com |
| a.b.com |
| assdad |
| dadd.sda |
+-----------------------+
6 rows in set (0.00 sec) mysql> SELECT email FROM tb_student
-> WHERE email NOT REGEXP '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$';
+----------+
| email |
+----------+
| sjy.com |
| a.com |
| a.b.com |
| assdad |
| dadd.sda |
+----------+
5 rows in set (0.00 sec)

  正则表达式的模式字符

  1. ^ 匹配以特定字符或字符串开头的记录

  2. $ 匹配以特定字符或字符串结尾的记录

  3. .  匹配字符串的任意一个字符,包括回车和换行

  4. [字符集合] 匹配'字符集合'中的任意一个字符

  5. [^字符集合] 匹配除'字符集合'中的任意一个字符

  6. S1|S2|S3 匹配S1、S2和S3中的任意一个字符串

  7. * 匹配多个该符号之前的字符,包括0个和1个

  8. + 匹配多个该符号之前的字符,包括1个

  9. 字符串{N} 匹配字符串出现N次

  10. 字符串{M,N} 匹配字符串出现至少M次,最多N次

  

Mysql数据库(五)表记录的检索的更多相关文章

  1. Mariadb/MySQL数据库单表查询基本操作及DML语句

    Mariadb/MySQL数据库单表查询基本操作及DML语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一数据库及表相关概述 1>.数据库操作 创建数据库: CREATE ...

  2. MySQL数据库分表的3种方法

    原文地址:MySQL数据库分表的3种方法作者:dreamboycx 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目 ...

  3. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

  4. MySQL数据库以及表的管理

    MySQL数据库以及表的管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 今天我们探讨的话题就是如何使用MySQL做开发,我们运维的主要工作不是去开发SQL的,但尽管如此,我们有 ...

  5. MySQL数据库之表的增删改查

    目录 MySQL数据库之表的增删改查 1 引言 2 创建表 3 删除表 4 修改表 5 查看表 6 复制表 MySQL数据库之表的增删改查 1 引言 1.MySQL数据库中,数据库database就是 ...

  6. [MySQL数据库之表的约束条件:primary key、auto_increment、not null与default、unique、foreign key:表与表之间建立关联]

    [MySQL数据库之表的约束条件:primary key.auto_increment.not null与default.unique.foreign key:表与表之间建立关联] 表的约束条件 约束 ...

  7. [MySQL数据库之表的详细操作:存储引擎、表介绍、表字段之数据类型]

    [MySQL数据库之表的详细操作:存储引擎.表介绍.表字段之数据类型] 表的详细操作 存储引擎 mysql中建立的库======>文件夹 库中建立的表======>文件 用来存储数据的文件 ...

  8. mysql数据库单表只有一个主键自增id字段,ibatis实现id自增

    mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid">        insert into user_id ...

  9. Vc数据库编程基础MySql数据库的表增删改查数据

    Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...

  10. mysql数据库user表host字段的%问题

    搜索: mysql数据库user表host字段的%问题 连接:http://blog.csdn.net/xiaomengh/article/details/48706149 在mysql数据库中,使用 ...

随机推荐

  1. 使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课

    前言: 今年是建国70周年,爱国热情异常的高涨,为自己身在如此安全.蓬勃发展的国家深感自豪. 我们公司楼下为庆祝国庆,拉了这样的标语,每个人做好一件事,就组成了我们强大的祖国. 看到这句话,深有感触, ...

  2. freemarker常见语法

    FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}  ${basketball.name?if_exists } / ...

  3. hadoop入门之海量Web日志分析 用Hadoop提取KPI统计指标

    转载自:http://blog.fens.me/hadoop-mapreduce-log-kpi/ 今天学习了这一篇博客,写得十分好,照着这篇博客敲了一遍. 发现几个问题, 一是这篇博客中采用的had ...

  4. Python采集VIP收费QQ音乐,一起来听周董最新的《说好不哭》,省3块不香吗?

    环境: windows python3.6.5 模块: requests selenium json re urllib 环境与模块介绍完毕后,就可以来实行我们的操作了. 第1步: 通过一个解析网站: ...

  5. 一个PHP文件搞定微信H5支付

     / 更新于 2018-07-02 / 8 条评论 过年期间也坚持要撸码啊接着给博客除草,在这个小除夕是情人节的一天,祝大家新年快乐,情人节能够顺利脱单~~~ 回归正题,这篇文章介绍一下微信H5支付, ...

  6. Gin框架介绍及使用

    Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 如果你是性能和高效的追求者, 你会爱上Gin. ...

  7. Kafka 异步消息也会阻塞?记一次 Dubbo 频繁超时排查过程

    线上某服务 A 调用服务 B 接口完成一次交易,一次晚上的生产变更之后,系统监控发现服务 B 接口频繁超时,后续甚至返回线程池耗尽错误 Thread pool is EXHAUSTED.因为服务 B ...

  8. 你不知道的 IDEA Debug调试小技巧

    一.多线程调试断点 Intellij IDEA 的debug断点调试是有一个模式的选择的,就像下面这张图,平时我们都使用的是默认的 ALL(在Eclipse中默认是线程模式) ,这种模式我们只能将一个 ...

  9. 基于.NET环境,C#语言 实现 TCP NAT

    基于.NET平台和C#语言实现TCP NAT穿越        1.<C# WinForm 跨线程访问控件(实用简洁写法)>       2.<基于.NET环境,C#语言 实现 TC ...

  10. 高清屏下canvas重置尺寸引发的问题

    我们知道,清空canvas画布内容有以下两个方法. 第一种方法是cearRect函数: context.cearRect(0,0,canvas.width,canvas.height) 第二种方法就是 ...