SQL语句(十六)实现集合运算、对数据修改、数据表复制
--(1)Union 并运算
select Sname
from Student
UNION
select Tname
From Teacher
--(2)INTERSECT 交运算
--查询学校中与老师重名的学生姓名
select Sname
From Student
INTERSECT --不会重复出现
Select Tname
From Teacher
--另解
select Sname
From Student
Where Sname IN
(Select Distinct Tname
From Teacher)
--(3)找出不选3号课的学生
select distinct Sno
From SC
where Sno not IN
( select Sno
From SC
Where Cno = '3'
)
-- 另解 使用EXCEPT
Select Sno
From SC
EXCEPT
Select Sno
From SC
Where Cno = '3'
二、 数据修改
1. 数据增加
-
INSERT INTO <表名> ([列名])
-
VALUES (<值列表>)
-
实例
-- (1). 插入一条学生记录 (2017005, 张三, 男,21,数学系)
INSERT INTO Student
Values ('2017005', '张三', '男', 21, 'MA')
--没有说明的列,插入NULL
--说明的列数要等于值的个数
--如果在指定了某列不允许为空,则必须插入数据
--例2 出错, Sno is NOT NULL
INSERT INTO Student(Sname)
VALUES ('刘帅')
SELECT *
INTO newTable
From oldTable
-
实例
--例1 创建与Student同结构的表
Select *
Into Stu_tmp
From Student
--注意: new Table 不能存在
--但是有附加命令
-
Insert Into newTable
Select *
From OldTable
-
多行插入
INSERT INTO <表名> [(<> [, <>....] ) ]
子查询
-
实例
--例1 拷贝表
--先在Student表中插入一条数据
INSERT INTO Student
Values ('2017008', '豆子', '男', 20, 'CS', '1997-07-22')
select * from Student
--拷贝表全部数据 到 新表 (已经创建了新表)
Insert Into Stu_tmp Select * From Student
--删除 Stu_tmp
delete From Stu_tmp
--插入, 子查询
Insert Into Stu_tmp(Sno, Sname, Sex, Sage, Sdept)
select Sno, Sname, Sex, Sage, Sdept
From Student
2. 数据修改
--将学生95001的年龄改成22岁
--将所有学生的年龄增加1岁
UPDATE Student
Set Sage = Sage + 1
-- 修改计算机全体人员成绩 为0
Update SC
Set Grade = 0
where Sno in
(Select distinct SC.Sno
From Student, SC
Where Student.Sno = SC.Sno and Sdept = 'CS')