(一)、集合运算(交、并、补)
--(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 = ''
) -- 另解 使用EXCEPT
Select Sno
From SC
EXCEPT
Select Sno
From SC
Where Cno = ''
二、 数据修改
1. 数据增加
INSERT INTO <表名> ([列名])
VALUES (<值列表>)
实例
-- (1). 插入一条学生记录 (2017005, 张三, 男,21,数学系)
INSERT INTO Student
Values ('', '张三', '男', , '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 ('', '豆子', '男', , '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 + -- 修改计算机全体人员成绩 为0
Update SC
Set Grade =
where Sno in
(Select distinct SC.Sno
From Student, SC
Where Student.Sno = SC.Sno and Sdept = 'CS')