基础 SQL 语法与操作:Oracle SQL 入门教程
1. SQL 基础
SQL(结构化查询语言)是用于与数据库交互的标准语言。在 Oracle 数据库中,SQL 用来定义数据库结构、操控数据以及查询数据。SQL 的基本功能包括数据查询、数据更新、数据插入和数据删除。
2. SELECT 查询语句
SELECT
是 SQL 中最常用的命令,用来从数据库中检索数据。
示例:
SELECT first_name, last_name, email FROM employees;
- 该查询从
employees
表中获取first_name
、last_name
和email
字段的数据。
使用 DISTINCT 去重:
SELECT DISTINCT department_id FROM employees;
- 获取不同的部门 ID。
3. WHERE 子句与逻辑运算符
WHERE
子句用于指定查询条件,常与逻辑运算符结合使用。
常用的逻辑运算符:
AND
:两个条件都必须为真OR
:至少有一个条件为真NOT
:条件不成立时为真
示例:
SELECT first_name, last_name
FROM employees
WHERE department_id = 10 AND salary > 5000;
- 查询部门 ID 为 10 且工资大于 5000 的员工。
4. 常用的 SQL 聚合函数
SQL 提供了多种聚合函数,用于计算数据集的总和、平均值等。
- COUNT:返回结果集中的行数
- SUM:返回某列数值的总和
- AVG:返回某列数值的平均值
- MIN:返回某列的最小值
- MAX:返回某列的最大值
示例:
SELECT COUNT(*), AVG(salary), MAX(salary), MIN(salary)
FROM employees;
- 计算员工总数、平均工资、最高工资和最低工资。
5. 数据操控
- INSERT 语句:向表中插入数据
INSERT INTO employees (first_name, last_name, email, hire_date, salary)
VALUES ('John', 'Doe', 'john.doe@example.com', SYSDATE, 6000);
- UPDATE 语句:更新表中的数据
UPDATE employees
SET salary = 7000
WHERE employee_id = 101;
- DELETE 语句:删除表中的数据
DELETE FROM employees
WHERE employee_id = 101;
6. 数据验证与约束
在数据库设计中,约束用于确保数据的完整性。
- PRIMARY KEY:主键约束,用于唯一标识表中的每一行。
- FOREIGN KEY:外键约束,用于确保数据之间的关系。
- UNIQUE:确保列中的每个值都是唯一的。
- CHECK:确保列的值满足特定条件。
示例:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
salary DECIMAL(10, 2) CHECK (salary > 0)
);
- 在
employees
表中,employee_id
为主键,salary
列确保大于零。
7. 数据定义与管理
- 创建表:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE
);
- 修改表:使用
ALTER TABLE
添加或修改列
ALTER TABLE employees ADD department_id INT;
- 删除表:
DROP TABLE employees;
- 创建视图:
CREATE VIEW emp_view AS
SELECT first_name, last_name, department_id
FROM employees
WHERE salary > 5000;
8. 索引与约束
- 索引:加速数据检索的结构
CREATE INDEX idx_employee_name ON employees (first_name, last_name);
- 约束:确保数据的完整性(如上述 PRIMARY KEY、FOREIGN KEY)。
9. 连接与子查询
- 内连接(INNER JOIN):返回两个表中满足连接条件的记录
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;
- 外连接(LEFT JOIN, RIGHT JOIN):返回一个表的所有记录,以及另一个表中匹配的记录。如果没有匹配,另一个表的列返回 NULL。
SELECT e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id;
- 自连接(Self JOIN):连接同一个表,用别名区分不同的实例。
SELECT e1.first_name AS Employee, e2.first_name AS Manager
FROM employees e1
LEFT JOIN employees e2
ON e1.manager_id = e2.employee_id;
- 交叉连接(CROSS JOIN):返回两个表的笛卡尔积,通常用于生成所有可能的组合。
SELECT e.first_name, p.product_name
FROM employees e
CROSS JOIN products p;
10. 子查询与关联子查询
- 子查询:查询中嵌套的查询,返回单一结果
SELECT first_name, last_name
FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Sales');
- 关联子查询:子查询与外部查询相关联
SELECT first_name, last_name, salary
FROM employees e
WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id);
这些基本的 SQL 语法和操作为你提供了 Oracle 数据库的基础,后续的学习中可以根据需要进一步深入探讨查询优化、性能调优等内容。