Sql Certificate 简明教程
SQL - The SQL SELECT Statement
Retrieving data using the SQL Select Statement
SQL 是一种综合性的数据库语言。SQL,发音为 Sequel 或 S-Q-L,是一种用于非过程化查询关系数据库的计算机编程语言。使用 SQL 从数据库中提取信息时,这被称为查询数据库。
关系数据库是通过使用关系数据库管理系统 (RDBMS) 实现的。RDBMS 执行上述 DBMS 软件的所有基本功能,以及使关系模型更易于理解和实现的大量其他功能。RDBMS 用户通过使用特殊的数据操纵语言来操纵数据。数据库结构是通过使用数据定义语言来定义的。系统用户为了存储和检索数据而执行的命令可以通过键入命令通过一个具有 RDBMS 界面或使用某种图形化界面的方式来输入终端。然后 DBMS 处理这些命令。
Capabilities of the SELECT Statement
通过适当且有效地使用 SQL 从数据库中检索数据。关系理论中的三个概念涵盖了 SELECT 语句的功能:投影、选择和链接。
-
投影:投影操作仅从表中选择特定列(字段)。结果表具有可用列的子集,可以包括从单个列到所有可用列的任何内容。
-
选择:选择操作选择表(关系)中满足选择条件的行的子集(记录)。从完整结果集中选择行的能力称为“选择”。它涉及条件筛选和数据分期。子集的范围可以从没有行(如果没有任何行满足选择条件),到表中的所有行。
-
链接:链接操作根据一个或多个公共列值将来自两个或更多个表的数据合并在一起。链接操作使信息系统用户能够处理表之间存在的关联。链接操作非常强大,因为它允许系统用户调查设计数据库时可能无法预料到的数据元素之间的关联关系。
考虑上述表结构。从 EMPLOYEES 表中提取第一姓名姓名、部门 ID 和单个员工的工资是投影。从 EMPLOYEES 表中提取工资低于 5000 的员工详细信息是选择。通过链接 EMPLOYEES 和 DEPARTMENTS 来提取员工的第一姓名、部门姓名是链接。
Basic SELECT statement
选择语句的基本语法如下。
SELECT [DISTINCT | ALL] {* | select_list}
FROM {table_name [alias] | view_name}
[{table_name [alias] | view_name}]...
[WHERE condition]
[GROUP BY condition_list]
[HAVING condition]
[ORDER BY {column_name | column_# [ ASC | DESC ] } ...
SELECT 子句是必须的,并且执行关系投影操作。
FROM 子句也是必须的。它标识从中检索结果表中显示的列数据的表或视图中的一个或多个表。
WHERE 子句是可选的,并且执行关系选择操作。它指定要选择哪些行。
GROUP BY 子句是可选的。它按 SELECT 子句中列出的一个或多个列名将数据组织到组中。
可选的 HAVING 子句设置有关在结果表中应包含哪些组的条件。这些组由 GROUP BY 子句指定。
ORDER BY 子句是可选的。它按升序或降序对查询结果按一列或多列进行排序。
Arithmetic expressions and NULL values in the SELECT statement
可以使用列名、操作符和常量值来创建算术表达式,以将表达式嵌入到 SELECT 语句中。适用于列的操作符取决于该列的数据类型。例如,算术运算符不适用于字符文本值。例如,
SELECT employee_id, sal * 12 ANNUAL_SAL
FROM employees;
上面的查询包含算术表达式 (sal * 12) 以计算每位员工的年薪。
Arithmetic operators
运算符对列(称为运算数)进行操作,以产生不同的结果。如果表达式中有多个运算符,则运算顺序由运算符优先级决定。以下是优先级的基本规则 -
-
乘法和除法发生在加法和减法之前。
-
优先级相同的运算符从左到右计算。
-
使用括号来覆盖运算符的默认行为。
下表显示了在这种情况下运算符的优先级。优先级级别 运算符符号 操作
Description Operator Precedence
Addition + Lowest
Subtraction - Lowest
Multiplication * Medium
Division / Medium
Brackets ( ) Highest
检查下面的查询 (a)、(b) 和 (c)
-
SQL> SELECT 2*35 FROM DUAL;
-
SQL> SELECT salary + 1500 FROM employees;
-
SQL> SELECT first_name, salary, salary + (commission_pct* salary) FROM employees;
查询 (a) 乘以两个数字,而 (b) 显示向所有员工的工资增加 1500 美元。查询 (c) 显示了向员工工资中添加佣金组件。根据优先级,将首先计算佣金,然后将其添加到工资中。
Column Alias
别名用于在显示期间重命名列或表达式。列或表达式的别名显示为查询输出中的标题。为 SELECT 查询中的长表达式提供有意义的标头非常有用。默认情况下,别名以大写字母形式显示在查询输出中,不含空格。如果要覆盖此行为,必须用双引号将别名括起来,以保留别名名称中的大小写和空格。
SELECT price * 2 as DOUBLE_PRICE, price * 10 "Double Price"
FROM products;
DOUBLE_PRICE Double Price
------------ ------------
39.9 39.9
60 60
51.98 51.98
Concatenation operators
连接运算符可用于在 SELECT 查询中联接两个字符串值或表达式。双竖线符号用作字符串连接运算符。它仅适用于字符和字符串列值,生成一个新的字符表达式。示例
SQL> SELECT 'ORACLE'||' CERTIFICATION' FROM dual;
上述查询显示了两个字符文本值连接。
Literals
SELECT 语句中数据库中不存储的任何硬编码值称为文本值。它可以是数字、字符或日期值。字符值和日期值必须用引号括起来。考虑以下 SQL 查询。SQL 查询中使用不同数据类型的文本值的示例。
以下查询使用两个字符文本值将它们连接在一起。
SQL> SELECT 'ORACLE'||' CERTIFICATION' FROM DUAL
以下查询使用字符文本值以美观方式打印员工的薪水。
SQL> SELECT first_name ||'earns'|| salary||' as of '|||sysdate
FROM employees
Quote Operator
引用运算符用于指定您自己的引号分隔符。您可以根据数据选择合适的分隔符。
SELECT department_name|| ' Department' ||q'['s Manager Id: ]'|| manager_id
FROM departments;
NULL
如果某个列没有确定的值,则将其视为 NULL。NULL 值表示未知或不可用。对于数字值,它不是零;对于字符值,它不是空格。
包含 NULL 值的列可在 SELECT 查询中选择,并且可以作为算术表达式的部分。使用 NULL 值的任何算术表达式都将生成 NULL。出于此原因,必须使用 Oracle 提供的 NVL 或 NULLIF 等函数指定其备用值来以不同的方式处理具有 NULL 值的列。
SQL> SELECT NULL + 1000 NUM
FROM DUAL;
NUM
--------