ORACLE结构化查询语言SQL培训介绍

上传人:熏** 文档编号:243144121 上传时间:2024-09-16 格式:PPT 页数:65 大小:926KB
返回 下载 相关 举报
ORACLE结构化查询语言SQL培训介绍_第1页
第1页 / 共65页
ORACLE结构化查询语言SQL培训介绍_第2页
第2页 / 共65页
ORACLE结构化查询语言SQL培训介绍_第3页
第3页 / 共65页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,*,*,1,主要内容,结构化查询语言,SQL,一,.,结构化查询语言概述,二,. SELECT,查询,三,.,针对单表的查询,四,.,对查询结果进行编辑,五,.,多表连接查询,六,.,子查询,2,一,.,结构化查询语言概述,SQL,的全称为,Structured Query Langauge(,结构化查询语言,),。它是数据库系统的通用语言,利用它,用户可以用几乎同样的语句在不同的数据库系统上执行同样的操作。,SQL,语言是一个综合的,功能强大又简单易学的语言,它集数据查询、数据操纵、数据定义和数据控制于一体。,SQL,语言按照功能可以分为,4,大类。,3,按照指定的组合、条件表达式或排序检索已存在的数据库中的数据,但并不改变数据库中数据。命令动词有,SELECT,。,1.,数据查询语言(,Data Query Language,,,DQL,),创建、修改或删除数据库中各种对象,包括表、视图、索,引等。命令动词有,CREATE,、,ALTER,、,DROP,。,2.,数据定义语言(,DDL:Data Definition Language),3.,数据操纵语言(,Data Manipulation Language,,,DML,),对已经存在的数据库进行记录的插入、删除、修改等操作。命令动词有,INSERT,、,UPADATE,、,DELETE,。,4,用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、对数据库进行监视。命令动词有,GRANT,、,REMOVE,等。,5.,数据控制语言(,Data Control Language,,,DCL,),4.,事务控制语言(,Transaction Control Language,,,TCL,),事务是对数据库操作的逻辑单位,在一个事务中可以包含一条或多条,DML,(数据操纵语言)、,DDL,(数据定义语言)和,DCL,(数据控制语言)语句,这些语句组成一个逻辑整体。事务的执行只有两种结果:要么全部执行,把数据库带入一个新的状态;要么全部不执行,对数据库不做任何修改。,事务是一个或多个,SQL,语句序列,在程序更新数据库时事务至关重要,因为必须维护数据的完整性,命令动词有,SAVEPOINT,,,ROLLBACK,,,COMMIT,。,5,二,. SELECT,查询,所谓查询,就是针对数据库中的数据按指定的条件和特定的组合进行对数据表的检索。,SELECT ,FROM ,表名,WHERE ,查询条件,含义是:根据,WHERE,子句的查询条件,从,FROM,子句指定的表中找出满足条件记录,再按,SELECT,语句中指定的字段次序,筛选出记录中的指定字段值。若不设置查询条件,则表示被查询的表中所有记录都满足条件。,SELECT,语句格式,SELECT,查询语句基本格式是:,6,SELECT ALL|DISTINCT,INTO,新表名,FROM ,WHERE ,GROUP BY HAVING ,ORDER BY ASC|DESC,SELECT,查询语句完整格式是:,参数说明:,(,1,),ALL|DISTINCT,其中,ALL,表示查询满足条件的所有行;,DISTINCT,表示在查询的结果集中,消除重复的记录。,(,2,),:由被查询的表中的字段或表达式组成,指明要查询的字段信息。,7,(,3,),INTO,新表名,表示在查询的时候同时建立一个新的表,新表中存放的数据来源于查询的结果。,(,4,),FROM ,指出针对那些表进行查询操作,可以是单个表,也可以是多个表,表名与表名之间用逗号隔开。,(,5,),WHERE ,用于指定查询的条件。该项是可选项,即可以不设置查询条件,但也可以设置一个或多个查询条件。,(,6,),GROUP BY ,对查询的结果按照指定的字段进行分组。,(,7,),HAVING ,:,对分组后的查询结果再次设置筛选条件,最后的结果集中只包含满足条件的分组。必须与,GROUP BY,子句一起使用。,(,8,),ORDER BY ASC|DESC,对查询的结果按照指定的字段进行排序,其中,ASC|DESC,用来指明排序的方式。,ASC,为升序;,DESC,为降序。,8,整个,SELECT,语句的含义:,根据,WHERE,子句的筛选条件,从,FROM,子句指定的表中找出满足条件记录,再按,SELECT,语句中指定的字段次序,筛选出记录中的字段值构造一个显示结果表。,如果有,GROUP BY,子句,则将结果按,group by,后面的,“,字段名,”,的值进行分组,该字段中值相等的元组为一个组;,如果,GROUP BY,子句带有短语,HAVING,,则只有满足短语指定条件的分组才会输出。,如果有,ORDER BY,子句,则结果表要按照,order by,后面的,的值进行升序和降序排列。,SELECT ALL|DISTINCT实现的是对表的投影操作,,WHERE 中实现的是选择操作。,9,三,.,针对单表的查询,1.,查询指定的字段,【,例,1,】,查询,student,表中学生的学号、姓名以及家庭住址。,用户往往需要了解表中部分字段信息或者全部字段信息,通过对,SELECT,语句中,“,字段列表,”,的控制即可满足用户的需求。,SELECT student_id, student_name, address,FROM student,1.1,查询部分字段,10,方法一:列举法,即把表中所有字段在,SELECT,子句中的,“,字段列表,”,中列举出来;,方法二:,通配符法,即,使用通配符,“,*,”,来代替表中所有的字段。,1.2,查询全部字段,【,例,2,】,查询,student,表中所有学生的所有字段信息。,SELECT student_id, student_name, class_id, sex,born_date, address, tel, resume,FROM student,方法一:列举法,SELECT *,FROM student,方法二:通配符法,11,当用户只需要了解表中部分记录的信息时,这就应该在查询的时候使用,WHERE,子句设置筛选条件,把满足筛选条件的记录查询出来。,设置查询条件的,SELECT,查询语句基本格式是:,1.3,查询满足条件的记录,SELECT ,FROM ,表名,WHERE ,查询条件,查询条件可以是关系表达式、逻辑表达式和特殊表达式。,12,用关系运算符号将两个表达式连接在一起的式子称为关系表达式,其返回值为逻辑真(,TRUE,)或逻辑假(,FALSE,),关系表达式的格式为:,常用的关系运算符如下表所示。,运算符号,含义,=,等于,小于,大于,=,大于或等于,!=,或,不等于,关系表达式,13,【,例,3,】,查询所有男学生的学号、姓名、性别和出生日期。,SELECT student_id, student_name, sex, born_date,FROM student,WHERE sex=,男,14,用逻辑运算符号将两个表达式连接在一起的式子称为逻辑表达式,其返回值为逻辑真(,TRUE,)或逻辑假(,FALSE,),逻辑表达式的格式为:,常用的逻辑运算符下图所示。,运算符号,含义,OR,逻辑或,AND,逻辑与,NOT,逻辑否,逻辑表达式,15,(,1,)逻辑与运算,AND,所有条件都成立时,返回结果才为真。,【,例,4,】,查询所有,1989,年以后出生所有女学生的基本信息。,SELECT *,FROM student,WHERE born_date1989-12-31 AND sex=,女,【,例,5,】,查询课程表中非公共课的课程信息。,(,2,)逻辑否运算,NOT,SELECT *,FROM course,WHERE NOT (c_type =,公共课,),16,(,3,)逻辑或运算,OR,所有条件中只要有一个条件成立,返回结果即为真。,【,例,5,】,查询学生表中来自广州市的学生或来自其他地方的女学生的学号、姓名、班级编号、家庭住址和备注信息,SELECT student_id, student_name, class_id, address, resume,FROM student,WHERE address=,广州市,OR sex=,女,17,特殊表达式在比较运算中有一些特殊的作用。常用的特殊运算符号如下图所示。,特殊表达式,运算符号,含义,%,通配符,包含,0,个或多个字符的任意字符串,通配符,表示任意单个字符, ,指定范围或集合中的任意单个字符,BETWEEN.AND,定义一个区间范围,IS NOT NULL,检测字段值为空或不为空,LIKE,字符匹配操作符,NOT IN,检查一个字段值属于或不属于一个集合,EXISTS,检查某一字段是否存在值,18,LIKE,关键字的作用是用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是,char,、,text,、,datetime,等数据类型,返回逻辑值。,LIKE,表达式的格式为:,字符表达式,1 NOT LIKE,字符表达式,2,若省略,NOT,,则表示字符表达式,1,与字符表达式,2,相匹配时才返回逻辑真。,若选择,NOT,,则表示字符表达式,1,与字符表达式,2,不匹配时才返回逻辑真。,(,1,)字符匹配操作符,LIKE,19,【,例,6,】,查询姓刘的学生的基本情况。,SELECT * FROM student,WHERE student_name LIKE,刘,%,【,例,7,】,查询所有姓张和姓刘学生的基本情况。,SELECT *,FROM student,WHERE student_name LIKE,张,刘,%,说明:在使用通配符“,%”,或“,_”,时,就只能用字符匹配操作符,LIKE,,不能使用,=,运算符,20,判断所指定的值是否在给定的区间,返回逻辑值。格式为:,表达式,NOT BETWEEN,表达式,1 AND,表达式,2,“,表达式,1,”,是区间的下限,,“,表达式,2,”,是区间的上限。,若省略,NOT,,则表示表达式的值在指定的区间内即返回逻辑真。,若选择,NOT,,则表示表达式的值不在指定的区间内即返回逻辑真。,(,2,)区间控制运算符,BETWEEN.AND,【,例,8,】,查询出,1990,年,1,月,1,日至,1991,年,12,月,31,日出生的学生的学号、姓名、出生日期。,SELECT student_id, student_name, born_date,FROM student,WHERE born_date BETWEEN 1990-1-1 AND 1991-12-31,21,IS NULL,用来测试字段值是否为空值,返回逻辑值,格式为:,表达式,IS NOT NULL,若省略,NOT,,则表示表达式的值为空时即返回逻辑真。,若选择,NOT,,则表示表达式的值不为空时即返回逻辑真。,(,3,)空值判断运算符,IS NULL,【,例,9,】,查询备注内容为空的学生的学号、姓名与备注。,SELECT student_id, student_name,resume,FROM student,WHERE resume is null,22,判断表达式的值是否属于某一个给定的集合。返回逻辑值,格式为:,表达式,NOT IN,(表达式,1 ,,,.n,),若省略,NOT,,则表示表达式的值属于给定集合时即返回逻辑真。,若选择,NOT,,则表示表达式的值不属于给定的集合时即返回逻辑真。,(,4,)集合判断运算符,IN,【,例,10,】,查询来自长沙和广州市学生的姓名、班级编号和来自的城市。,SELECT student_name, class_id,address,FROM student,WHERE address in (,长沙市,广州市,),23,四,.,对查询结果进行编辑,1.,对查询的字段进行说明,【,例,11,】,查询学生表中学生的姓名和来自的城市,并分别用中文对其进行说明。,在,SELECT,语句中,可以在一个字段的前面加上一个单引号字符串,对后面的字段起说明作用。,SELECT ,姓名, student_name, ,城市, address,FROM student,24,为了能让人更容易了解字段的内容,可以为字段指定别名,并显示在结果集中,方法有,3,种:,方法一:字段名,AS,别名;,方法二:字段名 别名,方法三:别名,=,字段名,2.,对查询的字段使用别名,【,例,12,】,查询学生表中的学生的,student_name,和,born_date,信息,并用中文“姓名”和“出生日期”来显示字段名。,SELECT student_name AS,姓名, born_date AS,出生日期,FROM student,25,SELECT,子句后面可以是字段名,也可以是表达式。,3.,显示表达式的值,【,例,13,】,查询学生表中所有女学生的姓名和年龄。,SELECT student_name ,year(getdate()-year(born_date),年龄,FROM student,WHERE sex=,女,26,SELECT,子句中有一个可选项:,ALL|DISTINCT,,其中,DISTINCT,的作用就是用来消除结果集中重复的记录,内容相同的记录只显示一条。,4.,消除结果集中重复的记录,【,例,14】,查询学生表学生所来自的城市。,SELECT DINSTINCT address,FROM student,27,查询语句中还可以指定表中返回的行数,格式如下:,SELECT TOP n,字段列表,FROM ,其中,,TOP n,用于指定查询结果返回的行数,其返回的结果一定从上往下的,n,行信息。,5.,返回指定的行数,【,例,15】,查询学生表前,3,位学生的学号和姓名。,SELECT TOP 3 student_id, student_name, class_id,FROM student,28,6.,聚合函数,SQL SERVER,提供的聚合函数,用来完成一定的统计功能.能对集合中的一组数据进行计算,并返回单个计算结果.常与,SELECT,和,GROUP BY,子句一起使用.,常用聚合函数,函数,功能,含义说明,COUNT,统计,统计满足条件的记录数,MAX,求最大值,求某一集合中的最大值,MIN,求最小值,求某一集合中的最小值,AVG,求平均值,计算某一数值集合中的平均值,SUM,求和,计算某一数值集合中的总和,29,MAX,和,MIN,函数分别用于查找指定集合中的最大值和最小值。格式为:,MAX,MIN,(,ALL | DISTINCT,表达式),其中,,ALL,表示对所有值进行聚合函数运算,,DISTINCT,表示如果有多个重复的值,则这些重复值只计算一次,默认为,ALL,。表达式可以是涉及一个列或多个列的算术表达式。,6.1,MAX,和,MIN,函数,【,例,16】,查找成绩表中,1001,号课程的最高分和最低分。,SELECT max(grade),最高分, min(grade),最低分,FROM score,WHERE course_id=1001,30,该函数用于计算查询到的数据值的总和。语法格式为:,SUM,(,ALL | DISTINCT,表达式),【,例,17】,计算,0801101,号学生总成绩。,6.2 SUM,函数,SELECT sum(grade),总分,FROM score,WHERE student_id=0801101,31,用于计算查询结果的平均值。语法格式为:,AVG,(,ALL | DISTINCT,表达式),6.3 AVG,函数,【,例,18】,计算,0801101,号学生平均成绩。,SELECT AVG(grade),平均分,FROM score,WHERE student_id=0801101,32,用于统计查询结果集中记录的数目。语法格式为:,COUNT,(,ALL | DISTINCT,表达式),如果,COUNT,函数使用字段名做为参数,则只统计内容不为空的行的数目。,如果执行,COUNT,(*),即使用,“,*,”,作为参数,则统计所有行(包括空值的行)。,6.4 COUNT,函数,【,例,19】,统计学生表中学生的总数。,SELECT COUNT,(,student_id,)学生总数,FROM student,33,GROUP BY,子句将查询结果表按某一列或多列值分组,值相等,的为一组。一般与,SQL,的聚合函数一起使用,对分组后的每一组数据分别进行统计。,格式:,SELECT ,FROM ,GROUP BY ,HAVING ,6.5,对查询结果进行分组和筛选,【,例,20】,统计各个班学生的总人数。,SELECT class_id , count(student_id),FROM student,GROUP BY class_id,34,【,例,21】,统计成绩表中每个学生的总分和平均分,。,SELECT student_id , sum(grade),总分, avg(grade),平均分,FROM score,GROUP BY student_id,35,6.6,对分组后还要求按一定的条件对这些分组进行筛选,最终只输出满足指定条件的分组,则用,HAVING,短语指定筛选条件。,【,例,22】,在例,21,中,只输出总分大于,150,的学生的学号、总分和平均分。,SELECT student_id, sum(grade),总分,avg(grade),平均分,FROM grade,GROUP BY student_id,HAVING sum(grade)150,36,6.7,对查询结果集进行排序,在,SELECT,查询语句中。使用,ORDER BY,子句对查询输出结果进行排序。,排序的方式有两种:,ASC,(升序)和,DESC,(降序)。,【,例,23】,统计成绩表中每个学生的总分和平均分,把查询结果按总分的降序排列输出。,SELECT student_id , sum(grade),总分, avg(grade),平均分,FROM grade,GROUP BY student_id,ORDER BY,总分,DESC,37,通过,INTO,子句,可以创建一个新表并将查询到的结果插入到新表中。,6.8,把查询结果插入新的表,【,例,24】,查询学生表中学生的学号、姓名和班级编号,并把查询结果插入到新的表,student_class,中。,然后针对,student_class,表进行查询操作,验证新表,student_class,是否建立成功且被插入了记录。,SELECT student_id, student_name, class_id,INTO student_class,FROM student,说明:新表的所包含的字段与数据类型与,SELECT,语句的字段列表一致。如果要创建的临时表,则只要在表名前加上,“,#,或,#,”,即可,38,五,.,多连接表查询,连接查询分两大类,一是使用连接谓词进行连接;二是使用关键字,JHON,进行连接。,使用连接谓词连接表的基本格式为:,SELECT ,FROM,表,1,,表,2 ,,,.n,WHERE ,连接谓词,连接字段:必须是可比较的,连接谓词包括:,=,、,、,、,=,、,!=,、,等,当比较符是,=,时称为等值连接。,39,当连接谓词是“,=”,时的连接,称为等值连接。当连接谓词是不等运算符时的连接,称为不等连接。,【25】,查询学生的基本信息和成绩信息。,SELECT student.* , score.*,FROM student , score,WHERE student.student_id=score.student_id,1,等值连接和不等连接,40,2.,自然连接,在针对多表进行查询时。如果所引用的列为被查询的表所共有,则引用列时必须用表名来指定列是来源于哪个表,指定方法为:表名,.,列名。反之,不一定需要表名来指定来源。,【,例,26】,查询学生的基本信息和成绩信息,在输出结果中相同的字段只保留一个。,SELECT student.student_id, student_name, class_id, sex,born_date, address, tel, resume, course_id, grade,FROM student , score,WHERE student.student_id=score.student_id,若在等值连接中把输出字段列表中重复的字段只保留一个的连接称为自然连接。,41,3.,复合条件连接,含有多个连接条件称为复合条件连接。,【,例,27】,查询学生的学号、姓名、所学课程的名称和成绩信息。,SELECT student.student_id,student_name,course_name,grade,FROM student, score, course,WHERE student.student_id=score.student_id,AND score.course_id=course.course_id,42,一个表与自身进行连接称为自连接。,在同一个表中查找具有相同字段值的行,则可以使用自连接。在使用自连接时需要为表指定两个别名,且对所有引用的列均要用别名来指定其来源。,4.,自连接,【,例,28】,查找同一课程成绩相同的学生的学号、课程号和成绩。,SELECT a.student_id,b.student_id,a.course_id,a.grade,FROM score a, score b,WHERE a.grade=b.grade,AND a.student_idb.student_id,AND a.course_id=b.course_id,43,以,JOIN,关键字连接,以,JOIN,关键字来连接表的方式,增强了表的连接能力和连接的灵活性。 使用,JOIN,关键字连接表的的基本格式为:,SELECT ,FROM,表名,1 ,表名,2 ON , ,表名,3 ON .,参数说明:,1,)表名,1,,表名,2,,表名,3,等用来指明需要连接的表。,2,)连接类型有:, INNER | LEFT | RIGHE | FULL OUTER JOIN,。其中,INNER JOIN,表示内连接;,OUTER JOIN,表示外连接,外连接又分:左外连接(,LEFT OUTER JOIN,)、右外连接(,RIGHT OUTER JOIN,)和全外连接(,FULL OUTER JOIN,)。,3,),ON,:用来指明连接条件。,44,等值连接、不等连接和自然连接属于内连接。以,JOIN,关键字来实现内连接,按照,ON,所指定的连接条件合并两个表,返回满足条件的行。,1,内连接(,INNER JOIN,),【,例,29】,查询学生的基本信息和成绩信息,SELECT student.* , score.*,FROM student INNER JOIN score,ON student.student_id=score.student_id,45,在内连接中,,INNER,可以省略,使用内连接后仍然可以使用,WHERE,子句对连接后的记录进行筛选。,【,例,30】,查询学号为,0801101,学生的基本信息和成绩信息。,SELECT student.student_id, student_name, class_id,sex, born_date, address, tel, resume,course_id, grade,FROM student INNER JOIN score,ON student.student_id=score.student_id,WHERE,student.student_id= 0801101,46,外连接返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表,(,左外连接时,),、右表,(,右外连接时,),或两个边接表,(,全外连接,),中的所有数据行。,2,外连接,(OUTER JOIN),(,1,)左外连接,查询输出结果中显示符合条件的数据行及左边数据表中不符合条件的数据行。左外连接的连接格式为:,【,例,31】,查找所有学生的学号、姓名以及他们所学的课程编号和成绩,没有课程成绩的学生信息也要显示。,FROM,左表名,LEFT OUTER JOIN,右表名,ON,连接条件,SELECT student.student_id, student_name, course_id, grade,FROM student LEFT OUTER JOIN score,ON student.student_id=score.student_id,47,查询输出结果中显示符合条件的数据行及右边数据表中不符合条件的数据行。右外连接的连接格式为:,(,2,)右外连接,FROM,左表名,RIGHT OUTER JOIN,右表名,ON,连接条件,【,例,32】,查询学生的学号、所在的班级编号和班级名称,班级表中没有连接成功的记录也要显示。,SELECT student.student_id, class.class_id, class_name,FROM student RIGHT OUTER JOIN class,ON student.class_id=class.class_id,48,(,3,)全外连接,查询输出结果中显示符合条件的数据行右边及左边数据表中不符合条件的数据行。全外连接的格式为:,FROM,左表名,FULL OUTER JOIN,右表名,ON,连接条件,【,例,33】,查询学生的学号、所学课程名称及成绩,两表中没有连接成功的记录均要显示(采用全外连接,),。,SELECT student_id, course_name, grade,FROM score FULL OUTER JOIN course,ON score.course_id=course.course_id,49,3.,交叉连接,交叉连接也叫非限制连接,它将两个表不加任何约束地组合起来。在数学上,就是两个表的笛卡尔积。交叉连接后得到的结果集的行数是两个被连接表的行数的乘积。,【,例,34】,查询学生的基本信息及其成绩信息(使用交叉连接)。,SELECT *,FROM student CROSS JOIN score,50,六,.,子查询,子查询是一个嵌套在,SELECT,、,INSERT,、,UPDATE,或,DELETE,语句中的,WHERE,或,HAVING,子句内,或嵌套在其他子查询中的,SELECT,查询。,子查询可以嵌套,它能将比较复杂的查询分解为几个简单的查询。一个,SELECTFROMWHERE,语句称为一个,查询块,。将一个查询块嵌套在另一个,WHERE,子句或,HAVING,短语的条件中的查询称为,嵌套查询,。,51,SELECT class_name,外部查询,FROM class,WHERE class_id IN,( SELECT class_id,内部查询,FROM student,(子查询),WHERE student_name=,张小云,),嵌套查询的执行顺序是:首先执行最底层的内部查询(即子查询),它的查询结果并不显示,而是传递给外层查询,用来做外外部查询的查询条件。即按照由里向外的顺序执行。,52,可以使用子查询的地方有:,在使用,IN,或,NOT IN,的集合查询中。,在,UPDATE,、,DELETE,和,INSERT,语句中。,在使用比较运算符时,使用,ANY,或,ALL,时。,使用,EXISTS,或,NOT EXISTS,引入的存在测试时。,在有表达式的地方。,子查询的使用,53,IN,子查询是把子查询的结果做为外部查询的条件。判断外部查询中的某个值是否属于子查询的结果集合。,带谓词,IN,或,NOT IN,的子查询,【,例,35】,查找选修了,1002,号课程的学生的学号、姓名和班级编号。,格式:, NOT IN,(子查询),SELECT student_id, student_name, class_id,FROM student,WHERE student_id IN,(SELECT student_id,FROM score,WHERE course_id=1002),54,当子查询返回的是单值时,子查询可以由一个比较运算符(,=,、,、,、,=,、,!=,或,)引入。当子查询可能返回多个值时则应把比较运算符与,ALL,和,ANY,结合使用。,格式为:表达式,比较运算符, ALL|ANY (,子查询,),ALL,:表示表达式要与子查询的结果集中的所以值进行比较,当表达式与每个值都满足比较关系时,才返回,TRUE,,否则返回,FALSE,。,ANY,:表示表达式只要与子查询的结果集中的某个值满足比较关系时,就返回,TRUE,,否则返回,FALSE,。,带有比较运算符的子查询,55,56,【,例,36】,查询选修了,1001,号课程且成绩比,0801103,号学生,1001,号课程成绩高的学生的学号、课程编号和成绩。,SELECT student_id, course_id, grade,FROM score,WHERE course_id=1001,AND grade(SELECT grade,FROM score,WHERE student_id=0801103,AND course_id=1001),57,INSERT,、,DELETE,和,UPDATE,语句中的子查询,子查询可以嵌套在,INSERT,、,DELETE,和,UPDATE,语句中,把子查询的结果插入到新表中或用来设置删除和修改记录的条件。,INSERT,和,SELECT,语句结合起来,可以往指定的表中插入批量的记录。带子查询的插入操作的格式为:,1,带子查询的插入操作,INSERT INTO ,(,,,),SELECT ,(,,,),FROM ,WHERE,58,2.,带子查询的修改操作,子查询与,UPDATE,嵌套,子查询用来指定修改的条件。,【,例,38】,将,08011,班学生,1001,号课程的成绩增加,5,分。,UPDATE score,SET grade=grade+5,WHERE student_id in,(SELECT student_id,FROM student,WHERE class_id=08011),59,3.,带子查询的删除操作,子查询与,DELETE,嵌套,子查询用来指定删除的条件。,【,例,39】,删除没有选修,1001,号课程的学生记录。,DELETE student,WHERE student_id not in,(SELECT student_id,FROM score,WHERE,course_id=1001 ),60,允许引用外部查询中的任何表的子查询称为相关子查询,相关子查询在执行时,要使用到外部查询的数据。外部查询首先选择数据提供给子查询,然后子查询对数据进行比较,执行结束后再将查询结果返回到它的外部查询中。,相关子查询通常使用关系运算符与逻辑运算符(,EXISTS,、,AND,、,SOME,、,ANY,、,ALL,)。,EXISTS,代表存在。带有,EXISTS,量词的子查询不返回任何实际数据,它只产生逻辑真值,TRUE,或逻辑假值,FALSE,。若子查询结果非空,则外层的,WHERE,子句返回真值,否则返回假值。,EXISTS,也与,NOT,结合使用,即,NOT EXISTS,,其返回值与,EXISTS,刚好相反。,格式为:,NOT EXISTS,(子查询),相关子查询,61,【,例,40】,查询,1001,号课程的成绩小于该课程平均成绩的学生的学号和成绩。,SELECT student_id, grade,FROM score a,WHERE grade( SELECT AVG(grade),FROM score b,WHERE a.course_id=b.course_id,AND course_id= 1001,),62,UNION,操作符,UNION,运算可以将两个或多个查询结果组合成一个结果集。使用,UNION,运算符组合的结果集都必须具有相同的结构,他们输出的列的数目必须相同,并且相应的结果集列的数据类型必须兼容。,语法格式为:,SELECT,输出列表,1 FROM,表名,1,UNION ALL,SELECT,输出列表,2 FROM,表名,2,63,UNION,的结果集列名与,UNION,运算符中第一个,SELECT,语句结果集中的列名相同。,在默认情况下,,UNION,运算符将从结果集中删除重复的行。如果使用,ALL,关键字,那么结果集中将包含所有行而不删除重复行。,如果使用,UNION,运算符,那么各个,SELECT,语句不能包含他们自己的,ORDER BY,或,COMPUTE,子句,而只能在最后一个,SELECT,语句的后面使用一个,ORDER BY,或,COMPUTE,子句;该子句适用于最终的组合结果集。,64,【,例,41】,分别查询所有学生的,1001,和,1002,号课程的成绩,然后联合输出,并按成绩的降序排列。,SELECT student_id, course_id, grade,FROM score,WHERE course_id=1001,UNION,SELECT student_id, course_id, grade,FROM score,WHERE course_id=1002,ORDER BY grade DESC,65,谢谢,!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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