数据表的简单查询
基本查询
要查询数据库表的数据,我们使用如下的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)
对于条件表达式,我们可以用到比较符大于>、大于等于>=、小于<、小于等于<=、不等于<>:
- WHERE classId < 2
- WHERE classId >=1
- WHERE classId <=2
- WHERE classId <> 1
条件表达式可以由多个条件按照"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;