数据表的简单查询


基本查询

要查询数据库表的数据,我们使用如下的SQL语句:

                    SELECT * FROM <表名>
                

命令语句SELECT后的*,代表数据表的所有列。比如,我要查询数据表student的所有栏位信息:

                    mysql> SELECT * FROM student;
                    +----+------+---------+--------+----------+
                    | id | age  | classId | gender | name     |
                    +----+------+---------+--------+----------+
                    |  1 |    8 |       1 | M      | xiaoming |
                    |  2 |    8 |       1 | M      | xiaogang |
                    |  3 |    8 |       2 | M      | 小华   |
                    +----+------+---------+--------+----------+
                    3 rows in set (0.00 sec)
                

SELECT 语句还具有简单数学运算的功能:

                    mysql> SELECT (10+2)*20 - 3*10 AS result;
                    +--------+
                    | result |
                    +--------+
                    |    210 |
                    +--------+
                    1 row in set (0.00 sec)
                

条件查询

条件查询在简单查询的基础上附加WHERE 语句:

                    SELECT * FROM <表名> WHERE <条件表达式> 
                

比如,我们要查询数据表student中classId等于2的学生:

                    mysql> SELECT * FROM student WHERE classId = 2;
                    +----+------+---------+--------+--------+
                    | id | age  | classId | gender | name   |
                    +----+------+---------+--------+--------+
                    |  3 |    8 |       2 | M      | 小华 |
                    +----+------+---------+--------+--------+
                    1 row in set (0.00 sec)
                

对于条件表达式,我们可以用到比较符大于>、大于等于>=、小于<、小于等于<=、不等于<>:

条件表达式可以由多个条件按照"AND"或"OR"的逻辑运算连接起来,比如:

                    mysql>  SELECT * FROM student WHERE classId >=1 AND id < 2;
                    +----+------+---------+--------+----------+
                    | id | age  | classId | gender | name     |
                    +----+------+---------+--------+----------+
                    |  1 |    8 |       1 | M      | xiaoming |
                    +----+------+---------+--------+----------+
                    1 row in set (0.00 sec)
                

投影查询

使用SELECT * FROM <表名> WHERE ...可以选出表中的若干条记录。我们注意到返回的二维表结构和原表是相同的,即结果集的所有列与原表的所有列都一一对应。

如果我们只希望返回某些列的数据,而不是所有列的数据,我们可以用SELECT 列1, 列2, 列3 FROM ...,让结果集仅包含指定列。这种操作称为投影查询。

                    SELECT 列1, 列2, 列3 FROM <表名> WHERE <条件表达式>;
                

比如,我们要查询student表中的id、age、name栏位,其投影查询的命令如下:

                    mysql> SELECT id,age,name FROM student;
                    +----+------+----------+
                    | id | age  | name     |
                    +----+------+----------+
                    |  1 |    8 | xiaoming |
                    |  2 |    8 | xiaogang |
                    |  3 |    8 | 小华     |
                    +----+------+----------+
                    3 rows in set (0.00 sec)
                

投影查询加上WHERE子句:

                    mysql> SELECT id,age,name FROM student WHERE id < 3;
                    +----+------+----------+
                    | id | age  | name     |
                    +----+------+----------+
                    |  1 |    8 | xiaoming |
                    |  2 |    8 | xiaogang |
                    +----+------+----------+
                    2 rows in set (0.01 sec)
                

排序

我们使用SELECT查询时,查询结果集通常是按照id排序的,也就是根据主键排序。这也是大部分数据库的做法。 如果我们要根据其他条件排序怎么办?可以加上ORDER BY子句。例如按照年龄从低到高进行排序:

                    SELECT * FROM <表名> ORDER BY <列1>,<列2>...;
                
                    mysql> SELECT * FROM student ORDER BY age;
                    +----+------+---------+--------+----------+
                    | id | age  | classId | gender | name     |
                    +----+------+---------+--------+----------+
                    |  1 |    8 |       1 | M      | xiaoming |
                    |  2 |    8 |       1 | M      | xiaogang |
                    |  3 |    8 |       2 | M      | 小华   |
                    |  5 |    9 |       3 | F      | 小菊   |
                    |  4 |   10 |       2 | F      | 小娟   |
                    +----+------+---------+--------+----------+
                    5 rows in set (0.00 sec)
                

ORDER BY子句可以按照多个栏位排序,可以为每个栏位设置升序(ASC)、降序(DESC),默认情况下是升序:

                    SELECT * FROM student ORDER BY age,classId;
                    SELECT * FROM student ORDER BY age DESC,classId;