您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 常用SQL查询语句考试答案及解释
%代表任意多个字符_代表一个字符如果我就真的要查%或者_,怎么办呢?使用escape,转义字符后面的%或_就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用selectusernamefromgg_userwhereusernamelike'%xiao_%'escape'';selectusernamefromgg_userwhereusernamelike'%xiao%%'escape'';AasB,就是给A起个别名叫Bselecta.*fromtable_1asa就是给table_1起个别名叫a,因此前面就可以使用a.*了比如nameas姓名这样的话,查询出来的列就是写姓名一、单表查询练习1、查询学生信息表,查询学生张三的全部基本信息Select*fromA_studentinfowheresname='张三'2、查询学生信息表,查询学生张三和”李四”的基本信息Select*fromA_studentinfowheresname='张三'orsname='李四'3、查询学生信息表,查询姓张学生的基本信息Select*fromA_studentinfowheresnamelike'张%'4、查询学生信息表,查询姓名中含有四字的学生的基本信息Select*fromA_studentinfowheresnamelike'%四%'5、查询学生信息表,查询姓名长度为三个字,姓“李”,且最后一个字是“强”的全部学生信息。select*fromA_studentinfowheresnamelike'李_强'6、查询学生信息表,查询姓张或者姓”李”的学生的基本信息。Select*fromA_studentinfowheresnamelike'张%'orsnamelike'李%'7、查询学生信息表,查询姓张并且所属省份是北京的学生信息Select*fromA_studentinfowheresnamelike'张%'andprovince='北京'8、查询学生信息表,查询所属省份是北京、”新疆”、”山东”或者上海的学生的信息Select*fromA_studentinfowhereprovincein('北京','上海','新疆','山东')9、查询学生信息表,查询姓张,但是所属省份不是北京的学生信息Select*fromA_studentinfowheresnamelike'张%'andprovince!='北京'10、查询学生信息表,查询全部学生信息,并按照“性别”排序,性别相同的情况下按照“所属省份”排序,所属省份相同的情况下再按照“班级”排序select*fromA_studentinfoorderbysex,province,class11、查询学生信息表,查询现有学生都来自于哪些不同的省份selectdistinctprovinceas省份fromA_studentinfo12、查询学生选修信息表,查询没有填写成绩的学生的学号、课程号和成绩Select*fromA_studentcoursewherescoreisnull13、查询学生选修信息表,查询全部填写了成绩的学生的选修信息,并按照“成绩”从高到低进行排序Select*fromA_studentcoursewherescoreisnotnullorderbyscoredesc二、聚合函数练习1、统计学生信息表,统计共有多少个学生Selectcount(*)as学生数量fromA_studentinfo2、统计学生信息表,统计年龄大于20岁的学生有多少个Selectcount(*)as学生数量fromA_studentinfowhere(2008-yearofbirth)203、统计学生信息表,统计入学时间在1980年至1982年的学生人数selectcount(*)as学生数量fromA_studentinfowhereenrollmentbetween'1998-01-01'and'2003-12-30'对比以下查询方式,看看有何不同,为什么?selectcount(*)as学生数量fromA_studentinfowhereenrollmentbetween'1998'and'2003'4、统计学生选修信息表,统计学号为S001的学生的平均成绩Selectavg(score)as平均成绩fromA_studentcoursewheresno='S001'5、统计学生选修信息表,统计学号为S001的学生的总成绩selectsum(score)as总成绩fromA_studentcoursewheresno='S001'6、统计学生选修信息表,查询课程号为”C001”的课程的最高成绩selectmax(score)as最高成绩fromA_studentcoursewherecno='C001'7、统计学生信息表,查询所有学生中的最大年龄是多少select2008-min(yearofbirth)as最大年龄fromA_studentinfo三、分组查询练习1、统计学生选修信息表,统计每个课程的选修人数selectcno,count(*)as学生数量fromA_studentcoursegroupbycno2、统计学生选修信息表,统计每个同学的总成绩selectsno,sum(score)as总成绩fromA_studentcoursegroupbysno3、统计学生信息表,统计每个班级中每种性别的学生人数,并按照班级排序selectclassas班级,sexas性别,count(*)as人数fromA_studentinfogroupbyclass,sexorderbyclass4、统计学生选修信息表,统计每门课程的平均成绩,并按照成绩降序排序Selectcno,avg(score)as平均成绩fromA_studentcoursegroupbycnoorderbyavg(score)desc5、统计学生选修信息表,显示有两门以上课程不及格的学生的学号Selectsnoas不及格学生学号fromA_studentcoursewherescore60groupbysnohavingcount(*)1(1.GroupBy语句简介:GroupBy语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。2.GroupBy的使用:2.1GroupBy[Expressions]:这个恐怕是GroupBy语句最常见的用法了,GroupBy+[分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。比如有如下数据集,其中水果名称(FruitName)和出产国家(ProductPlace)为联合主键:FruitNameProductPlacePriceAppleChina$1.1AppleJapan$2.1AppleUSA$2.5OrangeChina$0.8BananaChina$3.1PeachUSA$3.0如果我们想知道每个国家有多少种水果,那么我们可以通过如下SQL语句来完成:SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国FROMT_TEST_FRUITINFOGROUPBYProductPlace这个SQL语句就是使用了GroupBy+分组字段的方式,那么这句SQL语句就可以解释成“我按照出产国家(ProductPlace)将数据集进行分组,然后分别按照各个组来统计各自的记录数量。”2.2GroupByAll[expressions]:其中有这么一句话“如果使用ALL关键字,那么查询结果将包含由GroupBy子句产生的所有组...没有ALL关键字,那么不显示不符合条件的行组。”这句话听起来好像挺耳熟的,对了,好像和LEFTJOIN和RIGHTJOIN有点像。其实这里是类比LEFTJOIN来进行理解的。还是基于如下这样一个数据集:FruitNameProductPlacePriceAppleChina$1.1AppleJapan$2.1AppleUSA$2.5OrangeChina$0.8BananaChina$3.1PeachUSA$3.0首先我们不使用带ALL关键字的GroupBy语句:SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国FROMT_TEST_FRUITINFOWHERE(ProductPlace'Japan')GROUPBYProductPlace那么在最后结果中由于Japan不符合where语句,所以分组结果中将不会出现Japan。现在我们加入ALL关键字:SELECTCOUNT(*)AS水果种类,ProductPlaceAS出产国FROMT_TEST_FRUITINFOWHERE(ProductPlace'Japan')GROUPBYALLProductPlace重新运行后,我们可以看到Japan的分组,但是对应的“水果种类”不会进行真正的统计,聚合函数会根据返回值的类型用默认值0或者NULL来代替聚合函数的返回值。。。。。。。having子句假如元组在分组前需要按照某种方式加以限制,使不需要的分组为空,可以在groupby子句后加一个having子句。having子句与where有相似之处但也有区别,都是设定条件的语句。0I0G.z9H:S5[在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句。having条件表达示为聚合语句。肯定的说having子句查询过程执行优先级别低于聚合语句。W)q(k%I}:\$|6X再换句话说把上面的having换成where则会出错。统计分组数据时用到聚合语句。对分组数据再次判断时要用having。如果不用这些关系就不存在使用having。直接使用where就行了。,g*K*s1o7o&w8[having就是来弥补where在分组数据判断时的不足。因为where执行优先级别要快于聚合语句。聚合函数,这是必需先讲的一种特殊的函数:0P9u&h7z2n)I5Z)i,V2I例如SUM,COUNT,MAX,AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。SELECTSUM(population)FROMtablename+e'k/w9S#{!a0W.O^这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。通过使用GROUPBY子句,可以让SUM和COUNT这些函数对属于一组的数据起作用。当你指定GROUPBYregion时,属于同一个region(地区)的一组数据将只能返回一行值.也就是说,表中所有除region(地区)外的字段,只能通过SUM,COUNT等聚合函数运算后返回一个值.7B4n#W9D;o)VHAVING子句可以让我们筛选成分组后的各组数据.;Y(};X,\5m1OHAVING子句在聚合后对组记录进行筛选而WHERE子句在聚合前先筛选记录.也就是说作用在GROUPBY子句和HAVING子句前一、显示每个地区的总人口数和总面积.*g)w5u5F7@1`9USELECTregion,SUM(population),SUM(area)FROMbbc#`&e4k'X*n1v%?+|GROUPBYregion先以region把返回记录分成多个组,这就是GROUPBY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。#B*i'z`,}*S,E5i6],L+y-?A%v&m二、显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。SELECTregio
本文标题:常用SQL查询语句考试答案及解释
链接地址:https://www.777doc.com/doc-2488347 .html