1、第四章,子查询、多表连接和系统函数,回顾,学生信息表添加一条记录:张小光, 男, 学号为s90311, 21岁, 来自泉州 将张小光的地址改为平和 删除张小光的信息,学生信息表,课程目标,子查询 多表联接 系统函数 综合案例,子查询,什么是子查询 子查询是一个嵌套在 select、insert、update、delete 语句或其它查询中的select 查询 为什么要使用子查询 查询网页设计机试考了90分的学生学号select stuNo from 成绩表where courseName=网页设计 and labExam=90 查询网页设计机试考了最高分的学生学号? 查询来自泉州的学生的考试成
2、绩?,子查询,查询网页设计机试考了最高分的学生学号select stuNo from 成绩表where courseName=网页设计 and labExam=(select max(labExam) from 成绩表where courseName=网页设计),子查询,查询来自泉州的学生的考试成绩 方法一 select * from 成绩表 where stuNo in (select stuNo from 学生信息表where stuAddress=泉州 ) 方法二 select * from Score where exists( select * from Student where
3、stuAddress=泉州and Score.stuNo = Student.stuNo ),联接,为什么要使用联接? 查询学生的C语言成绩,要求显示姓名,学号,笔试成绩,机试成绩? 什么是联接? 联接表示 SQL Server 应如何使用一个表中的数据来选择另一个表中的行。 通过联接,可以根据各个表之间的逻辑关系从两个或多个表中检索数据,联接,联接的类型 内联接 inner join 外联接left join 或 left outer join right join 或 right outer join full join 或 full outer join 交叉联接 cross join,
4、联接,查询学生的C语言成绩,要求显示姓名,学号,笔试成绩,机试成绩 select stuName,学生信息表.stuNo,writtenExam,labExam from 学生信息表 inner join 成绩表 on 学生信息表.stuNo=成绩表.stuNo where courseName=C语言 查询学生的C语言成绩,要求显示姓名,学号,笔试成绩,机试成绩(缺考的学生也要显示)select stuName,学生信息表.stuNo,writtenExam,labExam from 学生信息表 left join 成绩表on 学生信息表.stuNo=成绩表.stuNowhere cours
5、eName=C语言,SQL Server中的函数,字符串函数 日期函数 数学函数 系统函数,字符串函数,日期函数,数学函数,系统函数,案例分析1要求,某公司印了一批充值卡,卡的密码是随机生成的,现在出现这个问题:卡里面的“O和0”(哦和零)“i和1”(哎和一),用户反映说看不清楚,公司决定,把存储在数据库中的密码中所有的“哦”都改成“零”,把所有的“i”都改成“1”;请编写SQL语句实现以上要求; 数据库表名:Card;密码字段名:PassWord;,案例分析1分析,这是更新语句,需要使用UPDATE语句; 因为牵涉到字符串的替换,需要使用到SQL Server中的函数Replace;,案例分
6、析1T-SQL,两行SQL语句,Update Card Set PassWord = Replace(PassWord ,O,0) Update Card Set PassWord = Replace(PassWord ,i,1),一行SQL语句,Update Card Set PassWord = Replace(Replace(PassWord ,O,0),i,1),案例分析2要求,在数据库表中有以下字符数据,如:13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2现在希望通过SQL语句进行排序,并且首先要按照前半部分
7、的数字进行排序,然后再按照后半部分的数字进行排需,输出要排成这样:13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2数据库表名:SellRecord;字段名:ListNumber;,案例分析2分析,这是查询语句,需要使用SELECT语句 需要使用到ORDER BY进行排序,并且在ORDER BY的排序列中,也需要重新计算出排序的数字来 前半部分的数字,可以从先找到“-”符号的位置,然后,取其左半部分,最后再使用Convert函数将其转换为数字:Convert(int, Left(ListNumber, CharIndex
8、(-, ListNumber)-1) 后半部分的数字,可以先找到“-”符号的位置,然后把从第一个位置到该位置的全部字符替换为空格,最后再使用Convert函数将其转换为数字:Convert(int, Stuff(ListNumber,1, Charindex(-, ListNumber), ),案例分析2T-SQL,SELECT ListNumber FROM SellRecord ORDER BY Convert(int, Left(ListNumber, CharIndex(-, ListNumber)-1), Convert(int, Stuff(ListNumber,1, Charindex(-, ListNumber), ),本章总结,什么是子查询? 联接分为哪些类型?,作业,联接分为哪些类型? 写出常用的字符串函数? 请举例说明类型转换函数的使用。 写出以下T-SQL语句(数据库为:书店管理) 查询机械出版社出版的书的书名和价格(用子查询) 查询书的信息,包括书名,价格,出版社名称,作者,库存量(用联接查询),