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')

 

posted @ 2017-04-01 15:51  douzujun  阅读(695)  评论(0编辑  收藏  举报