SQL查询语句用法及实例资料

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据查询以下查询基于这3张表进行操作。CreateTableS(snovarchar(10)PrimaryKey,snamevarchar(10)notnull,sexvarchar(2),birthdaydatetime,sdeptartmentvarchar(100),Check(Sex='男'orSex='女'))CreateTableC(cnovarchar(10)PrimaryKey,cnamevarchar(100)notnull,teachervarchar(10))CreateTableSC(snovarchar(10),cnovarchar(10),gradesmallint,PrimaryKey(sno,cno))一般查询•格式:Selectcolumn_name[,…n]Fromtablename例如:从学生表中输出学号、姓名和性别。使用语句:例如:从学生表中输出学号、姓名和性别。使用语句:Selectsno,sname,sexFromS通过这个查询可以看出SQL语句操作的是数据集合。OrderBy•让输出的结果以一定的顺序排序,可以给输出的列重新指定列名,使用的Select语句为:Selectcolumn_nameAsnew_column_name[,…n]Fromtablename[OrderBycolumn_name[Asc|Desc][,…n]]Selectsnoas学号,snameas姓名,sexas性别FromSOrderBysexAsc,snoDesc•列出表S中学生的学号和出生年份情况。•列出表S中学生的学号和出生年份情况。Selectsno,year(birthday)as'出生年份'FromSOrderBy'出生年份'Ascyear()返回日期所对应的年份。Distinct和All•Distinct关键字出去重复的列名记录,All关键字输出所有的查询结果,默认时为All。SelectDistinctsdeptartmentFromS•列出表SC中选修了课程的学生学号。•列出表SC中选修了课程的学生学号。SelectDistinctsnoFromSCTop•指定只返回前面一定数量的数据。当查询到的数据量非常庞大,但没有必要对所有数据进行浏览时,使用Top关键字可以大大减少查询花费的时间。Select[Topinteger|TopintegerPercent]column_name[,…n]FromtablenameSelectTop5sno,sname,sexFromSSelectTop5percentsno,sname,sexFromS•查询SC表中学号为“00011101”的同学的成绩为最高的课程号。•查询SC表中学号为“00011101”的同学的成绩为最高的课程号。SelectTop1sno,cno,gradeFromSCWheresno='00011101'OrderBygradeDesc比较运算符•=、、=、、=、!=、!、!•列出表SC中成绩在大于等于87分的学生学号和其选修的课程号。Selectsno,cnoFromSCWhereGrade=87或Selectsno,cnoFromSCWhereGrade!87•列出表S中“汉语言文学”系年龄小于27岁的学生的学号和出生年份情况。•列出表S中“汉语言文学”系年龄小于27岁的学生的学号和出生年份情况。Selectsno,year(birthday)FromSWheresdeptartment='汉语言文学'and(year(getdate())-year(birthday))27函数getdate()返回当前机器日期聚合函数查询•常用的聚合函数有:Sum、Avg、Count、Max、MinSelectCount(*)FromSSelectCount(distinctsdeptartment)FromS•查询选修了课程的学生人数•查询选修了课程的学生人数•SelectCount(Distinctsno)FromSC•计算1号课程的学生平均成绩•计算1号课程的学生平均成绩•SelectAVG(Grade)FromSCWhere•Cno=‘1’•查询选修1号课程的学生最高分数•查询选修1号课程的学生最高分数•SelectMAX(Grade)FromSC•Wherecno=‘1’GroupBy•查询组数据的属性,GroupBy子句为数据分组,然后按每组数据返回查询结果。SelectSex,Count(*)FromSGroupBySex使用GroupBy子句后,Select子句的列名列表只能出现分组属性和集函数。比如:Selectsno,cnoFromSCGroupBycno是错误的。•求选修了各课程的学生人数•求选修了各课程的学生人数•Selectcno,count(*)FromSC•GroupBycno条件查询•一般的条件查询。Selectcolumn_name[,…n]Fromtablename[Wheresearch_condition]Select*FromSWhereSex='女'Like•Like关键字指示在搜索条件中相匹配的模式,Like前也可以前置Not,返回不匹配的所有行。语法形式为:match_expression[Not]Likepattern如果模式表达式match_expression匹配模式pattern,则返回True,否则返回False。模式pattern通常被定义为字符串和通配符,通配符主要有:%:匹配0个或多个字符的字符串_:匹配任何单个的字符[]:排列通配符,匹配任何在范围或集合中的单个字符。如[a-z],a~z的所有单个字符。[^]:排除通配符,匹配不在范围或集合中的单个字符。如[^q-t],除q~t的任何字符。•在表S中查询“计算机科学与技术”系学生的姓名。Selectsnameas'姓名',sdeptartmentas'所在系'FromSWheresdeptartmentLike'计算机科学与技术'Select*FromSWheresnameLike'王%‘Select*FromSWheresnameLike'王_‘Select*FromSWheresnameLike'%王%'ESCAPE•当用户要查询的字符串本身就含有%和_时,要使用Escape短语对通配符进行转义。查询DB_Design课程的所有信息Select*FromCWherecnameLike'DB\_Design'Escape'\'•如查询包含5%的字符串可以写成:Select*FromCWherecnameLike'%5\%%'Escape'\‘或Select*FromCWherecnameLike'%5[%]%'HAVING•用于组或者聚合函数的搜索条件。它常用于GROUPBY子句后,用于搜索条件必须在结果分组之后测试的情况。如果没有GROUPBY子句,则HAVING仅在选择列表用于聚合函数。语法结构为:HAVINGsearch_condition在HAVING子句中不能使用text、image和ntext数据类型。•查询90分以上的学生的学号及课程数。•查询90分以上的学生的学号及课程数。Selectsno,Count(*)as'课程数'FromSCWhereGrade=90GroupBysno•列出选修课程超过3门的学生学号及选修门数•列出选修课程超过3门的学生学号及选修门数Selectsno,count(*)FromSCGroupBysnoHavingcount(*)3•查询有三门以上课程是90分以上的学生的学号及课程数。•查询有三门以上课程是90分以上的学生的学号及课程数。Selectsno,Count(*)as'课程数'FromSCWhereGrade=90GroupBysnoHavingCount(*)=3IN•用于搜索条件判定所给的测试表达式是否与子查询或者值列表中的任何值匹配,如果在子查询或者值列表中发现了与测试表达式匹配的结果,则返回TRUE值,NOTIN返回IN的否定结果。•查询“数学与应用数学”与“计算机科学与技术”系的学生名单。•查询“数学与应用数学”与“计算机科学与技术”系的学生名单。Selectsno,snameFromSWheresdeptartmentin('数学与应用数学','计算机科学与技术')•查询选修了“C01”号课程的学生学号和姓名。•查询选修了“C01”号课程的学生学号和姓名。Selectsno,snameFromSWheresnoin(SelectsnoFromSCWherecno='C01')•查询叶芬琴同学的学号及所选修的课程号。•查询叶芬琴同学的学号及所选修的课程号。•Selectsno,cnoFromSCWheresnoin(SelectsnoFromSWheresname=‘叶芬琴’)•这里in可用=代替•查询没有选修C02课程的学生姓名。•查询没有选修C02课程的学生姓名。•SelectsnameFromSWheresnonotin(SelectsnoFromSCWherecno=‘C02’)BETWEENAND•规定一个范围,在搜索条件中测试,如果测试表达式的值在范围中返回TRUE;若前置NOT,则返回否定的结果。•查询成绩在60-100分之间的学生学号。•查询成绩在60-100分之间的学生学号。SelectsnoFromSCWhereGradeBetween60and100EXISTS•用来测试跟随的子查询中现有的行。如果某些行满足子查询,则返回TRUE。•查询所有选修了“C01”号课程的学生姓名。SelectsnameFromSWhereExists(Select*FromSCWheresno=s.snoandcno='C01')•查询所有选修了“C01”号课程的学生姓名。SelectsnameFromSWheresnoin(SelectsnoFromSCWherecno='C01')•检索没有选修课程“数据库”的学生姓名和年龄。•检索没有选修课程“数据库”的学生姓名和年龄。Selectsname,year(getdate())-year(birthday)FromSwherenotExists(Select*FromSCWhereS.sno=SC.snoandSC.cno=(SelectcnoFromCwherecname='数据库'))日期时间的比较运算符•当设置datetime或smalldatetime值时,如果只指定时间,则日期默认为1900年1月1日。如果只指定日期,则时间默认为午夜。•若要搜寻日期或时间的一部分,请使用Like运算符。SQLServer首先把数据转换为datetime格式,然后再转换为varchar格式。•SQLServer可以识别下列括在单引号中的日期和时间格式。•‘4/15/1998’、’1978-01-05’、’19981207’•在基本表S中检索1982-3-12出生的学生情况。•在基本表S中检索1982-3-12出生的学生情况。•Select*FromSWhereBirthday='1982-3-12'•在基本表S中检索出生日期包含17日的学生情况。•在基本表S中检索出生日期包含17日的学生情况。•Select*FromSWherebirthdaylike‘%17%’•在基本表S中检索在1980~1982年之间出生的学生情况。•在基本表S中检索在1980~1982年之间出生的学生情况。•Select*FromSWhereyear(birthday)1980andyear(birthday)1982多表查询•用户还可以把两个或多个表连接起来一起进行多表查询。支持的连接操作有:内连接、左外连接、右外连接、全外连接、交叉连接。内连接•是默认的连接类型,它指定只有与ON条件匹配的表行才能包含在结果集中,不匹配的行丢弃。语法格式为:•Selectcolumn_na

1 / 124
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功