
4.2 简单查询
在了解SELECT语法之后,本节将使用SELECT语句查询表中的数据,例如,获取所有列、获取指定列,为表和列取名以及获取不重复的数据等。
4.2.1 获取所有列
查询数据时可以列举出数据表中的所有列。获取所有列时最常用的方法就是使用“*”符号,该符号可以代替所有的列。语法如下:
SELECT * FROM table_name;
【范例1】
查询emp表中的所有数据,语句如下:
SELECT * FROM emp;
执行上述语句,SQL Developer中的查询结果如图4-1所示。

图4-1 查询emp表中的全部数据
当表中的列不多时,可以不使用“*”符号,而是在SELECT子句后直接跟列名。假设表中只有5列,获取所有列的语法如下:
SELECT 列1,列2,列3,列4,列5 FROM table_name;
【范例2】
下述语句的查询结果与范例1的SELECT语句查询结果一致。
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM emp;
4.2.2 获取指定列
当数据表中的列过多时,开发人员在查询时并不需要全部显示这些列,只需要显示部分列的数据即可。开发人员可以使用SELECT语句指定查询表中的某些列而不是全部,这其实就是投影操作,这些列名紧跟在SELECT关键词之后。当指定多个列时,每个列名用逗号隔开。
假设某个表中包含10列,只需要获取该表中的前三列,语法如下:
SELECT 列1,列2,列3 FROM table_name;
【范例3】
查询emp表中ename列、job列和sal列的数据,语句如下:
SELECT ename, job, sal FROM emp;
执行上述语句,如图4-2所示。从图中可以看出,SELECT语句已经成功执行,并且只显示ename、job和sal列的数据。

图4-2 获取指定列的数据
提示
利用SELECT指定列的方式可以改变列的顺序来显示查询的结果,甚至是可以通过在多个地方指定同一个列来多次显示同一个列。
4.2.3 算术表达式
在使用SELECT语句时,对于数字数据和日期数据都可以使用算术表达式。在SELECT语句中可以使用的算术运算符包括加(+)、减(-)、乘(*)、除(/)和括号。
【范例4】
查询emp表中的ename列和sal列的数据,并对sal列的数据进行调整,所有的员工都增加200元的全勤和300元的餐补。语句如下。
SELECT ename, sal, sal+200+300 FROM emp;
执行上述语句,如图4-3所示。

图4-3 使用算术表达式
4.2.4 为列指定别名
当使用SELECT语句查询数据库时,其查询结果集中的数据列名默认为表中的列名,如范例4的查询结果存在名称为SAL+200+300的列。为了提高查询结果集的可读性,可以在查询结果集中为列指定别名。
为数据表中的列指定别名时需要使用AS关键字,但是该关键字并不是必需的。语法如下:
SELECT 列名 1 [AS] [列别名],列名 2 [AS] [列别名],列名 3 [AS] [列别名] FROM table_name;
【范例5】
为范例4中的SAL+200+300列指定别名,其名称为newsal。以下两行语句实现的效果是一样的。
SELECT ename, sal, sal+200+300 AS newsal FROM emp; SELECT ename, sal, sal+200+300 newsal FROM emp;
注意
如果为列指定的别名中包含一些特殊字符(如空格),那么必须使用双引号将别名括起来。
4.2.5 获取不重复数据
在默认情况下,结果集中包含检索到的所有数据行,而不管这些数据行是否重复出现。有时候,当结果集中出现大量重复的行时,结果集会显得比较庞大,而不会带来有价值的信息。例如,仔细观察图4-1中的job列可以发现,job列的许多内容是重复的。使用以下语句查询job列的数据时会显示重复的结果集。
SELECT job FROM emp;
如果希望删除结果集中重复的行,则需要在SELECT子句中使用DISTINCT关键字。语句如下。
SELECT DISTINCT(job) FROM emp;
【范例6】
为了验证DISTINCT关键字的使用是否有效,下面使用COUNT(job)函数查询job列的记录数,COUNT(DISTINCT(job))函数查询删除重复数据后的记录数。语句和输出结果如下。
SELECT COUNT(job) BEFORE, COUNT(DISTINCT(job)) AFTER FROM emp; BEFORE AFTER ----------- ------------ 13 5
从上述结果中可以看出,如果不使用DISTINCT关键字,那么会检索到13条记录。检索到的记录包含job列重复的数据列,使用DISTINCT关键字之后会检索到5条记录,这是删除重复数据后的总记录数。