该笔记总结自 《数据库系统概论》4小时期末不挂科期末突击|核心考点|案例解析 的选集3 定义与查询目录SQL语言的特点与功能数据定义模式定义模式删除基本表定义数据类型建立索引修改/删除索引数据查询单表查询连接查询等值连接自然连接复合条件连接自身连接多表连接嵌套查询比较运算ANY(SOME)或ALL谓词EXIST谓词集合查询派生表SQL语言的特点与功能综合统一高度非过程化 (常考)面向集合的操作方式以一种语法结构提供多种组合方式语言简洁易学易用SQL功能数据的定义、查询、操纵、控制数据定义模式定义模式定义语句格式CREATESCHEMA模式名称AUTHORIZATION用户名;如果没有指定模式名称则隐含为用户名例题为用户 Ye 定义一个名为 Hello 的模式CREATESCHEMAHelloAUTHORIZATIONYe;模式删除模式定义语句格式DROPSCHEMA模式名CASCADE|RESTRICT;CASCADE (级联)删除模式的同时把该模式中所有的数据库对象全部删除RESTRICT (限制)如果该模式中定义了数据库对象如表、视图则拒绝该删除语句的执行。例题限制删除 Test 模型DROPSCHEMATestRESTRICT;基本表定义基本表定义语句格式CREATETABLE表名(列名数据类型[列级完整性约束][,列名数据类型[列级完整性约束]]...[,表级完整性约束]);如果完整性约束涉及该表的多个属性列则必须定义在表级上否则既可以定义在列级也可以定义在表级。常见约束NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK练习学生选课表CREATETABLESC(SnoCHAR(8),CnoCHAR(6),GradeINT,PRIMARYKEY(Sno,Cno),FOREIGNKEY(Sno)REFERENCESStudents(Sno),FOREIGNKEY(Cno)REFERENCESCourse(Cno))数据类型数据类型含义CHAR(n), CHARACTER(n)长度为n的定长字符串VARCHAR(n), CHARACTERVARYING(n)最大长度为n的变长字符串CLOB字符串大对象BLOB二进制大对象INT, INTEGER整数(4字节)取值范围[-2147483648, 2147483647]SMALLINT短整数(2字节)取值范围[-32768, 32767]BIGINT大整数(8字节)取值范围[-2 ^ 63, 2 ^ 63 - 1]建立索引CREATE[UNIQUE][CLUSTER]INDEX索引名例CREATEUNIQUEINDEXIdx_StunameONStudents(Sname);CREATEUNIQUEINDEXIdx_SCONSC(SnoASC,CnoDESC);修改/删除索引ALTERINDEX旧索引名RENAMETO新索引名;DROPINDEX索引名例ALTERINDEXstunumberRENAMETOSt_num;DROPINDEXtest;数据查询直接看SQL 十四分钟速成班没错不要怀疑资料库语法比中午决定吃什么还要简单个人学习笔记下面只写与上文不一样的内容或总结性内容单表查询1.查询学生姓名与年龄SELETE Sname,(EXTRACT(YEARFROMCURRENT_DATE)-EXTRACT(YEARFROMSbri))FROMStudents;2.可以像C/C一样用\标记转义字符3.常见聚集函数COUNT, SUM, AVG, MAX, MIN4.WHERE不能接聚集函数SELECTSno,AVG(Grade)FROMStudentsWHEREAVG(Grade)90GROUPBYSno;-- 上面这写法是错的-- 正确写法如下SELECTSno,AVG(Grade)FROMStudentsGROUPBYSnoHAVINGAVG(Grade)90;WHERE作用于元组而HAVING作用于组连接查询等值连接WHERE子句用来连接两表条件为连接条件也称为连接谓词[表名1]列名1比较运算符[表名2]列名2[表名1]列名1BETWEEN[表名2]列名2AND例查询每个学生及其选课情况SELETE Students.*,SC.*FROMStudents,SCWHEREStudents.SnoSC.Sno;自然连接在等值连接中把目标列中重复的属性列去掉则为自然连接数据库中等值连接与自然连接的区别复合条件连接WHERE子句由连接谓词和选择谓词组成的复合条件例查询选修114号考试且成绩在130分以上的所有学生的考号和姓名SELETE Students.kh,SnameFROMStudents,KSWHEREStudents.khKS.khANDKS.id114ANDKS.grade130;自身连接一个表与其自己进行连接需要给表起别名以示区别由于所有属性名都是同名属性因此必须使用别名前缀例查询每一门课的间接先修课即先修课的先修课SELECTFIRST.Cno,SECOND.CpnoFROMCourseFIRST,CourseSECONDWHEREFIRST.CpnoSECOND.CnoANDSECOND.CpnoISNOTNULL;多表连接两个以上的表进行连接例查询每个学生的学号、姓名、选修的课程名及成绩SELECTStudents.Sno,Sname,Cname,CgradeFROMStu,SC,CouWHEREStu.SnoSC.SnoANDSC.CouCou.Cno嵌套查询一个SELECT-FROM-WHERE语句称为一个查询块嵌套查询将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询。SELECTSname/*外层查询或父查询*/FROMStudentWHERESnoIN(SELECTSno/*内层查询或子查询*/FROMSCWHERECno81003);IN起到一个谓词的作用例1查询与张三在同一个学院的学生学号、姓名和主修专业SELECTSno,Sname,SmajorFROMStudentWHERESxyIN(SELECTSxyFROMStudentWHERESname张三);比较运算例找出每个学生超过他选修课程平均成绩的课程号SELECTSno,CnoFROMXWHEREGrade(SELECTAVG(Grade)FROMYWHEREY.SnoX.Sno);ANY(SOME)或ALL谓词类似于高中集合中的 存在 与 全部例查询 非智能科学与技术专业 中比 智能科学与技术专业 任意一个学生年龄小的学生的姓名、出生日期和主修专业SELECTSname,Sbri,SmajorFROMStudentWHERESbriANY(SELECTSbriFROMStuWHERESmajorIS)ANDSmajorIS;EXIST谓词EXISTS谓词带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。若内层查询结果非空,则外层的WHERE子句返回真值若内层查询结果为空,则外层的WHERE子句返回假值NOT EXISTS谓词若内层查询结果非空,则外层的WHERE子句返回假值若内层查询结果为空,则外层的WHERE子句返回真值例查询所有选修了XXX号课程的学生学号SELECTSnoFROMStuWHEREEXISTS(SELECT*FROMSCWHERESnoStu.SnoANDCnoXXX);集合查询并操作UNION交操作INTERSECT差操作EXCEPT参加集合操作要求各查询结果的列数必须相同对应项的数据类型也必须相同例查询2020年第2学期选修了课程81001或81002的学生SELECTSnoFROMSCWHEREStime20202ANDCno81001UNIONSELECTSnoFROMSCWHEREStime20202ANDCno81002派生表子查询不仅可以出现在WHERE子句中还可以出现在FROM子句中子查询生成的临时派生表成为主查询的查询对象。例找出每个学生超过他自己选修课程平均成绩的课程号SELECTSno,CnoFROMSC,(SELECTSno,AVG(Grade)FROMSCGROUPBYSno)ASAVG_SC(AVG_Sno,AVG_grade)WHERESC.SnoAVG_SnoANDSC.GradeAVG_grade;该笔记仅供学习参考无商业用途。如有侵权请联系删除