2015年06月19日sql查询语句数据库开发part_第1页
2015年06月19日sql查询语句数据库开发part_第2页
2015年06月19日sql查询语句数据库开发part_第3页
2015年06月19日sql查询语句数据库开发part_第4页
2015年06月19日sql查询语句数据库开发part_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据检索执行备注中的代码创建测试数据表。简单的数据检索:SELECT*FROMStudent只检索需要的列:SELECTsNameFROMStudent、SELECTsName,sAgeFROMStudent列别名:SELECTsNameAS姓名,sAgeAS年龄,sBirthdayAS出生日期FROMStudent使用where检索符合条件的数据:SELECTsNameFROMStudentWHEREsSex=‘女’。还可以检索不与任何表关联的数据:select1+1;selectselectgetdate();复习 创建Teacher表tIdtNametSextAgetSalary并且在创建表的同时添加约束TopDistinctTop获取前几条数据获得年纪最小的5个学生获得年纪最大的10%的学生Distinct去除重复数据selectdistinctsNamefromstudentselectdistinctsName,sAgefromstudentDISTINCT是对整个结果集进行数据重复处理的,而不是针对某一个列Top_DISTINCT聚合函数SQL聚合函数:MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(和)、COUNT(数量)Count:求所有女生的个数。所有叫大黄的人。注意null值平均成绩selectavg(english)fromscore男学生出生日期的最大值和最小值:selectmax(sBirthday),min(sBirthday)fromstudentwheresSex='男'带条件的查询Select…from…where查询没有及格的学生的学号查询年龄在20-30岁之间的男学生Between…and…在之间查询年龄在20-30岁之间的男学生查询成绩在80-90分之间的所有学生查询班级id为1,2,3的所有学生in关键字带条件的查询-模糊查询查询所有姓张的同学Select*fromstudentwhereleft(sName,1)=‘张‘看上去很美,如果改成查询名字中带亮的学生怎么做?换一种做法likeSelect*fromstudentwheresNamelike‘张%’会吧所有姓张的都查询到,现在我想查询姓张并且名字是一个字的学生?通配符%多字符匹配的通配符,它匹配任意次数(零或多个)出现的任意字符通配符_单字符匹配,它匹配单个出现的字符[]只匹配一个字符并且这个字符必须是[]范围内的[0-9][a-z][a,b,c]not与like一起使用:notlike….空值处理数据库中,一个列如果没有指定值,那么值就为null,这个null和C#中的null,数据库中的null表示“不知道”,而不是表示没有。因此selectnull+1结果是null,因为“不知道”加1的结果还是“不知道”。select*fromscorewhereenglish=null;select*fromscorewhereenglish!=null;都没有任何返回结果,因为数据库也“不知道”。SQL中使用isnull、isnotnull来进行空值判断:select*fromscorewhereenglishisnull;select*fromscorewhereenglishisnotnull;ISNULL(check_expression,replacement_value)使用isnull计算平均值数据排序ORDERBY子句位于SELECT语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列,ASC)还是降序(从大到小排列,DESC)。按照年龄升序排序所有学生信息的列表:SELECT*FROMStudentORDERBYsAgeASC按照英语成绩从大到小排序,如果英语成绩相同则按照数学成绩从大到小排序:SELECT*FROMScoreORDERBYenglishDESC,mathDESCORDERBY子句要放到WHERE子句之后:SELECT*FROMScorewhereenglish>=60andmath>=60ORDERBYenglishDESC,mathDESCOrderby语句一般要放到所有语句的后面,就是先让其他语句进行筛选,全部筛选完成后,最后排序一下。数据分组select

语句中可以使用group

by

子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息按照班级进行分组统计各个班级的人数:selectsClassId,count(sName)fromstudentgroupbysClassIdGROUPBY子句必须放到WHERE语句的之后没有出现在GROUPBY子句中的列是不能放到SELECT语句后的列名列表中的(聚合函数中除外)错误:selectsClassId,count(sName),sAgefromstudentgroupbysClassId正确:selectsClassId,count(*),avg(sAge)fromstudentgroupbysClassIdgroupby练习求每个班级男生和女生学员的个数求每个班级的平均年龄求每个班级男生的个数求班级人数超过6的有哪些班级求班级男同学个数超过5的班级Having语句Having是GroupBy的条件对分组后的数据进行筛选在Where中不能使用聚合函数,必须使用Having,Having要位于GroupBy之后,查询班级人数超过三个人的班级selectsClassId,count(sName)fromstudentgroupbysClassIdhavingcount(sName)>3注意Having中不能使用未参与分组的列,Having不能替代where。作用不一样,Having是对组进行过滤。SQL语句的执行顺序5>…Select5-1>选择列,5-2>distinct,5-3>top1>…From表2>…Where条件3>…Groupby列4>…Having筛选条件6>…Orderby列联合结果集简单的结果集联合:查找所有出去旅游的老师和学员selecttName,tSexfromteacherunionselectsName,sSexfromstudent可是,怎样从一个表中区分出老师和学生?基本的原则:每个结果集必须有相同的列数;每个结果集的列必须类型相容。selecttName,tSex,-1fromteacherunionselectsName,sSex,sClassIdfromstudent联合:将多个结果集合并成一个结果集。union(去除重复)、unionallUnionallselecttName,tSexfromteacherunionselectsName,sSexfromstudentUNION合并两个查询结果集,并且将其中完全重复的数据行合并为一条selecttName,tSexfromteacherunionallselectsName,sSexfromstudentUnion因为要进行重复值扫描,所以效率低,因此如果不是确定要合并重复行,那么就用UNIONALL案例1要求在一个表格中查询出学生的英语最高成绩、最低成绩、平均成绩select'english最高成绩',max(english)fromscoreunionallselect'english最低成绩',min(english)fromscoreunionallselect'english平均',avg(english)fromscore案例2查询每位老师的信息,包括姓名、工资,并且在最后一行加上平均工资和最高工资selecttName,tSalaryfromteacherunionallselect'平均工资',avg(tSalary)fromteacherunionallselect'最高工资',avg(tSalary)fromteacher一次插入多条数据insertintoScore(studentId,english,math)select1,80,100unionselect2,60,80unionselect3,50,59unionselect4,66,89unionselect5,59,100*将一坨数据进行复制或者插入--把现有表的数据插入到新表(表不能存在)注意约束--select*intonewStudentfromstudent--把现有表的数据复制到一个已存在的表(backupStudent表必须已经存在)--insertintobackupStudentselect*fromstudents练习创建MyCompany数据库部门表DepartmentdIddName员工表: eId, eName, eSex, eAge, eSalary, eDepId建库建表建约束添加测试数据练习1、查询所有员工2、查询工资超过2000块钱的员工3、查询2006年~2008年入职的员工3.1查询最新进来公司的3个员工4、查询员工的平均工资,最低工资5、查询总共有多少员工6、查询每个部门有多少员工7、查询每个部门的平均工资8、查询每个部门男员工的平均工资9、查询平均工资超过2000的那些部门10、查询员工工资(姓名,工资)的同时,统一结果集显示平均工资和最高工资11、查询名字里包含"定"、“月”的这些员工,并对结果集按照年龄降序排列字符串函数(*)LEN():计算字符串长度LOWER()、UPPER():转小写、大写LTRIM():字符串左侧的空格去掉RTRIM():字符串右侧的空格去掉LTRIM(RTRIM('bb'))LEFT()、RIGHT()截取取字符串SUBSTRING(string,start_position,length)参数string为主字符串,start_position为子字符串在主字符串中的起始位置,length为子字符串的最大长度。SELECTSUBSTRING('abcdef111',2,3)查找姓张的并且名字是两个字的人日期函数GETDATE():取得当前日期时间DATEADD(datepart,number,date),计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可选值见备注。DATEADD(DAY,3,date)为计算日期date的3天后的日期,而DATEADD(MONTH,-8,date)为计算日期date的8个月之前的日期DATEDIFF(datepart,startdate,enddate):计算两个日期之间的差额。datepart为计量单位,可取值参考DateAdd。统计不同岁数的学生个数:selectDateDiff(year,sInDate,getdate()),count(*)fromstudentGroupbyDateDiff(year,sInDate,getdate())DATEPART(datepart,date):返回一个日期的特定部分yearmonthdayhourminsecquarterYearMonthDay统计学生的生日年份个数:selectDatePart(year,sBirthday),count(*)fromstudentgroupbyDatePart(year,sBirthday)1990年出生的人的个数?练习:统计这个月入职的员工

统计不同年份入职的员工空值处理函数执行备注中的代码如果是null则用value来代替。ISNULL(expression,value):如果expression不为空则返回expression,否则返回value。selectstudentId,isnull(english,0)fromscore类型转换函数CAST(express

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论