![](https://i-blog.csdnimg.cn/blog_migrate/96486699aa4ae46238f7e9d778255caf.png)
2.3.3 去除重复行
去除重复行,在本科课程《数据库系统》有个专业的术语叫“投影”。
比如,我想知道 employees
表中的字段 department_id
中,有什么部门,我们就可以把重复的部门去掉,返回一个无重复数据的结果集。
在MySQL中,在要去重的列 (字段) 前声明关键字 DISTINCT
(adj.不同的;有区别的;不同种类的) ,就能实现该列去除重复数据,如下代码所示:
SELECT DISTINCT department_id
FROM employees;
查询结果:
可以看见,department_id
共有11个不重复的数据,并且可以发现,MySQL返回的结果集是递增排列的。 其中有一个 (NULL) 是指没有部门ID的员工。
2.3.5 着重号
` (着重号) 是为了解决命名与保留字、数据库系统或常用方法冲突的问题。
如在数据库中,有一张表名为 order
的表,其与MySQL的排序关键字 ORDER
冲突。此时如果我直接查询 order
表,MySQL会报错。
SELECT * FROM ORDER;
查询结果:
为了解决名称和关键字冲突的问题,要把 order
表用 ` (着重号) 引起来。如下代码所示:
SELECT * FROM `order`;
查询结果:
【体会】
- 在给数据库表、字段名等命名时,尽量不要与关键字和保留字重名。如果因为特殊情况必须坚持使用,则必须使用一对 ` (着重号) 引起来。
2.4 显示表结构
如果想知道数据库中一张表中,有什么字段、每个字段是什么数据类型、每个字段是否允许为空值等信息,我们就可以采用显示表结构。
在MySQL中,显示表结构,可以在表名前用关键字 DESCRIBE
(vt.描述;形容;) 来实现,也可以用缩写 DESC
。如下代码所示:
DESCRIBE employees;
或
DESC employees;
查询结果:
可以看到有11行,每一行就是 employees
的一个字段。该查询结果的字段依次表示:字段名、数据类型、是否允许为空值、约束条件、默认值和额外说明。
2.5 过滤数据
例子1:
查询 employees
表中,department_id
为 90 的员工。
这时候我们就可以使用过滤条件来查询。在SQL中,过滤用关键字 WHERE
来实现,声明在 FROM
结构后面。例如,
SELECT employee_id, last_name, department_id
FROM employees
WHERE department_id = 90;
查询结果:
例子2:
查询 employees
表中,lase_name
为 ‘King’ 的员工。
SELECT employee_id, last_name, department_id
FROM employees
WHERE last_name = 'King';
查询结果:
【体会】
WHERE
要声明在FROM
结构的后面。- 例子2中字符串类型的字段
last_name
要用单引号,且严格区分大小写。 - 至此,SQL查询语句最基础的结构
SELECT...FROM...WHERE...
就出现了。过滤条件还有一系列丰富的运算符操作,结合各种运算符,查询过滤能实现各种丰富的功能。运算符将在下一章详细描述。