本书深入浅出地讲解了Oracle数据库中SQL语句的应用与优化技巧,适合数据库管理员及开发人员阅读学习。
### Oracle数据库SQL语句详解大全
#### 第一章 SELECT查询
本章目标:
- 学会编写基本的SELECT查询语句。
- 掌握如何在查询中使用表达式和运算符。
- 了解如何处理空值。
- 学习如何给查询结果中的字段起别名。
- 熟悉如何进行列的连接操作。
**SELECT查询基本语法:**
```sql
SELECT <列名> FROM <表名>;
```
示例:
- 查询所有员工信息:
```sql
SELECT * FROM s_emp;
```
- 查询特定列(如部门ID和工资):
```sql
SELECT dept_id, salary FROM s_emp;
```
**运用算术表达式:**
例如,计算年薪:
```sql
SELECT salary * 12 AS 年薪 FROM s_emp;
```
**括号与运算优先级:**
改变运算顺序的示例:
未使用括号时,先乘后加:
```sql
SELECT last_name, salary, 12 * salary + 100 FROM s_emp;
```
使用括号改变运算顺序,先加后乘:
```sql
SELECT last_name, salary, 12 * (salary + 100) FROM s_emp;
```
**列别名:**
给查询结果中的字段命名示例:
```sql
SELECT first_name || || last_name AS 姓名 FROM s_emp;
```
**空值处理:**
当`commission_pct`为NULL时,使用NVL函数处理:
```sql
SELECT last_name, salary + NVL(commission_pct, 0) * salary AS 实际工资 FROM s_emp;
```
或直接计算但结果仍可能为NULL:
```sql
SELECT last_name, salary * commission_pct AS 工资 FROM s_emp;
```
**去掉重复行:**
使用DISTINCT关键字去除重复:
单列的去重:
```sql
SELECT DISTINCT name FROM s_dept;
```
多列组合下的去重:
```sql
SELECT DISTINCT dept_id, title FROM s_emp;
```
**小结:**
- 查询表的所有记录:`SELECT * FROM s_emp;`
- 指定查询特定列: `SELECT column1, column2 FROM s_emp;`
- 列命名别名:`SELECT column1 AS alias1 FROM s_emp;`
- 使用NVL函数及字符串连接符处理值和空缺:
```sql
SELECT NVL(column1, default_value), column1 || column2 FROM s_emp;
```
- 去除重复行: `SELECT DISTINCT column1, column2 FROM s_emp;`
---
#### 第二章 条件查询
本章目标:
- 学会使用WHERE子句进行条件过滤。
- 掌握如何使用LIKE、BETWEEN、IN等关键字进行模糊查询或范围查询。
**WHERE条件查询基本语法:**
```sql
SELECT <列名> FROM <表名> WHERE <查询条件表达式>;
```
示例:
根据`last_name`字段筛选:
```sql
SELECT * FROM s_emp WHERE last_name = Smith;
```
多个条件的组合使用AND或OR:
```sql
SELECT * FROM s_emp WHERE salary > 1500 AND dept_id = 50;
```
**使用BETWEEN进行范围查询:**
例如,查找工资在特定区间内员工:
```sql
SELECT * FROM s_emp WHERE salary BETWEEN 1500 AND 2000;
```
**使用IN关键字做多值匹配查询:**
```sql
SELECT * FROM s_dept WHERE region_id IN (1, 3);
```
**LIKE进行模糊查询:**
通配符示例:
```sql
-- 查询姓中含有字母a的员工
SELECT * FROM s_emp WHERE last_name LIKE %a%;
-- 查询姓中第二个字母为a的员工
SELECT * FROM s_emp WHERE last_name LIKE _a%;
```
小结:
- 使用WHERE条件进行查询:`SELECT * FROM s_emp WHERE condition;`
- 用BETWEEN关键字做范围查询: `SELECT * FROM s_emp WHERE salary BETWEEN min AND max;`
- IN用于多值匹配:` SELECT * FROM s_dept WHERE region_id IN (value1, value2);`
- LIKE用于模糊查询:`SELECT * FROM s_emp WHERE last_name LIKE pattern;`