Oracle 数据库中常用的操作,包括增删改查
、同义词创建
、合并更新
、建表
、建索引
、聚合查询
和多表查询
。通过这些操作,可以有效地管理和查询 Oracle 数据库中的数据,日常工作中也会事半功倍。
增删改查
- 插入数据(INSERT)
INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id, salary)
VALUES (1001, 'vincent', 'ding', '[email protected]', TO_DATE('2024-08-18', 'YYYY-MM-DD'), 'IT_PROG', 60000);
- 更新数据(UPDATE)
- 如果更新多个字段,用 逗号 ,分开
UPDATE employees
SET email='[email protected]',salary = salary * 1.10 -- 给所有IT员工加薪 50% ,哈哈哈哈哈
WHERE job_id = 'IT_PROG';
- 删除数据(DELETE)
DELETE FROM employees
WHERE employee_id = 1001;
- 查询数据(SELECT)
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary > 50000
ORDER BY salary DESC;
创建同义词(SYNONYM)
CREATE SYNONYM emp_syn FOR employees;
emp_syn
是给 employees 表创建的同义词。- 创建后,可以使用
emp_syn
来替代 employees 进行查询。
合并更新(MERGE)
MERGE
语句用于根据条件决定是执行INSERT
还是UPDATE
操作。
MERGE INTO employees e
USING (SELECT 1002 AS employee_id, 'Jane' AS first_name, 'Smith' AS last_name, '[email protected]' AS email, 'IT_PROG' AS job_id FROM dual) src
ON (e.employee_id = src.employee_id)
WHEN MATCHED THEN
UPDATE SET e.first_name = src.first_name, e.last_name = src.last_name, e.email = src.email
WHEN NOT MATCHED THEN
INSERT (employee_id, first_name, last_name, email, hire_date, job_id)
VALUES (src.employee_id, src.first_name, src.last_name, src.email, SYSDATE, src.job_id);
target_table
:目标表employees e
,数据将被更新或插入到该表中。source_table
:源表src
,提供要合并的数据。ON
:指定用于匹配的条件。WHEN MATCHED
:当 ON 条件匹配时执行 UPDATE 操作。WHEN NOT MATCHED
:当 ON 条件不匹配时执行 INSERT 操作。
创建表(CREATE TABLE)
CREATE TABLE employees (
employee_id NUMBER(6) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25) UNIQUE,
hire_date DATE DEFAULT SYSDATE,
job_id VARCHAR2(10) NOT NULL,
salary NUMBER(8, 2)
);
datatype
:列的数据类型,如VARCHAR2
,NUMBER
,DATE
等。DEFAULT expr
:指定列的默认值。constraint
:列级约束,如NOT NULL
,UNIQUE
,PRIMARY KEY
等。table_constraint
:表级约束,如PRIMARY KEY
,FOREIGN KEY
,CHECK
等。
创建索引(CREATE INDEX)
CREATE INDEX idx_emp_last_name ON employees(last_name);
idx_emp_last_name
是创建在employees
表last_name
列上的索引
删除索引(DROP
)
DROP INDEX index_name;
- 删除索引不会影响表中的数据:删除索引只会移除索引结构,数据仍然保留在表中。
- 删除唯一索引的影响:如果删除的是唯一索引(UNIQUE INDEX),则相应的唯一性约束也将被删除。
- 执行权限:你必须具有索引所在模式的所有者权限或者具有 DROP ANY INDEX 的权限才能删除索引。
- 性能影响:删除索引后,相关查询可能会变慢,特别是那些之前依赖于该索引的查询。
查看索引
SELECT index_name
FROM user_indexes
WHERE table_name = 'TABLE_NAME';
聚合查询
SELECT job_id, COUNT(*) AS employee_count, AVG(salary) AS average_salary
FROM employees
GROUP BY job_id
HAVING AVG(salary) > 50000;
GROUP BY
用于将数据按 job_id 分组。HAVING
子句用于过滤分组后的数据。
多表查询
- 内连接(INNER JOIN)
SELECT e.employee_id, 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)
SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
- 右连接(RIGHT JOIN)
SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;
- 全连接(FULL JOIN)
SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
FULL JOIN departments d ON e.department_id = d.department_id;
总结
- 创建同义词 (
SYNONYM
):用于创建数据库对象的别名,简化访问。 MERGE
语句:用于基于匹配条件在目标表中进行更新或插入操作。- 创建表 (
CREATE TABLE
):定义数据库表及其列和约束条件。