0 0 0

单表数据记录查询—数据检索及排序

ZAESKY
2020-1-27 2384

一、基本查询语句

单表查询是指从一张数据表中查询所需要的数据。

MySQL中查询数据的基本语句是SELECT语句,其基本语法格式如下:

SELECT
  {* | <字段列表> }
  [
  FROM <表1>, <表2>…
  [WHERE <表达式>
  [GROUP BY <group by definition>]
  [HAVING <expression> [{<operator> <expression>}…]]
  [ORDER BY <order by definition>]
  [LIMIT [<offset>,] <row count>]
  ];


二、简单数据记录查询

查询所有字段数据,是指从一张表中检索出所有记录,查询方式有两种,一种是使用通配符“*”,另一种是列出所有字段名,语法形式如下:

SELECT {*col_lis} FROM table_name;

实例1:使用通配符“*”查询goods表中所有数据,SQL语句及其执行结果如下。

mysql> SELECT * FROM goods;
+----+--------+--------------+--------------+--------------+-----------------------------+
| id  | type  | name  | price  | num  | add_time    |
+----+--------+--------------+--------------+--------------+-----------------------------+
|  1  | 书籍  | 西游记  |  50.40  |   20  | 2018-01-01 13:40:40  |
|  2  | 糖类  | 牛奶糖  |   7.50  |  200  | 2018-02-02 13:40:40  |
|  3  | 糖类  | 水果糖  |   2.50  |  100  | NULL  |
|  4  | 服饰  | 休闲西服  | 800.00  | NULL  | 2018-04-04 13:40:40  |
|  5  | 饮品    | 果汁  |   3.00  |   70  | 2018-05-05 13:40:40  |
+----+--------+--------------+--------------+--------------+-----------------------------+
5 rows in set (0.00 sec)

通过SELECT关键字后面列出所有字段名,也可以查询所有列数据,SQL语句如下,其查询结果与实例1的结果相同。

SELECT id,type,name,price,num,add_time FROM goods;

一般使用通配符查询表中所有字段数据;而使用列出字段名的方式查询部分字段数据。


使用SELECT关键字也可以查询指定字段的数据,语法形式如下:

SELECT col_name1[,col_name2,……,col_namen] FROM table_name;

实例2:从goods表中查询单个字段

mysql> SELECT name FROM goods;
+--------------+
| name        |
+--------------+
| 休闲西服   |
| 果汁          |
| 水果糖      |
| 牛奶糖      |
| 西游记      |
+--------------+
5 rows in set (0.00 sec)

实例3:从goods表中查询字段

mysql> SELECT id,name FROM goods;
+----+--------------+
| id   | name       |
+----+--------------+
|  4   | 休闲西服 |
|  5   | 果汁        |
|  3   | 水果糖     |
|  2   | 牛奶糖     |
|  1   | 西游记     |
+----+--------------+
5 rows in set (0.00 sec)

通过前面的学习可以知道,如果要查询goods表中商品的种类,直接查询表示“种类”的字段即可。

实例4:执行SQL语句,查询goods表中字段type的值,结果如下

mysql> SELECT type FROM goods;
+----------+
| type  |
+----------+
| 书籍  |
| 糖类  |
| 糖类  |
| 服饰  |
| 饮品  |
+----------+
5 rows in set (0.00 sec)

实例5:执行SQL语句,查询goods表中字段type不重复的值,结果如下

mysql> SELECT DISTINCT type FROM goods;
+----------+
| type  |
+----------+
| 书籍  |
| 糖类  |
| 服饰  |
| 饮品  |
+----------+
4 rows in set (0.04 sec)

MySQL提供了DISTINCT关键字,使查询结果不重复。其语法形式如下:

SELECT DISTINCT col_list FROM table_name;


使用前面的方法查询到的结果是按照记录在表中的默认顺序进行排列的。如果需要将查询结果按照指定的顺序排列,可以使用ORDER BY关键字。语法形式如下:

SELECT {*|col_list} FROM table_name ORDER BY col_namea [ASC|DESC];

1.单字段排序

在排序之前最好将有空值的记录补充完整,否则,空值记录将被排在最前面。

实例6:执行SQL语句,查询goods表中idnameadd_time字段的数据,并按照add_time字段值进行排序,结果如下:

mysql> SELECT id,name,add_time FROM goods ORDER BY add_time;
+----+--------------+-------------------------------+
| id   | name       | add_time    |
+----+--------------+-------------------------------+
|  1   | 西游记     | 2018-01-01 13:40:40  |
|  2   | 牛奶糖     | 2018-02-02 13:40:40  |
|  4   | 休闲西服 | 2018-04-04 13:40:40  |
|  5   | 果汁        | 2018-05-05 13:40:40  |
|  3   | 水果糖     | 2018-06-09 11:20:55  |
+----+--------------+-------------------------------+
5 rows in set (0.00 sec)

2.降序排序

在按照多字段排序时,也可以使用DESC关键字进行降序排序。

实例7:执行SQL语句,查询goods表中所有记录,并按照price字段和num字段进行排序,结果如下:

mysql> SELECT * FROM goods ORDER BY price DESC,num;
+----+--------+--------------+---------+----------+-----------------------------+
| id   | type  | name        | price    | num  | add_time       |
+----+--------+--------------+---------+----------+-----------------------------+
|  4   | 服饰 | 休闲西服   | 800.00|   10  | 2018-04-04 13:40:40  |
|  1   | 书籍 | 西游记       |  50.40 |   20  | 2018-01-01 13:40:40  |
|  2   | 糖类 | 牛奶糖       |   7.50  |  200  | 2018-02-02 13:40:40  |
|  5   | 饮品 | 果汁           |   2.50  |   70  | 2018-05-05 13:40:40  |
|  3   | 糖类 | 水果糖       |   2.50  |  100  | 2018-06-09 11:20:55  |
+----+--------+--------------+---------+----------+-----------------------------+
5 rows in set (0.00 sec)

实际应用中,数据库中的数据量通常是很大的,一般不会一次性将所有数据查询出来,此时就需要使用LIMIT关键字来限制查询结果的数量。语法形式如下:

SELECT {*|col_list} FROM table_name LIMIT [offset_start,]row_count;

实例8:执行SQL语句,将goods表中的前3条记录查询出来,结果如下

mysql> SELECT * FROM goods LIMIT 3;
+----+--------+-----------+------------+----------+-----------------------------+
| id   | type  | name    | price    | num  | add_time       |
+----+--------+-----------+------------+----------+-----------------------------+
|  1   | 书籍  | 西游记  | 50.40    |   20  | 2018-01-01 13:40:40  |
|  2   | 糖类  | 牛奶糖  |  7.50     |  200   | 2018-02-02 13:40:40  |
|  3   | 糖类  | 水果糖  |  2.50    |  100   | 2018-06-09 11:20:55  |
+----+--------+-----------+------------+----------+-----------------------------+
3 rows in set (0.00 sec)

如果指定起始位置(从0开始),则系统会从起始位置开始查询,返回总条数为显示条数的记录。

实例9:执行SQL语句,返回goods表中从第3条记录开始,总条数为3的记录,结果如下

mysql> SELECT * FROM goods LIMIT 2,3;
+----+--------+--------------+---------------+----------+-----------------------------+
| id   | type  | name        | price          | num     | add_time              |
+----+--------+--------------+---------------+----------+-----------------------------+
|  3   | 糖类 | 水果糖       |   2.50         |  100    | 2018-06-09 11:20:55    |
|  4   | 服饰 | 休闲西服    | 800.00       |   10     | 2018-04-04 13:40:40   |
|  5   | 饮品 | 果汁           |   2.50         |   70     | 2018-05-05 13:40:40   |
+----+--------+--------------+---------------+----------+-----------------------------+
3 rows in set (0.00 sec)


最新回复 (0)

    暂无评论

请先登录后发表评论!

返回
请先登录后发表评论!