资源简介 (共35张PPT)4.1查询的实质及简单查询学习要点简单查询联接查询子查询联合查询引入简单查询选择列选择行查询结果排序查询结果分组学习要点选择列所有列指定列计算列使用别名简单查询引入查询概述:查询的实质:SQL的查询语句从数据库中检索记录形成记录集合,并存入新的记录集对象中查询语句并不会改变数据库中的数据SQL查询的基本语句格式SELECT [ALL|DISTINCT]〈目标列表达式〉[,〈目标列表达式〉]FROM 〈表名或视图名〉[,〈表名或视图名〉][WHERE 〈条件表达式〉][GROUP BY 〈列名1〉[HAVING 〈条件表达式〉]][ORDER BY 〈列名2〉 [ASC | DESC];学习要点选择列选择所有列(全表查询)【例4-1】查询全体学生的详细信息返回结果如下:SELECT *FROM Information;选择列选择列选择指定列:【例4-2】查询全体学生的学号、姓名和性别返回结果如下:SELECT S_no,S_name,S_sexFROM Information此顺序可更改SELECT S_name,S_no,S_classFROM Information选择列选择列计算列:【例4-4】查询全体学生的姓名及其年龄返回结果如下:SELECT S_no,S_name,year(getdate())-Year(s_birth)FROM Information学生的出生年份学生的年龄计算机当前的年份选择列选择列使用别名【例4-5】查询全体学生的学号、姓名和年龄,同时以汉字标题来表示学号、姓名和年龄。返回结果如下:SELECT S_no 学号,S_name 姓名FROM InformationS_no as 学号“学号”=S_no此写法可变化OR选择列选择行满足条件的行消除重复取值行前N行简单查询选择行选择满足条件的行(where子句)简单条件查询复合条件查询指定范围查询指定集合查询字符匹配涉及空值的查询选择行选择行简单条件查询【例4-6】查询家庭地址为“湖南株洲”的学生的所有信息返回结果如下:满足条件的行SELECT *FROM InformationWHERE S_address = ‘湖南株洲’选择行复合条件查询(and)【例4-7】查询学号为’20021003010’考试成绩80分以上的学生学号、课程号、学期和成绩并显示汉字标题返回结果如下:SELECT S_no 学号,C_no 课程号,semester 学期,grade 成绩FROM scoreWHERE s_no='20021003010' AND grade>=80AND和OR可用来联结多个查询条件>or选择行复合条件查询(or)【例4-8】 查询“信息021”班男学生的S_no(学号)和S_name(姓名)返回结果如下:SELECT S_no,S_nameFROM InformationWHERE S_class='信息021' OR S_sex='男' AND S_address='湖南株洲'AND优先于OR满足条件的行>and选择行指定范围查询(between……and)【例4-9】查询年龄在18至22岁之间的学生的S_name(姓名)、S_class(班级)、和Nl(年龄)返回结果如下:Not between……andSELECT S_name,S_class,Year(GetDate())-Year(s_birth) NlFROM InformationWHERE Year(GetDate())-Year(s_birth) BETWEEN 18 AND 22选择行指定范围查询(not between……and)【例4-9】查询年龄不在18至22岁之间的学生的S_name(姓名)、S_class(班级)、和Nl(年龄)返回结果如下:满足条件的行> between……andSELECT S_name,S_class,Year(GetDate())-Year(s_birth) NlFROM InformationWHERE Year(GetDate())-Year(s_birth) NOT BETWEEN 18 AND 22选择行指定集合查询(IN)【例4-11】查询家庭地址为“湖南株洲”和“湖南长沙”班学生的详细信息返回结果如下:NOT INSELECT *FROM InformationWHERE S_address IN (‘湖南株洲’,‘湖南长沙’)选择行指定集合查询(NOT IN)【例4-11】查询家庭地址不是“湖南株洲”和“湖南长沙”班学生的详细信息返回结果如下:满足条件的行>INSELECT *FROM InformationWHERE S_address NOT IN (‘湖南株洲’,‘湖南长沙’)选择行字符匹配谓词LIKE可以用来进行字符串的匹配。其一般语句格式如下 :语句含义:查找指定的属性列值与〈匹配串〉相匹配的记录。〈匹配串〉可以是一个完整的字符串,也可以含有通配符“%”和“_”%:代表任意长度(长度可以为0)的字符串_:代表任意单个字符示例满足条件的行[NOT] LIKE ‘〈匹配串〉‘ [ESCAPE ‘〈换码字符〉‘]选择行字符匹配(示例)【例4-13】查询所有姓刘的学生的详细信息返回结果如下:字符匹配>例4-13、例4-14、例4-15、例4-16SELECT *FROM InformationWHERE S_name LIKE '刘%'选择行字符匹配(示例)【例4-14】查询姓“谭”且全名为两个汉字的学生的S_no(学号)和S_name(姓名)返回结果如下:SELECT S_no,S_nameFROM InformationWHERE S_name LIKE '谭_'字符匹配>例4-13、例4-14、例4-15、例4-16选择行字符匹配(示例)【例4-15】查询名字中第二字为“桂”字的学生的S_no(学号)和S_name(姓名)返回结果如下:SELECT S_no,S_nameFROM InformationWHERE S_name LIKE '_桂%'字符匹配>例4-13、例4-14、例4-15、例4-16选择行字符匹配(示例)【例4-16】查询Visual_Basic课程的课程号和学分SELECT C_no,C_creditFROM CourseWHERE C_name LIKE ‘Visual\_Basic’ ESCAPE ‘\’字符匹配>例4-13、例4-14、例4-15、例4-16Escape\’表将’\’后的‘_’符号转为普通符号选择行涉及空值的查询【例4-17】查一下缺少成绩的学生的学号和相应的课程号返回结果:样例数据库中不存在这种条件记录,因此没有满足条件的记录被查询到满足条件的行SELECT S_no,C_noFROM ScoreWHERE grade IS NULL选择行简单条件查询【例4-6】查询家庭地址为“湖南株洲”的学生的所有信息返回结果如下:满足条件的行SELECT *FROM InformationWHERE S_address = ‘湖南株洲’选择行简单条件查询【例4-6】查询家庭地址为“湖南株洲”的学生的所有信息返回结果如下:满足条件的行SELECT *FROM InformationWHERE S_address = ‘湖南株洲’选择行消除重复取值行【例4-18】查询所有选修过课程的学生的学号返回结果如下:SELECT S_noFROM Score存在许多重复行SELECT DISTINCT S_noFROM Score改为选择行选择行前N行【例4-19】查询课程号为“1003c#_w”的成绩为前三名的学生的学号和成绩。返回结果如下:SELECT top 3 S_no,gradeFROM ScoreWHERE c_no='1003c#_w'选择行查询结果排序两种排序情况指定结果显示顺序使用 ORDER BY 子句 指定升序(ASC)降序(DESC)示例(2个)未指定结果显示顺序以记录在表中的先后顺序 (物理顺序)为排序依据缺省值简单查询示例【例4-20】【例4-20】查询选修了“1003c#_w”课程的学生的学号及其成绩,查询结果按分数的降序排列 。返回结果如下:【例4-20】 【例4-21】查询结果排序SELECT S_no,GradeFROM ScoreWHERE C_no=‘1003c#_w’ORDER BY Grade DESC以Grade值 降序显示示例【例4-21】【例4-21】查询全体学生的S_no(学号)、S_name(姓名)、S_birth(出生年月)和S_class(班级),查询结果按班级名称降序排列,对同一班级中的学生按年龄降序排列。查询结果排序> 【例4-20】 、【例4-21】查询结果排序SELECT S_no, S_name, Year(GetDate())-Year(s_birth) Nl, S_classFROM InformationORDER BY S_class DESC, S_birth先以S_class降序排列,如果s_class值相同,则参考s_birth的值查询结果分组分组实质:GROUP BY子句可以将查询结果表的各行按一列或多列取值相等的原则进行分组且每一组都有一个函数值示例(2个)简单查询示例【例4-22】【例4-22】查询每门课程与相应的选修人数。返回结果如下:【例4-22】 【例4-23】查询结果分组SELECT C_no 课程号, COUNT(S_no) 选修人数FROM ScoreGROUP BY C_no示例【例4-23】【例4-23】查询’ 20021003’班各门课程最高成绩,并显示最高成绩大于80的课程号和最高成绩。返回结果如下:查询结果分组>【例4-22】 【例4-23】查询结果分组SELECT C_no 课程号,MAX(Grade) 最高成绩FROM ScoreWHERE LEFT(S_no,8)='20021003'GROUP BY C_noHAVING(MAX(Grade)>0)用having短语指定筛选条件感谢聆听 展开更多...... 收起↑ 资源预览