• 数据库系统概论(超详解!!!)第三节 关系数据库标准语言SQL(Ⅴ)


    1.数据更新

    1.插入数据

    1.插入元组

    语句格式     

    INSERT     

    INTO <表名> [(<属性列1>[,<属性列2 >…)]     

    VALUES (<常量1> [,<常量2>]… );

    功能:将新元组插入指定表中

    INTO子句 :

    指定要插入数据的表名及属性列

    属性列的顺序可与表定义中的顺序不一致

    没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致

    指定部分属性列:插入的元组在其余属性列上取空值

    VALUES子句  :

    提供的值必须与INTO子句匹配: 值的个数, 值的类型

    1. 将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
    2. INSERT
    3. INTO Student (Sno,Sname,Ssex,Sdept,Sage)
    4. VALUES ('201215128','陈冬','男','IS',18);
    5. 将学生张成民的信息插入到Student表中。
    6. INSERT
    7. INTO Student
    8. VALUES ('201215126','张成民','男’,18,'CS');
    9. 插入一条选课记录( '200215128','1 ')。
    10. INSERT
    11. INTO SC(Sno,Cno)
    12. VALUES ('201215128 ',' 1 ');
    13. 关系数据库管理系统将在新插入记录的Grade列上自动地
    14. 赋空值。
    15. 或者:
    16. INSERT
    17. INTO SC
    18. VALUES (' 201215128 ',' 1 ',NULL);

    2.插入子查询结果 (可以一次插入多个元组)

    语句格式:     

    INSERT    

    INTO <表名>  [(<属性列1> [,<属性列2>…  )]      

    子查询;

    INTO子句

    子查询 :SELECT子句目标列必须与INTO子句匹配 (值的个数 ,值的类型)

    1. 对每一个系,求学生的平均年龄,并把结果存入数据库
    2. 第一步:建表
    3. CREATE TABLE Dept_age
    4. ( Sdept CHAR(15) /*系名*/
    5. Avg_age SMALLINT); /*学生平均年龄*/
    6. 第二步:插入数据
    7. INSERT
    8. INTO Dept_age(Sdept,Avg_age)
    9. SELECT Sdept,AVG(Sage)
    10. FROM Student
    11. GROUP BY Sdept;

    关系数据库管理系统在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则

    实体完整性

    参照完整性

    用户定义的完整性: NOT NULL约束, UNIQUE约束 ,值域约束

    2.修改数据

    语句格式    

    UPDATE  <表名>    

    SET  <列名>=<表达式>[,<列名>=<表达式>]…    

    [WHERE <条件>];

    功能 :

    修改指定表中满足WHERE子句条件的元组

    SET子句给出<表达式>的值用于取代相应的属性列

    如果省略WHERE子句,表示要修改表中的所有元组

    1.修改某一个元组的值

    1. 将学生201215121的年龄改为22
    2. UPDATE Student
    3. SET Sage=22
    4. WHERE Sno=' 201215121 ';

    2.修改多个元组的值

    1. 将所有学生的年龄增加1岁。
    2. UPDATE Student
    3. SET Sage= Sage+1;

    3.带子查询的修改语句

    1. 将计算机科学系全体学生的成绩置零。
    2. UPDATE SC
    3. SET Grade=0
    4. WHERE Sno IN
    5. (SELETE Sno
    6. FROM Student
    7. WHERE Sdept= 'CS' );

    关系数据库管理系统在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则

    实体完整性

    主码不允许修改

    用户定义的完整性 : NOT NULL约束,  UNIQUE约束 , 值域约束

    3.删除数据 

    语句格式        

    DELETE        

    FROM     <表名>      

     [WHERE <条件>];

    功能:

    删除指定表中满足WHERE子句条件的元组

    WHERE子句:

    指定要删除的元组

    缺省表示要删除表中的全部元组,表的定义仍在字典中

    1.删除某一个元组的值  

    1. 删除学号为201215128的学生记录。
    2. DELETE
    3. FROM Student
    4. WHERE Sno= 201215128 ';

    2.删除多个元组的值

    1. 删除所有的学生选课记录。
    2. DELETE
    3. FROM SC;

    3.带子查询的删除语句

    1. 删除计算机科学系所有学生的选课记录。
    2. DELETE
    3. FROM SC
    4. WHERE Sno IN
    5. (SELETE Sno
    6. FROM Student
    7. WHERE Sdept= 'CS') ;

    2.练习

    1. /*1)在 Departments中插入一个部门,部门编号为4,部门为销售部。*/
    2. INSERT
    3. INTO Departments(DepartmentID,DepartmentName)
    4. VALUES ('4','销售部');
    5. /*2)自拟数据,对Employee表插入4个元祖,要求都是销售部的员工。*/
    6. INSERT
    7. INTO Employee
    8. VALUES
    9. ('4001','张三','1956-3-12',0,'河南郑州','475012','3345378','zs@henu.edu.cn','4'),
    10. ('4002','王五','1978-11-2',1,'河南新乡','475013','0764311','ww@henu.edu.cn','4'),
    11. ('4003','李四','1998-6-22',0,'云南昆尼','475014','0378652','ls@henu.edu.cn','4'),
    12. ('4004','刘二','1946-10-3',1,'河北廊坊','475015','7765987','le@henu.edu.cn','4');
    13. /*3)将’1003’号员工的地址变为“陕西”。*/
    14. update Employee
    15. set Address='陕西'
    16. where EmployeeID='1003';
    17. /*4)将研发部所有职员的Income涨500元。*/
    18. update Salary
    19. set Income=Income+500
    20. where EmployeeID in (select EmployeeID
    21. from Employee
    22. where DepartmentID in(select DepartmentID
    23. from Departments
    24. where DepartmentName='研发部'));
    25. /*5)将‘2002’号员工的地址变为‘北京’,所属部门改为2*/
    26. update Employee
    27. set Address='北京' ,DepartmentID='2'
    28. where EmployeeID='2002';
    29. /*6)将Salary表中前3个元组的outcome属性值统一修改为1100*/
    30. update top(3) Salary
    31. set OutCome='1100';
    32. update Salary set OutCome=REPLACE(OutCome,1500,1100)
    33. update Salary set OutCome=REPLACE(OutCome,1000,1100)
    34. update Salary set OutCome=REPLACE(OutCome,1200,1100);
    35. /*7)将‘3001’号员工调入财务部。*/
    36. update Employee
    37. set DepartmentID='1'
    38. where EmployeeID='3001';
    39. /*8)在Departments表中新增一名为DepartmentTEL的属性列,并插入正确的数据信息。(DepartmentTEL为8位的部门电话)*/
    40. alter table Departments
    41. add DepartmentTEL char(8)
    42. update Departments set DepartmentTEL='34568765' where DepartmentID='1'
    43. update Departments set DepartmentTEL='34359665' where DepartmentID='2'
    44. update Departments set DepartmentTEL='98648765' where DepartmentID='3'
    45. update Departments set DepartmentTEL='47836865' where DepartmentID='4';
    46. /*11)删除Departments表的‘Note’列。*/
    47. alter table Departments
    48. drop column Note;
    49. /*12)在Salary表中新增一名为Stime的属性列,Stime的值为插入时系统的时间数据*/
    50. alter table Salary
    51. add Stime date not null default getdate()
    52. /*13)删除“王霞”的信息。*/
    53. delete from Salary
    54. where EmployeeID in( select EmployeeID
    55. from Employee
    56. where Name='王霞') ;

  • 相关阅读:
    MD5加密——原理介绍
    在哪里可以找到北京师范大学2023考研真题笔记等复习资料?
    wincc定时器功能介绍
    山东省软件设计大赛-比赛经历
    Python 之 argparse 解析命令行参数模块
    GuavaCache本地缓存(LoadingCache)的使用分析
    netty学习
    【吴恩达机器学习笔记】十四、推荐系统
    nginx知识点-1
    mysql 指定多个IP 绑定监听地址 bind_address
  • 原文地址:https://blog.csdn.net/2201_76115387/article/details/137294064