一、基本查询语句

  二、单表查询

  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. 深入理解perf报告中的swapper进程

    一.前言 1.在perf监控进程的系统调用时,会出现大量swapper进程 2.官方描述该进程是当CPU上没有其他任务运行时,就会执行swapper.换句话说swapper意味着CPU啥事也没干,跑去 ...

  2. 在Docker中启动Cloudera

    写在前面 记录一下,一个简单的cloudera处理平台的构建过程和一些基本组件的使用 前置说明 需要一台安装有Docker的机器 docker常用命令: docker ps docker ps -a ...

  3. 小鸟初学Shell编程(七)变量引用及作用范围

    变量引用 那么定义好变量,如何打印变量的值呢?举例下变量引用的方式. ${变量名}称作为对变量的引用 echo ${变量名}查看变量的值 ${变量名}在部分情况下可以省略成 $变量名 [root@li ...

  4. 什么是VR中的vection?

    Vection是VR领域的一个专有名词,其义指“在虚拟现实中给人带来‘移动’(self-motion)感觉的认知因素”1.也就是说,vection就是指那些给玩家带来“我正在这个虚拟环境中移动”这种感 ...

  5. phpexcel 导出方法

    Vendor("PHPExcel.PHPExcel"); Vendor("PHPExcel.PHPExcel.IOFactory"); Vendor(" ...

  6. PHP--网络协议相关知识

    HTTP状态码 HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码. HTTP状态码主要有5种,代表5种不同类型的响应: 1xx:信息性状态码,代表接 ...

  7. asp.net core 3.0 更新简记

    asp.net core 3.0 更新简记 asp.net core 3.0 更新简记 Intro 最近把活动室预约项目从 asp.net core 2.2 更新到了 asp.net core 3.0 ...

  8. docker 使用及基本命令

    一.docker简单使用 a.列出镜像 docker images b.从docker hub拉取最新版本镜像 docker pull xxx 错误: Error response from daem ...

  9. [Note] CentOS 命令

    1. uninstall software install by yum install yum install -y [package-name] //无-y则交互式安装 yum remove [p ...

  10. 手把手带你体验Stream流

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 上一篇讲解到了Lambda表达式的使用<最近学 ...