MySQL

MySQL 知识量:16 - 40 - 165

3.1 简单查询><

查询单个列- 3.1.1 -

从MySQL数据库中查询数据是最常用的一项操作,这将用到select查询语句。select语句的基本结构为:

select ... from ...

SQL语句都是由一些简单的英文单词构成的,这些单词称为关键字或保留字。

以上代码中“select”和“from”都是关键字。其中,select后面跟要查询的内容(查什么),from后面跟要查询的表(从哪查)。

select name from student;

以上代码的意思是:从表student中查询name列的信息。结果如下:

+-------+
| name  |
+-------+
| Susan |
| Jame  |
| Bob   |
| Robot |
| Jen   |
| Toney |
+-------+

以上结果中的数据没有刻意排序,它们的顺序可能是数据被添加入数据表时的顺序,也可能不是,随后再谈论排序问题。

编写SQL语句时要注意的是:

  • 多条语句必须以分号(;)结束,单条语句在MySQL中不要求,但最好也这样做,好习惯很重要。

  • SQL语句一般不区分大小写,但是建议一直小写或使用自己特定的写法,且保持前后一致,以避免特殊情况出现。

查询多个列- 3.1.2 -

要查询多个列,只需要在select后面多添加几个列名即可。

select name,age from student;

从表student中查询姓名和年龄信息,结果为:

+-------+-----+
| name  | age |
+-------+-----+
| Susan |  11 |
| Jame  |  12 |
| Bob   |  11 |
| Robot |  10 |
| Jen   |  11 |
| Toney |  10 |
+-------+-----+

查询所有列- 3.1.3 -

除了查询指定列以外,如果需要查询一个表的所有列,可以使用通配符“*”来完成,把它放到select的后面替代具体列名就可以了。

select * from student;

查询表student的所有列,结果为:

+----+-------+-----+--------+
| id | name  | age | sex    |
+----+-------+-----+--------+
|  1 | Susan |  11 | female |
|  2 | Jame  |  12 | male   |
|  3 | Bob   |  11 | male   |
|  4 | Robot |  10 | male   |
|  5 | Jen   |  11 | female |
|  6 | Toney |  10 | male   |
+----+-------+-----+--------+

注意:虽然使用*通配符很方便,还可以查询出未知的列,但是因为查询性能问题,除非真的需要查询所有列的信息,尽量不要使用*通配符。

查询不同的行- 3.1.4 -

如果想要查询的结果值都是唯一的,也就是不要重复内容,可以使用关键字distinct,将它放到目标列的前面即可。

select distinct age from student;

从表student中查询年龄age信息,要求年龄不能有重复项。结果为:

+-----+
| age |
+-----+
|  11 |
|  12 |
|  10 |
+-----+

限制查询结果- 3.1.5 -

如果查询出的结果较多,想要限制输出的结果,例如想要查询的第一行或前3行信息等,可以使用limit子句。其语法为:

limit number; 或者 limit number1,number2;

如果关键字limit后面只有一个数字,表示保留查询结果的前几行;如果是“数字1,数字2”的形式,表示保留查询结果的从数字1开始的数字2个行。

1、第1种形式:

select * from student limit 3;

查询表student的所有信息的前3行。结果为:

+----+-------+-----+--------+
| id | name  | age | sex    |
+----+-------+-----+--------+
|  1 | Susan |  11 | female |
|  2 | Jame  |  12 | male   |
|  3 | Bob   |  11 | male   |
+----+-------+-----+--------+

2、第2种形式:

select * from student limit 1,3;

查询表student的所有信息,显示从第2行开始的3行数据。结果为:

+----+-------+-----+------+
| id | name  | age | sex  |
+----+-------+-----+------+
|  2 | Jame  |  12 | male |
|  3 | Bob   |  11 | male |
|  4 | Robot |  10 | male |
+----+-------+-----+------+

特别注意:

  • MySQL查询结果的编码从0开始,因此第一行实际是行0,“limit 0,3”表示:从第1行开始的3行,等同于“limit 3”。

  • 如果limit子句表示的查询范围超出了实际可以查询的范围,MySQL将只返回能够查到的数据。

使用完全限定的表名- 3.1.6 -

前面的查询语句在引用表名时只有表名本身,在某些情况下,特别是涉及不同数据库的查询,可能会遇到表同名问题,这时就需要使用完全限定的表名,简单讲就是在表名前面加上数据库的名字,以便更精确的表示是哪里的哪个表。

select student.name from school.student;

查询数据库school的表student的列name的信息。结果为:

+-------+
| name  |
+-------+
| Susan |
| Jame  |
| Bob   |
| Robot |
| Jen   |
| Toney |
+-------+

以上代码中,通过使用“.”将数据库名与表名进行连接,以进一步进行准确表达。其中,列名name也通过这种形式与表名进行了关联,原理是一样的。