项目六查询和更新数据能够使用简单的SQL语句查询数据库表中的数据能够使用SQL语句进行多表数据的查询能够使用SQL中的子查询完成复杂查询能够使用SQL语句对数据库表中的数据进行插入、修改和删除一、SQL语言简介SQL语言是数据库的核心语言。全称是“结构化查询语言(StructuredQueryLanguage)”,是在关系型数据库系统中被广泛采用的一种语言形式。微软公司在SQL语言的基础上对其进行了大幅度的扩充,并将其应用于SQLServer服务器技术中,从而将SQLServer所采用的SQL语言称为Transact-SQL语言。二、SQL语言的组成SQL语言组成数据操纵语言DML数据定义语言DDL数据控制语言DCLSELECTINSERTUPDATEDELETECREATEALTERDROPGRANTREVOKE三、Transact-SQL语法规则语法规则功能描述大写Transact-SQL关键字斜体或小写字母Transact-SQL语法中用户提供的参数|(竖线)分隔括号或大括号内的语法项目。只能选择一个项目[](方括号)可选语法项目。不必键入方括号{}(大括号)必选语法项目。不要键入大括号[,...n]表示前面的项可重复n次。每一项由逗号分隔实例演示查询学生表中林斌同学的密码。UsexkgoSELECTpwdFROMstudentWHEREstuname=‘林斌’Go需检索的字段字段所在表名查询条件相关知识:SELECT语句SELECT语句是SQL语言中最基本的查询语句主要用来从数据库中检索出符合条件的记录。语法格式:SELECTselect_listFROMtable_list[WHEREsearch_coditons]需检索的字段的列表字段所在表名的列表查询条件1、SELECT子句和FROM子句SELECT子句是SELECT语句中的核心语句,用于指定选择列。FROM子句指定查询数据,来源于哪个表或哪几个表。(1)选择所有列(*的使用)【例】显示学生表中所有信息Select*fromstudent分析方法:题中给出了哪些信息?要查询的是哪些字段?这些字段在哪个表中?1、SELECT子句和FROM子句(2)选取部分字段【例】从学生表中检索学生所在班的班级编码和学生姓名selectclassno,stunamefromstudent查询课程表中的课程名称和任课教师查询班级表的所有信息1、SELECT子句和FROM子句(3)对数据列进行算术运算【例】查询课程表(course)中的课程名称、学分,并在原学分上增加2个学分。Selectcouname,credit+2fromcourse(4)使用TOPn[PERCENT]关键字功能:用来限制返回到结果集中的记录的数目,可以使用下面两种表达方式(1)topn(2)topnpercent【例】从学生表中检索所有的信息,要求只显示前6行数据selecttop6*fromstudent问题:数据表中学分字段的值发生变化了吗?1、SELECT子句和FROM子句(5)修改检索结果中列的标题【问题】检索学生表中的学号、班级编码和姓名信息,并修改列标题selectstuno‘学号’,classno‘班级编号’,stuname‘姓名’fromstudent方法有三:(1)’显示的列标题’=要检索的列名(2)要检索的列名’显示的列标题’(3)要检索的列名AS’显示的列标题’1、SELECT子句和FROM子句(6)使用DISTINCT关键字功能:用来从SELECT语句的结果集中去掉重复的记录【例】从学生表中检索学生所在班的班级编码,要求清除值相同的那些行selectdistinctclassnofromstudent姓名民族甲汉乙回丙汉丁汉1、SELECT子句和FROM子句Select子句和From子句完整的格式:SELECT[DISTINCT][TOPN[PERCENT]]字段列表FROM表名使用聚合函数:AVG()、MAX()、MIN()、SUM()、Count()查询课程表中最小的报名人数、最大报名人数以及平均报名人数查询共有多少系部练习一:查询course表所有记录查询student表中前20名学生的学号(stuno),姓名(stuname),并将列名以中文输出查询course表所有信息,并显示报名人数和限选人数之比查询stucou表中有哪些学生进行了选课,要求显示出学生学号答案①Select*fromcourse②Selecttop20stuno‘学号’,stuname‘姓名’fromstudent③Select*,willnum/limitnum‘报名人数和限选人数之比’fromcourse④Selectdistinctstunofromstucou2、WHERE子句用WHERE来指定查询条件,只有满足条件的记录才可以用来构造结果集。WHERE子句中的查询条件形式有以下六种:比较运算符(如=,,,等)逻辑运算符(AND,OR,NOT)范围运算符(BETWEEN…AND…)列表运算符(IN)模糊查询条件(LIKE)空值判断符(ISNULL)2、WHERE子句(1)比较运算符=(等于)、!=(不等于)(大于)=(大于等于)(小于)=(小于等于)!(不大于)!(不小于)【例】查询course表中限选人数小于10的课程名称Selectcounamefromcoursewherelimitnum10go2、WHERE子句(2)逻辑运算符AND(与),OR(或),NOT(非)【例】查询course表中系部编码(departno)为“02”,课程分类是“工程技术”的课程名称。Selectcounamefromcoursewheredepartno=‘02’andkind=‘工程技术’2、WHERE子句(3)使用IN(NOTIN)关键字【例】检索课程编码为‘001’‘004’‘013’的课程名称方法一:使用逻辑运算符OR方法二:使用IN关键字(比用逻辑运算符更为简单)Selectcounamefromcoursewherecouno=‘001’orcouno=‘004’orcouno=‘013’Selectcounamefromcoursewherecounoin(‘001’,‘004’,‘013’)Selectcounamefromcoursewherecounonotin(‘001’,‘004’,‘013’)练习二:在course表中检索“Linux操作系统”课程的主讲教师查询student表中班级编号(classno)是20000002的学生信息查询course表中课程分类是“工程技术”,并且报名人数未达到限制选课人数的课程名称检索课程编码为001’‘004’‘013’的课程名称答案①Selectteacherfromcoursewherecouname=‘Linux操作系统’②Select*fromstudentwhereclassno=‘20000002’③Selectcounamefromcoursewherekind=‘工程技术’andwillnumlimitnum④Selectcounamefromcoursewherecounoin(‘001’,‘004’,‘013’)2、WHERE子句(4)使用LIKE(NOTLIKE)关键字【通配符】%匹配包括0个或多个字符的字符串_匹配任何一个字符[]匹配任何在范围内的单个字符,例如:[m-p][^]匹配任何不在范围内的单个字符,例如:[^m-p]、[^mnop]【注】通配符和字符串要括在单引号中[[]——如果要查找通配符本身,需要将它们用方括号括起来【练习】解释下面的通配符表示的意义%D%abDACB,aaaaads,Djkl,D_[^a]ab,aabb,bdc,d2[CK]ars[eo]n表示要搜索哪几种字符串?2、WHERE子句【例】查询课程名以字母D开始的课程信息select*fromcoursewherecounamelike‘D%’问题1:检索姓“刘”的学生信息问题2:检索不姓“刘”的学生信息【例】检索姓名的第二个字为“宝”的学生信息,要求显示学生学号和姓名selectstuno,stunamefromstudentwherestunamelike'_宝%'2、WHERE子句(5)使用BETWEEN…AND(NOTBETWEEN…AND)关键字——用于检索在某一特定范围内的信息【问题】检索报名人数大于等于30并且小于等于40的课程信息,要求显示课程名称和报名人数Selectcouname,willnumfromcoursewherewillnum=30andwillnum=40Selectcouname,willnumfromcoursewherewillnumbetween30and402、WHERE子句(6)使用ISNULL关键字——用于检索列中没有赋值的行【问题】检索课程表中教师未定的课程名称和教师名Selectcouname,teacherfromcoursewhereteacherisnull练习三:检索以“制作”两字结尾的课程名检索姓名的第二个字为“丽”的学生信息,要求显示学生学号和姓名检索不姓“刘”的学生信息检索报名人数在20和40之间的课程信息,要求显示课程名称和报名人数3、ORDERBY子句使用ORDERBY子句重新排列检索结果【升序】ASC【降序】DESC可以在ORDERBY子句中指定多个列【例】检索课程表的教师名、课程号、课程名,要求检索结果首先按教师名降序排列,教师名相同时,则按课程号的升序排列Selectteacher,couno,counamefromcourseOrderbyteacherdesc,couno3、ORDERBY子句2、检索报名人数多于限制选课人数的课程信息,要求显示课程名称、报名人数和限制选课人数之比,并按该比例的降序排列selectcouname,willnum/limitnumas‘二者之比'fromcoursewherewillnumlimitnumorderbywillnum/limitnumdesc总结SELECT语句格式、功能SELECT[DISTINCT][TOPN[PERCENT]]字段列表FROM表名WHERE子句中的查询条件比较运算符(如=,,,等)逻辑运算符(AND,OR,NOT)范围运算符(BETWEEN…AND…)列表运算符(IN)模糊查询条件(LIKE)空值判断符(ISNULL)•所有列(*)•列名•表达式•聚合函数作业:P80实训1-6