4.2.1 简单查询

4.2.1 简单查询

1.选择指定的字段(列)

从select语句的基本语法格式可以看出,最简单的select语句是:

输出列表达式可以是MySQL所支持的任何运算的表达式,利用这个最简单的select语句,可以进行如“1+2”这样的运算:

若select语句的表达式是表中的字段名,则字段名之间要以逗号分隔。

【例4.11】查询empMIS数据库的departments表中各部门的名称dname、部门所在城市dloc。SQL代码:

例4.11的执行结果如下所示:

当在select语句中使用“*”号时,表示选择查询表的所有字段。如要显示departments表中的所有字段,不必将其所有字段名一一列出,使用select*from departments;即可,执行结果如下所示:

2.定义字段别名

当希望查询结果中的字段使用自定义的列标题时,可以在字段名之后使用as或空格来更改查询结果的字段名,其格式为:

【例4.12】查询departments表中的所有列,结果中各列的标题分别指定为部门编号、部门名称和部门所在城市。

SQL代码:

例4.12的执行结果如下所示:

当自定义的列标题为汉字或者含有空格时,必须使用单引号或双引号将标题括起来。自定义列标题时,也可以用空格代替“as”。

3.替换查询结果中的数据

在对表进行查询时,有时对所查询的某些字段希望得到的是一种概念,而不是具体的数据。例如,查询employees表的员工工资,所希望知道的是员工工资的总体情况,而不是具体工资是多少,这时就可以用员工工资情况来替换具体的工资值。

要替换查询结果中的数据,则使用查询中的case表达式,其格式如下:

语法说明:

“case表达式”以case开始,end结束。MySQL从“条件1”开始判断,“条件1”成立,输出“表达式1”,结束;若“条件1”不成立,判断“条件2”,若“条件2”成立,输出“表达式2”后结束;……如果条件都不成立,输出“表达式n”。

【例4.13】查询employees表中的员工编号eno、员工姓名ename、员工工资esal、员工奖金ebonus,对其奖金按以下规则进行替换:若奖金为空值,替换为“无业绩”;若奖金<=1000,替换为“业绩一般”;若奖金为1001~2000之间,替换为“业绩良好”;若奖金>=2001,替换为“业绩优秀”。列标题更改为“奖金”。

SQL代码:

例4.13的执行结果如下所示:

4.计算字段值

使用select对字段进行查询时,在结果中可以输出对字段值计算后的值,即select子句可使用表达式作为结果。

【例4.14】对employees表中所有员工的工资涨5%,并显示员工编号eno、员工姓名ename、员工原始工资esal、工资涨5%之后的工资值,列标题为“涨后工资”。

SQL代码:

例4.14的执行结果如下所示:

5.消除结果集中的重复行

对表只选择某些字段列时,可能会出现重复行。例如,若对empMIS数据库的employees表只选择员工领导编号emgr、员工所在部门编号deptno,则出现多行记录重复的情况。可以使用distinct关键字消除结果集中的重复行记录,其语法格式为:

其含义是对结果集中的重复行只选择一行,保证行的唯一性。

【例4.15】对employees表只选择员工领导编号emgr、员工所在部门编号deptno,消除结果集中的重复行记录。

SQL代码:

例4.15的执行结果如下所示:

若不使用distinct关键字,在对employees表只选择员工领导编号emgr、员工所在部门编号deptno两个字段时,结果集中有很多重复行记录,如下所示:

6.实训

①查询所有图书的图书编号、图书名称、图书价格。

②查询所有图书的图书名称、图书价格,并使用别名。

③查询所有图书名称,图书价格高于50的替换成“价高”,图书价格低于或等于50的替换成“价低”,并使用别名。

④对book Info表中所有图书的价格都提高10元,并显示图书名称、原图书价格、提价后的价格,使用别名。