《子查询多表连接和系统函数幻灯片.ppt》由会员分享,可在线阅读,更多相关《子查询多表连接和系统函数幻灯片.ppt(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、子查询多表连接和系统函数第1页,共22页,编辑于2022年,星期五回顾n学生信息表添加一条记录:张小光,男,学号为s90311,21岁,来自泉州n将张小光的地址改为平和n删除张小光的信息字段名称字段名称数据类型数据类型说明说明stuId数字数字学生编号学生编号,采用自动编号采用自动编号stuName字符字符学生姓名学生姓名,必填必填stuNo字符字符学号学号,必填必填,且不能重复且不能重复,格式为格式为s903XXstuSex字符字符性别性别,必填必填,只能是只能是男男或或女女,默认默认为为男男stuAge数字数字年龄年龄,必填必填,必须在必须在1550岁之间岁之间stuAddress字符字符
2、家庭地址家庭地址,可不填可不填,默认为默认为地址不详地址不详学生信息表学生信息表第2页,共22页,编辑于2022年,星期五课程目标n 子查询n多表联接n系统函数n综合案例第3页,共22页,编辑于2022年,星期五子查询n什么是子查询q子查询是一个嵌套在 select、insert、update、delete 语句或其它查询中的select 查询n为什么要使用子查询q查询网页设计机试考了90分的学生学号select stuNo from 成绩表where courseName=网页设计 and labExam=90q查询网页设计机试考了最高分的学生学号?q查询来自泉州的学生的考试成绩?第4页,共
3、22页,编辑于2022年,星期五子查询n查询网页设计机试考了最高分的学生学号select stuNo from 成绩表where courseName=网页设计 and labExam=(select max(labExam)from 成绩表 where courseName=网页设计 )第5页,共22页,编辑于2022年,星期五子查询n查询来自泉州的学生的考试成绩q方法一select*from 成绩表where stuNo in(select stuNo from 学生信息表where stuAddress=泉州)q方法二select*from Scorewhere exists(selec
4、t*from Student where stuAddress=泉州and Score.stuNo=Student.stuNo)第6页,共22页,编辑于2022年,星期五联接n为什么要使用联接?q查询学生的C语言成绩,要求显示姓名,学号,笔试成绩,机试成绩?n什么是联接?q联接表示 SQL Server 应如何使用一个表中的数据来选择另一个表中的行。q通过联接,可以根据各个表之间的逻辑关系从两个或多个表中检索数据 第7页,共22页,编辑于2022年,星期五联接n联接的类型q内联接ninner join q外联接n left join 或 left outer join nright join
5、或 right outer joinnfull join 或 full outer joinq交叉联接ncross join第8页,共22页,编辑于2022年,星期五联接n查询学生的C语言成绩,要求显示姓名,学号,笔试成绩,机试成绩select stuName,学生信息表.stuNo,writtenExam,labExam from 学生信息表 inner join 成绩表on 学生信息表.stuNo=成绩表.stuNowhere courseName=C语言n查询学生的C语言成绩,要求显示姓名,学号,笔试成绩,机试成绩(缺考的学生也要显示)select stuName,学生信息表.stuNo
6、,writtenExam,labExam from 学生信息表 left join 成绩表on 学生信息表.stuNo=成绩表.stuNowhere courseName=C语言第9页,共22页,编辑于2022年,星期五SQL Server中的函数n字符串函数n日期函数n数学函数n系统函数第10页,共22页,编辑于2022年,星期五字符串函数SELECT STUFF(ABCDEFG,2,3,我的音乐我的世界我的音乐我的世界)返回:返回:A我的音乐我的世界我的音乐我的世界EFG在一个字符串中,删除指定长度的在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字字符,并在该位置插入一个新的字
7、符串符串STUFFSELECT CHARINDEX(ACCP,My Accp Course,1)返回:返回:4用来寻找一个指定的字符串在另一用来寻找一个指定的字符串在另一个字符串中的起始位置个字符串中的起始位置CHARINDEX举例举例描述描述函数名函数名SELECT LEN(SQL Server课程课程)返回:返回:12返回传递给它的字符串长度返回传递给它的字符串长度LENSELECT LOWER(SQL ServerSELECT LOWER(SQL Server课程课程)返回:返回:sql serversql server课程课程把传递给它的字符串转换为小写把传递给它的字符串转换为小写LO
8、WERSELECT UPPER(sql server课程课程)返回:返回:SQL SERVER课程课程把传递给它的字符串转换为大写把传递给它的字符串转换为大写UPPERSELECT LTRIM(周智宇周智宇 )返回:周智宇返回:周智宇 (后面的空格保留)(后面的空格保留)清除字符左边的空格清除字符左边的空格LTRIMSELECT RTRIM(周智宇周智宇 )返回:返回:周智宇(前面的空格保留)周智宇(前面的空格保留)清除字符右边的空格清除字符右边的空格RTRIMSELECT RIGHT(买卖提买卖提.吐尔松吐尔松,3)返回:吐尔松返回:吐尔松从字符串右边返回指定数目的字符从字符串右边返回指定数
9、目的字符RIGHTSELECT REPLACE(莫乐可切莫乐可切.杨可杨可,可可,兰兰)返回:莫乐兰切返回:莫乐兰切.杨兰杨兰替换一个字符串中的字符替换一个字符串中的字符REPLACE第11页,共22页,编辑于2022年,星期五日期函数SELECT DATEPART(day,01/15/2000)返回:返回:15日期中指定日期部分的整数形日期中指定日期部分的整数形式式DATEPARTSELECT GETDATE()返回:今天的日期返回:今天的日期取得当前的系统日期取得当前的系统日期GETDATE举例举例描述描述函数名函数名SELECT DATEADD(mm,4,01/01/99)返回:以当前的
10、日期格式返回返回:以当前的日期格式返回05/01/99将指定的数值添加到指定的日将指定的数值添加到指定的日期部分后的日期期部分后的日期DATEADDSELECT DATEDIFF(mm,01/01/99,05/01/99)返回:返回:4两个日期之间的指定日期部分两个日期之间的指定日期部分的区别的区别DATEDIFFSELECT DATENAME(dw,01/01/2000)返回:返回:Saturday日期中指定日期部分的字符串日期中指定日期部分的字符串形式形式DATENAME第12页,共22页,编辑于2022年,星期五数学函数SELECT SQRT(9)返回:返回:3取浮点表达式的平方根取浮点
11、表达式的平方根SqrtSELECT ABS(-43)返回:返回:43取数值表达式的绝对值取数值表达式的绝对值ABS举例举例描述描述函数名函数名SELECT CEILING(43.5)返回:返回:44返回大于或等于所给数字表达返回大于或等于所给数字表达式的最小整数式的最小整数CEILINGSELECT POWER(5,2)返回:返回:25取数值表达式的幂值取数值表达式的幂值POWERSELECT ROUND(43.543,1)返回:返回:43.5将数值表达式四舍五入为指定将数值表达式四舍五入为指定精度精度ROUNDSELECT SIGN(-43)返回:返回:-1对于正数返回对于正数返回+1,对于
12、负数返,对于负数返回回-1,对于,对于0 则返回则返回0SignSELECT FLOOR(43.5)返回:返回:43取小于或等于指定表达式的最取小于或等于指定表达式的最大整数大整数FLOOR第13页,共22页,编辑于2022年,星期五系统函数SELECT USER_NAME(1)返回:从任意数据库中返回返回:从任意数据库中返回“dbo”从给定的用户从给定的用户I D返回用户名返回用户名USER_NAMESELECT CONVERT(VARCHAR(5),12345)返回:字符串返回:字符串12345用来转变数据类型用来转变数据类型CONVERT 举例举例描述描述函数名函数名SELECT CUR
13、RENT_USER返回返回:你登录的用户名你登录的用户名返回当前用户的名字返回当前用户的名字CURRENT_USER SELECT DATALENGTH(中国中国A盟盟)返回:返回:7返回用于指定表达式的字节返回用于指定表达式的字节数数DATALENGTHSELECT HOST_NAME()返回:你所登录的计算机的名字返回:你所登录的计算机的名字返回当前用户所登录的计算返回当前用户所登录的计算机名字机名字HOST_NAME SELECT SYSTEM_USER返回:你当前所登录的用户名返回:你当前所登录的用户名返回当前所登录的用户名称返回当前所登录的用户名称SYSTEM_USER 第14页,共
14、22页,编辑于2022年,星期五案例分析1要求n某公司印了一批充值卡,卡的密码是随机生成的,现在出现这个问题:卡里面的“O和0”(哦和零)“i和1”(哎和一),用户反映说看不清楚,公司决定,把存储在数据库中的密码中所有的“哦”都改成“零”,把所有的“i”都改成“1”;请编写SQL语句实现以上要求;n数据库表名:Card;密码字段名:PassWord;第15页,共22页,编辑于2022年,星期五案例分析1分析n这是更新语句,需要使用UPDATE语句;n因为牵涉到字符串的替换,需要使用到SQL Server中的函数Replace;第16页,共22页,编辑于2022年,星期五案例分析1T-SQL两行
15、两行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)第17页,共22页,编辑于2022年,星期五案例分析2要求n在数据库表中有以下字符数据,如:13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2现在希望通过SQL语句进行排序,并且首先要
16、按照前半部分的数字进行排序,然后再按照后半部分的数字进行排需,输出要排成这样:13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2n数据库表名:SellRecord;字段名:ListNumber;第18页,共22页,编辑于2022年,星期五案例分析2分析n这是查询语句,需要使用SELECT语句n需要使用到ORDER BY进行排序,并且在ORDER BY的排序列中,也需要重新计算出排序的数字来n前半部分的数字,可以从先找到“-”符号的位置,然后,取其左半部分,最后再使用Convert函数将其转换为数字:Convert(int
17、,Left(ListNumber,CharIndex(-,ListNumber)-1)n后半部分的数字,可以先找到“-”符号的位置,然后把从第一个位置到该位置的全部字符替换为空格,最后再使用Convert函数将其转换为数字:Convert(int,Stuff(ListNumber,1,Charindex(-,ListNumber),)第19页,共22页,编辑于2022年,星期五案例分析2T-SQLSELECT ListNumberFROM SellRecordORDER BY Convert(int,Left(ListNumber,CharIndex(-,ListNumber)-1),Convert(int,Stuff(ListNumber,1,Charindex(-,ListNumber),)第20页,共22页,编辑于2022年,星期五本章总结n什么是子查询?n联接分为哪些类型?第21页,共22页,编辑于2022年,星期五作业n联接分为哪些类型?n写出常用的字符串函数?n请举例说明类型转换函数的使用。n写出以下T-SQL语句(数据库为:书店管理)q查询机械出版社出版的书的书名和价格(用子查询)q查询书的信息,包括书名,价格,出版社名称,作者,库存量(用联接查询)第22页,共22页,编辑于2022年,星期五
限制150内