数据处理
其他DML语句:
- INSERT
①INSERT INTO table [(column [, column…])]
VALUES (value [, value…]);
使用这种语法一次只能向表中插入一条数据。
不能使用这种方式同时向表中插入多条数据
②通过创建脚本的方式
如:INSERT INTO departments
(department_id, department_name, location_id)
VALUES (&department_id, ‘&department_name’,&location);
和C语言中取地址符类似
③INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE ‘%REP%’;
从其他表中拷贝数据,可以根据WHERE子句来确定是否插入数据,以及插入什么数据
- UPDATE
UPDATE table
SET column = value [, column = value, …]
[WHERE condition];
可以一次更新多条数据:同样的用WHERE子句来控制
同样的也可以在UPDATE语句中使用子查询
- DELETE
DELETE FROM table
[WHERE condition];
同样的也可以在DELETE语句中使用子查询
- 事务控制
事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。
组成:
一个或多个DML 语句
一个 DDL(Data Definition Language – 数据定义语言) 语句
执行:
以第一个 DML 语句的执行作为开始
以下面的其中之一作为结束:
COMMIT 或 ROLLBACK 语句
DDL 语句(自动提交)
用户会话正常结束
系统异常终止
事务控制:
COMMIT
ROLLBACK
SAVEPOINT(ROLLBACK TO SAVEPOINT)
约束
约束是一种规定
**NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK**
创建表的同时可以创建约束
创建表后可以修改约束
可以在表级或列级定义约束
可以通过数据字典来查看约束
表级约束和列级约束:
- 作用范围:
①列级约束只能作用在一个列上
column [CONSTRAINT constraint_name] constraint_type,
②表级约束可以作用在多个列上(当然表级约束也
可以作用在一个列上)
column,…
[CONSTRAINT constraint_name] constraint_type
(column, …),
- 定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
- 非空(not null) 约束只能定义在列上
UNIQUE :
唯一约束,允许出现多个空值:NULL。
FOREIGN KEY:
FOREIGN KEY: 在表级指定子表中的列
REFERENCES: 标示在父表中的列
ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空): 子表中相应的列置空
CHECK:
可以理解为自定义约束
约束的添加和删除
- 添加约束
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
添加或删除约束,但是不能修改约束
有效化或无效化约束
添加 NOT NULL 约束要使用 MODIFY 语句
- 删除约束
ALTER TABLE employees
DROP CONSTRAINT emp_manager_fk;
- 无效化约束
ALTER TABLE employees
DISABLE CONSTRAINT emp_emp_id_pk;
Table altered.
- 激活约束
ALTER TABLE employees
ENABLE CONSTRAINT emp_emp_id_pk;
查询约束
- 查询约束:
查询数据字典视图 USER_CONSTRAINTS
SELECT constraint_name, constraint_type,
search_condition
FROM user_constraints
WHERE table_name = ‘EMPLOYEES’;
- 查询定义约束的列:
查询数据字典视图 USER_CONS_COLUMNS
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = ‘EMPLOYEES’;
练习的话,我会单独写一篇。因为学sql主要就是的练,最难的部分就是子查询,需要多练,这里给大家说一下我认为比较高效的联系方法,就是一定要注意书写格式,例如:
--查询平均工资最低的部门信息和该部门的平均工资
SELECT d.*, (SELECT avg(salary)
FROM employees
WHERE department_id = d.department_id)
FROM departments d
WHERE department_id = (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING avg(salary) = (
SELECT min(avg(salary))
FROM employees
GROUP BY department_id
)
)
这样的书写格式方便分析