5.含有子查询的DML语句
在数据操作语言中可以使用子查询语句,完成操作过程较复杂,功能较强的DML操作。
(1)插入数据INSERT语句中使用子查询
将某表的数据查询子集插入到另一个表中。
语句格式:INSERT INTO <table_name> [(column_name [, column_name, ...])] subquery
--subquery用于指定表提供数据的子查询
--建立计算机专业学生students_computer表:
CREATE TABLE students_computer(
student_id NUMBER(5) CONSTRAINT student_computer_pk PRIMARY KEY,
monitor_id NUMBER(5),
name VARCHAR2(10) NOT NULL,
sex VARCHAR2(6),
dob DATE,
specialty VARCHAR2(10)
);
INSERT INTO students_computer
(SELECT * FROM students WHERE specialty = '计算机'); --默认选定指定表或视图的所有列
(2)更新数据UPDATE语句中使用子查询
利用子查询结果修改表中的数据。
语句格式:UPDATE <table_name> SET [(column_name [, column_name, ...])] = subquery
注意:column_name指定的列的数据类型和个数,必须要与子查询列的数据类型和个数完全匹配。
UPDATE teachers SET bonus =
(SELECT AVG(bonus) FROM teachers)
WHERE bonus IS NULL;
(3)删除数据DELETE语句中使用子查询
语句格式:DELETE FROM <table_name> WHERE [(column_name [, column_name, ...])] = subquery
--subquery结果作为删除表中数据的条件。
DELETE FROM teachers
WHERE wage > (SELECT 1.1*AVG(wage) FROM teachers);