第4章SQL查询 查询是数据库的基本应用之一。Oracle中的SQL查询语 法,一方面遵循了SQL标准,另一方面又有自己的独特之处。 这些独特之处也使得Oracle中的SQL查询功能更加强大。本章 将详细讲述Oralce中的SQL查询语句,其主要内容包括。 基本查询:主要讲述查询语句及各种子句的使用 子查询:主要讲述如何在查询语句中添加子查询 联合语句:主要讲述多个查询语句之间的集合运算 关联语句:主要讲述多个表/视图之间的关联关系 层次化查询:主要讲述树状结构的查询 通过本章的学习,读者可以对FOracle中的查询语句有清 晰的了解,并对掌握Oracle本身的特色查询
Oracle SQL SQL Oracle SQL Oralce SQL / Oracle Oracle
4.1基本查询 一条查询语句有可能非常复杂,但都是由最简单的基 本查询组成。本节将重,点讲述Oracle中的基本查询语句
Oracle
4.1.1查询命令select 执行查询的命令为select命令,该命令用于在数据源中 捕获最终数据。无论查询语句多么复杂,最外层的select命 令总是最后执行。 【示例4-1】一个简单的查询员工表employees中所有员 工姓名的select语句如下所示。 select employee_name from employees; Oracle首先根据from子句获得数据源的所有记录,如 下所示。 EMPLOYEE ID EMPLOYEE NAME EMPLOYEE POSITION EMPLOYEE AGE EMPLOYEE ADDRESS
select select 4-1 employees select select employee_name from employees; Oracle from EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION EMPLOYEE_AGE EMPLOYEE_ADDRESS
4.1.2指定过滤条件—where子句 where子句用于限定from子句所指定的数据源或者各数 据源进行运算之后形成的结果集合。因此,执行顺序处于 from子句之后,select命令之前。 【示例4-2】针对表employees,现欲获得年龄大于25岁 的所有员工姓名,则可以利用如下$QL语句。 select employee_name from employees where employee_age>25 该$QL语句的执行过程如下。 (1)根据from子句获得数据源,将获得表employees 中所有记录,如下所示。 EMPLOYEE ID EMPLOYEE NAME EMPLOYEE POSITION EMPLOYEE AGE EMPLOYEE ADDRESS
—— where from from select 4-2 employees 25 SQL select employee_name from employees where employee_age>25 SQL 1 from employees EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION EMPLOYEE_AGE EMPLOYEE_ADDRESS
4.1.3获取唯一记录一distinct 在示例4-3中,我们会发现重复记录。这表明,员工领 取的工资在大多数月份中可能都是相同的。为了剔除其中的 重复记录,更清晰的展现员工工资状况,可以利用distinct 关键字。 【示例4-4】获取员工唯一工资状况的SQL语句如下所 示。 SQL>select distinct e.employee_name,s.salary 2 from employees e,salary s 3 where e.employee_id s.employee_id;
—— 4-3 distinct 4-4 SQL SQL> select distinct e.employee_name, s.salary 2 from employees e, salary s 3 where e.employee_id = s.employee_id;