欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年知识点SQL语句学习及详细总结2 .docx

    • 资源ID:12954882       资源大小:359.11KB        全文页数:29页
    • 资源格式: DOCX        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年知识点SQL语句学习及详细总结2 .docx

    学习资料收集于网络,仅供参考一. 数据库简介和创建1. 系统数据库在安装好 SQL SERVER后,系统会自动安装 5 个用于保护系统正常运行的系统数据库:(1) )master :记录了 SQL SERVER实例的全部系统级消息,包括实例范畴的元数据(如登录帐号)、端点、链接服务器和系统配置设置;(2) ) msdb :供 SQL SERVER代理服务调度报警和作业以及记录操作员的使用,储存关于调度报警、作业、操作员等信息;(备份仍原时)(3) ) model :SQL SERVER实例上创建的全部数据库的模板;(4) ) tempdb :暂时数据库,用于储存暂时对象或中间结果集,为数据库的排列等操作供应一个暂时工作空间;(每次启动都会重新创建)(5) ) Resource :一个只读数据库,包含了 SQLSERVER的全部系统对象;(隐匿的数据库)2. 数据库的组成2.1 数据文件(1) )主要数据文件:扩展名为 .mdf,每个数据库有且只能有一个;(2) )次要数据文件:扩展名为 .ndf, 可以没有或有多个;2.2 日志文件扩展名为 .ldf,用于存放复原数据库的全部日志信息;2.3 数据的储备安排(1) )数据文件和日志文件的默认存放位置为:Programe FilesMicrosoft SQL ServerMSSQL.1MSSQLData文件夹;(2) )数据的储备安排单位是数据页;一页表是一块8KB 的连续磁盘空间;(3) )页是储备数据的最小空间安排单位,页的大小打算了数据库表中一行数据的最大大小;学习资料3. SQL 语句 数据库操作( 1)创建数据库CREATE DATABASE database_name二. SQL 基础SQL (StructuredQuery Language ,结构化查询语言)是用户操作关系数据库的通用语言;1. SQL 功能概述2. 系统供应的数据类型2.1 数值数据类型储备数据类型说明空间bitbit 数据类型是整型,其值只能是0 、1 或空值;这种数据类型用于储备只有两种可1 字能值的数据,如 Yes或 No 、True或 False、On或 Off. (很省空间的一种数据节类型,假如能够满意需求应当尽量多用;)tinyinttinyint数据类型能储备从0 到 255之间的整数;它在你只准备储备有限数目的数1 字值时很有用;节smallintsmallint数据类型可以储备从 - 2 的 15 次幂 -32768 到 2 的 15 次幂 32767 之间的整数; 这种数据类型对储备一些常限定在特定范畴内的数值型数据特别有用;(如2 字果 tinyint 类型太单调不能满意您的需求,您可以考虑用 smallint类型, 由于这个类节型相对也是比较安全的,不接受恶意脚本内容的嵌入;)intint数据类型可以储备从 - 2 的 31 次幂 -2147483648到 2 的 31 次幂 21474834 个647 之间的整数;储备到数据库的几乎全部数值型的数据都可以用这种数据类型字节numeric( p,s ) 或decimalp,s数据类型能用来储备从 -10 的 38 次幂 -1 到 10 的 38 次幂 -1 的固定精度和范畴的数值型数据;使用这种数据类型时,必需指定范畴和精度; 范畴是小数点左右所能储备的数字的总位数;精度是小数点右边储备的数字的位数最多17 个字节2.2 一般编码字符串类型数据类型说明数据类型说明charnchar 数据类型用来储备指定长度的定长非统一编码型的数据,n 表示字符串的最大长度,取值范畴为 18000(如实际字符串控件小于n, 系统自动在后面补空格)varcharn可变长度的字符串类型,n 表示字符串的最大长度,取值范畴为18000 ;texttext数据类型用来储备大量的非统一编码型字符数据;这种数据类型最多可以有231-1 或 20亿个字符 .char和 varchar的区分:如某列数据类型为 varchar20 ,存字符串 ”Jone时”,只占用 4 个字节,而 char( 20)会在为填满的空间中填写空格;所以,varchar 类型比 char 类型更节约空间,但它的开销会大一些,处理速度也慢一些;因此,n 值比较小(小于 4), 用 char 类型更好些;2.3 统一编码字符串类型( Unicode)数据类型说明nchar数据类型用来储备定长统一编码字符型数据;统一编码用双字节结构来储备每个字符,而ncharn不是用单字节 一般文本中的情形;它答应大量的扩展字符;此数据类型能储备4000 种字符, 使用的字节空间上增加了一倍.nvarcharnnvarchar数据类型用作变长的统一编码字符型数据;此数据类型能储备4000 种字符,使用的字节空间增加了一倍 .ntext最多可储备 2 的 30 次方 -1 将近 10 亿个字符三. SQL 数据操作语言1. 数据查询语句1.1 查询语句的基本结构SELECT< 目标列名序列 > -需要哪些列From < 表名 >-来自哪张表WHERE< 行挑选条件 >GROUPBY < 分组依据列 > HAVING < 组>ORDERBY < 排序依据列 >SELECT 子句用于指定输出的字段; FROM 子句用于指定数据的来源; WHERE 子句用于指定数据的挑选条件;GROUP BY 子句用于对检索到的记录进行分组; HAVING子句用于指定组的挑选条件; ORDER BY子句用于对查询的结果进行排序;以上子句中, SELECT子句和 FROM 子句是必需的,其它是可选的;1.2 单表查询1.2.1 挑选表中如干列(1) )查询指定的列SELECT 列名 FROM表名1例子 :SELECT Sname,Sno FROM Student(2) )查询全部列SELECT*FROM表名1例子 :SELECT * FROM Student(3) )查询经过运算的列SELECT 列名 FROM表名1例子 :SELECT Sname,yeargetdata - yearBirthdate FROM Student1.2.2 挑选表中的如干元祖(1) )排除取值相同的行: DISTINCTSELECT DISTINCT SnoFROM表名1例子 :SELECT DISTINCT Sno FROM Student(2) )查询满意条件的元祖查询条件谓 词比较= 、>、>= 、<=、<、<> 、.=、.> 、.<确定范畴BETWEENAND、 NOT BETWEENAND确定集合IN、NOT IN查询条件谓 词字符匹配LIKE、NOT LIKE空值IS NULL 、IS NOT NULL多重条件(规律谓词)AND 、ORa. 比较大小例子 :SELECT Sname FROM Student WHERE yeargetdata - yearBirthdate< 20b. 确定范畴BETWEEN AND和 NOT BETWEEN AND可用于查找属性值在或不在指定范畴;列名 |表达式 | NOT BETWEEN 下限值 AND 上限值1BETWEEN AND代表的范畴是 在上限值和下限值之间( 包括边界值),即为true ;NOTBETWEEN AND代表的范畴是 不在上限值和下限值之间( 不包括 边界值),即为 true;(如判定值为边界值时,为false )例子 :SELECT Sno,Cno FROM SC WHERE Grade BETWEEN 80 AND 90此查询等价于: SELECT Sno,Cno FROM SC WHERE Grade >= 80 AND Grade <= 90例子 :SELECT Sno,Cno FROM SC WHERE Grade NOT BETWEEN 80 AND 90此查询等价于: SELECT Sno,Cno FROM SC WHERE Grade < 80 OR Grade > 90c. 确定集合IN 运算符的含义:当列中的值和集合中的 某个常量值相等时,结果为True ;NOT IN 运算符的含义:当列中的值和集合中的 全部常量值都不相等时,结果为True ;例子 :SELECT Sno FROM Student WHERE Dept IN '信息治理系 ','运算机系 '此查询等价于: SELECT Sno FROM Student WHERE Dept = '信息治理系 ' OR Dept = ' 运算机系 '例子 :SELECT Sno FROM Student WHERE Dept NOT IN '信息治理系 ','运算机系 '此查询等价于: SELECT Sno FROMStudentWHEREDept.=' 信息治理系 'AND Dept.= ' 运算机系 'd. 字符串匹配Like 运算符用于查找指定列中与匹配串匹配的元祖;列名 NOTLIKE < 匹配串 >通配符含义_(下划线)匹配任意一个字符%(百分号)匹配 0 个或多个字符匹配 中的任意一个字符;如abcd 表示匹配 abcd 其中任何一个,如是连续的,可以用- 表示不匹配 中的任意一个字符;如 abcd 表示不匹配 abcd 其中任何一个,如是连续的,可以用例子 : 查询姓 “张”的同学具体信息 SELECT*FROMStudentWHERESnameLIKE' 张%' 查询不姓 “张”的同学具体信息 SELECT*FROMStudentWHERESnameNOT LIKE' 张%'(查询姓 “张 ”、“李”的同学具体信息)SELECT*FROMStudentWHERESnameLIKE'张李 %'(查询名字的其次个字为“小” 或 “大”的同学具体信息)SELECT*FROMStudentWHERESnameLIKE'_小大 %'e. 涉及空值的查询空值( NULL )在数据库中有特别含义,表示当前不确定或未知的值;判定是否为 NULL 时,不行用一般的比较运算符,需用IS NULL例子 :SELECT Sno FROM Student WHERE Grade IS NULL1.2.3 对查询结果进行排序将查询结果依据指定的次序显示; ASC 表示按列值 升序排列(从上往下,值从大到小);DESC 表示按列值 降序排列(从上往下, 值从小到大) ;默认为 ASC ;ORDERBY < 列名 > ASC| DESC例子 :SELECT Sno,Grade FROM SC ORDER BY Grade DESC1.2.4 使用聚合函数统计数据聚合函数也称为统计函数或集合函数, 作用是对一组值进行运算并返回一个统计结果;聚合函数含义COUNT*统计表中元祖的个数聚合函数含义COUNTDISTINCT<列名 >统计本列的非空列值个数SUM< 列名 >运算列值的和值(必需是数值型列)AVG< 列名 >运算列值的平均值(必需是数值型列)MAX< 列名 >运算列值的最大值MIN< 列名 >运算列值的最小值上述函数除 COUNT*外,其它函数在运算过程中均忽视NULL 值(统计同学总人数)SELECT COUNT*FROMStudent(统计 “001 ”学号同学的考试平均成果)SELECT AVGGradeFROMSC WHERESno ='001'(查询 “C001”号课程考试成果的最高分和最低分)SELECT MAXGrade最高分 , MINGrade最低分 FROMSC WHERECno ='C001'聚合函数不能显现在 WHERE 子句中!1.2.5 对数据进行分组统计需要先对数据进行分组,然后再对每个组进行统计;分组子句GROUP BY ;在一个查询语句中,可以用多个列进行分组;分组子句跟在 WHERE 子句的后面:GROUPBY <分组依据列 > ,.n HAVING <组挑选条件 >(1) )使用 GROUP BY子句(统计每门课程的选课人数,列出课程号和选课人数)SELECTCnoas课程号 , COUNTSnoas选课人数 From SCGroupBY Cno(统计每个同学的选课门数和平均成果)SELECTSno学号 , COUNT *选课门数 ,AVGGrade平均成果 From SC Group BY S no带 WHERE子句的分组(统计每个系的女生人数)SELECT Dept, COUNT*女生人数 From StudentWhere Sex =' 女'GroupBY Dep t(2) )使用 HAVING子句HAVING 子句用于对分组后的统计结果再进行挑选,它的功能与WHERE 子句类似,它用于组而不是单个记录;在HAVING 子句中可以使用聚合函数,但在WHERE 子句中不能,通常与GROUP 子句一起使用;(查询选课门数超过3 门的同学的学号和选课门数)SELECTSno学号 , COUNT *选课门数 ,AVGGrade平均成果 From SC Group BY S no HAVING COUNT*>3(3) ) WHERE、GROUP BY、HAVING的作用及执行次序WHERE 子句用于挑选 FROM 子句中指定的数据所产生的行数据;GROUP BY 子句用于对经 WHERE 子句挑选后的结果数据进行分组;HAVING 子句用于对 分组后 的统计结果再进行挑选;可以分组操作之前应用的挑选条件,在 WHERE 子句中指定它们更有效,这样可以削减参加分组的数据行;在 HAVING 子句中指定的挑选条件应当是那些必需在执行分组操作之后应用的挑选条件;(查询运算机系和信息治理系每个系的同学人数)第一种:SELECT Dept,' 信息治理系 'COUNT*FROMStudentGROUPBY DeptHavingDeptin ' 运算机系 ' ,其次种:SELECTDept,COUNT*FROMStudentWHEREDeptin ' 运算机系 ' , ' 信息治理系 ' GROUP BY Dept以上例子比较: 第一种是依据系分组好了之后, 只实行全部系中的两个系, 明显效率不高;而其次种是先进行 WHERE 挑选条件之后,再进行 GROUP BY 运算,显示更好;1.3 多表连接查询如一个查询同时涉及到两张或以上的表,就称为连接查询;1.3.1 内连接使用内连接时, 假如两个表的相关字段满意条件, 就从两个表中提取数据组成新的记录;FROM表 1 INNERJOIN表 2 ON< 连接条件 >1留意:连接条件中的连接字段必需是可比的,必需是语义相同的列;(查询同学及选课的具体信息)SELECT*FROMStudentINNER JOIN SCONStudent.Sno = SC.Sno(查询运算机系同学的选课情形,列出该同学的名字、所修课程号、成果)-行挑选条件SELECTSname,Cno,GradeFROMStudentINNER JOIN SC ONStudent.Sno = SC.Sn o WHEREDept =' 运算机系 '(统计每个系的平均成果)-分组的多表查询SELECT Dept,AVGGradeAS AverageGradeFROMStudent SINNER JOIN SC ONS. Sno = SC.SnoGroupBY Dept(统计运算机系每个同学的选课门数、平均成果、最高成果、最低成果)-分组和行挑选条件的多表连接查询SELECTSno,COUNT*,AVGGrade,MAXGrade,MINGradeFROMStudent SJOIN SCONS.Sno = SC.SnoWHEREDept =' 运算机系 'GroupBY Dept1.3.2 自连接自连接是一种特别的内连接, 相互连接的表在物理上是一张表, 但在规律上可以看做是两张表;FROM表 1 AS T1JOIN表 1 AS T21通过为表取别名的方法, 可以让物理上的一张表在规律上成为两张表; (肯定要为表取别名!)(查询与刘晨在同一个系学习的同学的姓名、所在系)SELECTS1.Sname,S1.DeptFROMStudent S1JOIN Student S2ONS1.Dept = S2.Dept-同一个系的同学WHERES2.Sname =' 刘晨 '-S2表作为查询条件ANDS1.Sname .=' 刘晨 '-S1表作为结果表,并从中去掉刘晨 本人信息1.3.3 外连接在内连接操作中,只有满意条件的元祖才能显现在查询结果集中;外连接是只限制一张表中的数据必需 满意条件,而另一张表的数据可以 不满意 条件;FROM表 1 LEFT| RIGHT OUTERJOIN表 2ON< 连接条件 >1LEFT OUTER JOIN称为左外连接 ,含义是限制 表 2 中的数据必需满意条件, 但不管表 1 中的数据是否满意条件,均输出表1 中的数据;LEFT OUTER JOIN称为右外连接 ,含义是限制 表 1 中的数据必需满意条件, 但不管表 2 中的数据是否满意条件,均输出表 2 中的数据;内连接与外连接的区分:内连接: 表 A 与表 B 进行内连接,就结果为两个表中满意条件的记录集,即C部分;外连接: 假如表 A 和表 B 进行左外连接, 就结果为 记录集 A + 记录集 C;假如表 A 和表 B 进行右外连接,就结果为记录集 B + 记录集 C;(查询没有人选的选修课程名)SELECTCnameFROMCourse CLEFT JOINSCONC.Cno = SC.CnoWHERESC.CnoI S NULL例子解析: 假如存在部分课程为被人挑选,就必定在Course 表中有但在 SC 表中没有显现,即在进行外连接时没人选的课程在与SC 表构成的连接结果集中 , 对应的 Sno、Cno 、Grade 列必定为空,所以只需 * 在连接后的结果中选出 *SC 表中 Sno 或 Cno 为空的元祖即可;(统计运算机系每个同学的选课门数,包括没选课的同学)SELECTS.SnoAS 学号, COUNTSC.CnoAS 选课门数 FROMStudent SLEFT JOIN SCONS.Sno = SC.SnoWHEREDept =' 运算机系 'GROUPBY S.Sno例子解析: 上述例子要求统计每个同学的.,所以在 GROUP BY 分组时, 是依据同学表中的学号来分;而对于聚合函数COUNT ,上述要求统计每个同学的选课门数,如写成 COUNTS.Sno 或 COUNT *,就对没选课的同学都返回 1, 由于在外连接结果中, S.Sno不会是 NULL ,而 COUNT* 函数本身也不考虑NULL ,它是直接对元祖个数进行计数;留意: 在对外连接的结果进行分组、 统计等操作时, 肯定要留意分组依据列和统计列的挑选;1.4 使用 TOP 限制结果集行数在使用 SELECT 语句进行查询时,有时只需要前几行数据;TOP expressionPERCENTWITH TIES1expression:指定返回行数的数值表达式;假如指定了PERCENT ,expression 将隐式转换成 float,否就是 bigintPERCENT :指定只返回结果集中前expression%行数据;WITH TIES :指定从基本结果集中返回额外的数据行(只有在SELECT子句中包含了 ORDER BY 子句时,才能使用);TOP 谓词写在 SELECT 单词的后面(假如有 DISTINCT ,就在 DISTINCT 后面);(查询考试成果最高的3 个成果;列出学号、课程号、成果)SELECTTOP 3 Sno,Cno,GradeFROMSC ORDERBY GradeDESC如要包括并列第 3 名的成果:SELECTTOP 3 Sno,Cno,GradeWITH TIESFROMSC ORDERBY GradeDESC2. 数据更换功能2.1 插入数据INSERT INTO 表名 列名 VALUES 值1(1) )简洁插入语句INSERT INTO StudentVALUES '001', ' 陈东 ' , ' 男' , '1996/6/23', ' 信息治理系 ' 1(2) )多行插入语句INSERT INTO SCVALUES '001', 'C001', 90,'001', 'C002', 30,'001', 'C005', NULL(3) )不按表次序插入语句按与表列次序不同的次序插入数据INSERT INTO StudentSno,Sname,Sex,DeptVALUES '001', ' 陈东' , ' 男' , '1996/ 6/23', ' 信息治理系 ' 2.2 更新数据UPDATE 表名 SET 列名 =值(1) )无条件更新UPDATESC SET Grade = Grade+10(2) )有条件更新(将 “C001”号课程的学分改成5 分)UPDATECourseSET Grade =5 WHERECno ='C001'(将运算机系全体同学的成果加5 分)UPDATESC SET Grade = Grade+5 FROMSCJOIN Student SONS.Sno = SC.SnoWH EREDept =' 运算机系 '2.3 删除数据DELETETOP expression PERCENTFROM表名(1) )无条件删除DELETE FROMStudent(2) )有条件删除(删除全部考试成果不合格的同学的选课记录)DELETE FROMSCWHEREGrade <60(删除 Student表中 2.5 %的行数据)DELETETOP 2.5 PERCENT FROMStudent四. 高级查询1. CASE 函数CASE 函数是一种多分支函数, 它可以依据条件列表的值返回多个可能的结果表达式中的一个;1.1 简洁 CASE 函数CASEinput_expressionWHENwhen_expressionTHENresult_expression.nELSE else_expressionENDinput_expression:所运算的表达式,可以是一个变量名、字段名、函数或子查询;when_expression:要与 input _expression进行比较的简洁表达式; 简洁表达式中不行包含比较运算法,只需给出被比较的表达式或值;else_expression: 比较结果均不为 TRUE 时返回的表达式;(查询选了 JAVA 课程的同学的学号、姓名、所在系、成果,如所在系为 “运算机系 ”,就显示 “CS”;如所在系为 “信息治理系 ”,就显示 “IM”;如所在系为“通信工程系 ”,就显示 “COM”)SELECTS.Sno学号 ,Sname姓名 ,CASEDeptWHEN' 运算机系 'THEN 'CS' WHEN' 信息治理系 'THEN 'IM' WHEN' 通信工程系 'THEN 'COM'END AS 所在系 ,Grade成果FROMStudent SJOIN SCONS.Sno = SC.SnoJOIN Course CONC.Cno = SC.CnoWHERECname ='Java'1.2 搜寻 CASE 函数简洁 CASE 函数只能将 input_expression与一个单值进行比较, 假如需要跟一个范畴内的值进行比较,就需要 搜寻 CASE 函数;CASEWHENBoolean_expressionTHENresult_expression.nELSE else_expressionEND12345Boolean_expression:比较表达式, 可以包含比较运算符, 直接将两者进行比较;上述例子也可以用搜寻CASE函数: SELECTS.Sno学号 ,Sname姓名 ,CASEWHENDept ='运算机系 'THEN 'CS'WHENDept ='信息治理系'THEN 'IM'WHENDept ='通信工程系'THEN 'COM'END AS 所在系 ,Grade成果FROMStudent SJOIN SCONS.Sno = SC.SnoJOIN Course CONC.Cno = SC.CnoWHERECname ='Java'(查询 C001 课程的考试情形,列出学号和成果,然后依据成果划分等级)SELECTS.Sno学号 ,Sname姓名 , CASEWHENGrade >=90 THEN' 优'WHENGrade BETWEEN80AND 99THEN '良'WHENGrade BETWEEN70AND 79THEN '中'WHENGrade BETWEEN60AND 69THEN '及格 'END AS 成果FROMSCON WHERECno ='C001'2. 子查询假如一个 SELECT 语句嵌套在另一个 SELECT 、INSERT 、UPDATE 或 DELETE语句中,就称为子查询或内层查询;而包含子查询的语句称为主查询;子查询通常用于满意以下需求之一:把一个查询分解成一系列的规律步骤供应一个列表作为 WHERE 子句和 IN、EXISTS 、ANY、ALL 的目标对象供应由外层查询中每一条记录驱动的查询子查询通常有几种形式:WHERE列名 NOT IN 子查询WHERE列名 比较运算符 子查询WHERE EXISTS 子查询2.1 使用基于集合测试的嵌套子查询使用嵌套子查询进行基于集合的测试时, 子查询返回的是一个值列表, 外层查询通过运算符 IN 或 NOT IN ,对子查询返回的结果集进行比较;SELECT <查询列表 > FROM .WHERE <列名 > NOT IN SELECT <列名 > FROM包含这种子查询形式的查询语句是分步骤实现的,即先执行子查询, 然后在子查询的结果基础上执行外层查询( 先内后外 );子查询返回的结果是一个集合,外层查询就是在这个集合上使用 IN 运算符进行比较;(查询与刘晨在同一系的同学)SELECTSno,Sname,DeptFROMStudentWHEREDeptINSELECT DeptFrom StudentWhere Sname =' 刘晨' (查询选修了JAVA 课程同学的姓名)SELECTSnameFROMStduentWHERESnoIN SELECTSnoFROMSCWHERECnoIN SELECT CnoFROMCourseWHERECname ='JAVA'其次个例子也可以用了连接查询来做:SELECTSnameFrom Student SJOIN SCONS.Sno = SC.SnoJOIN Course CONC. Cno = SC.CnoWHERECname ='JAVA'上述的例子可以看出 子查询和连接查询 可以互通,但在某些情形下是不行以的:(统计选了 JAVA 课程的同学的姓名和所在系) 子查询:SELECTSno学号 , COUNT*选课门数 , AVGGrade平均成果FROMSCWHERESnoIN SELECT SnoFROMSC JOIN Course CONC.Cno = SC.CnoWHERECname ='JAVA'GROUPBY Sno这个查询不能完全用连接查询实现, 由于这个查询的语义是要先找出选了JAVA 课程的同学,然后再运算这些同学的选课门数和平均成果;连接查询:SELECTSno学号 , COUNT*选课门数 , AVGGrade平均成果FROMSCJOIN Course CON C.Cno = SC.CnoWHERECname ='JAVA'GROUPBY Sno以上查询是错误的,查出来同学的选课门数都是1 ! 实际上这个 1 指的是JAVA 这一门课程,其平均成果也是JAVA 成果;【留意:】连接查询和子查询的区分:之所以这样, 是由于在执行有 连接操作 的查询时, 系统第一将全部被连接的表连接成一张大表 ,这张大表中的数据全部 满意连接条件 的数据;之后再在这张连接后的大表上执行 WHERE 子句,然后是 GROUP BY子句;执行完 WHERE 子句之后,连接的大表中的数据就只剩下JAVA 这一门课程的情形了,明显不符情形;对于含有 嵌套的子查询 的查询,是先执行子查询, 然后在子查询的结果基础上再执行外层查询;【留意:】在子查询中否定和在外查询中否定的区分 IN 和 .= 的搭配 相较于 NOT IN和 =的搭配是否相同? 在子查询中否定和在外查询中否定的区分?(查询没选 C001 课程的同学的姓名和所在系)1. 多表连接:SELECTSname,DeptFROMStudent SJOIN SCONS.Sno= SC;Sno WHERECno .=' C001'2. 嵌套子查询:1) 在子查询中否定SELECTSname,DeptFROMStudentWHERESnoNOT IN SELECT SnoFROMSC WHERECno ='C001'2) 在外层查询中否定SELECTSname,DeptFROMStudentWHERESnoIN SELECT SnoFROMSC WHERECno .='C001'这个例子,连接查询是错误的, 嵌套子查询中方法一

    注意事项

    本文(2022年知识点SQL语句学习及详细总结2 .docx)为本站会员(Q****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开