Oracle 12c中文版数据库管理、应用与开发实践教程 (清华电脑学堂)
上QQ阅读APP看书,第一时间看更新

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条记录,这是删除重复数据后的总记录数。