您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 02_MySQL查询
Mysql查询2什么是查询?ApplicationLogic客户程序查询请求查询结果集SQLSERVERABCDEFGSELECT*FROMSALES查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来3怎么查的?学员编号学员姓名地址所在班级…….001张明全湖南长沙S201002李菲湖北宜昌S202003于寄谦甘肃天水S204004刘国正山东荷泽S201005周接轮台湾新竹S204006巩小妹香港龙湾S203007巩大妹香港龙湾S203008张明敏北京顺义S202009矛十八四川棉阳S204010罗林光陕西临潼S202011司马坡新疆喀什S201S202陕西临潼罗林光010…S202湖北宜昌李菲002S202北京顺义张明敏008SELECT*FROMStudentsHWHERE所在班级=‘S202’4思考既然查询得到的“结果集”的结构类似于一张表,那么可以在“结果集”上继续进行查询吗?5查询SELECT列名FROM表名[WHERE查询条件表达式][ORDERBY排序的列名[ASC或DESC]]列名称SELECTSCode,SName,SAddress表名FROMStudents过滤条件WHERESSEX=0排序条件ORDERBYSCodeSELECTSCode,SName,SAddressFROMStudentsWHERESSEX=0ORDERBYSCode6数据查询-基础查询全部的行和列SELECT*FROMStudents查询部分行SELECTSCode,SName,SAddressFROMStudentsWHERESAddress='河南新乡'SELECTSCode,SName,SAddressFROMStudentsWHERESAddress'河南新乡'7数据查询-列名使用AS来命名列SELECTSCodeAS学员编号,SNameAS学员姓名,SAddressAS学员地址FROMStudentsWHERESAddress'河南新乡'SELECTconcat(FirstName,LastName)AS'姓名'FROMEmployees8数据查询-空行常量列查询空行SELECTSNameFROMStudentsWHERESEmailISNULL使用常量列SELECTSName,SAddress,'河北新龙'AS学校名称FROMStudents思考:非空行怎么查?9数据查询-限制行数限制固定行数SELECTSName,SAddressFROMStudentsWHERESSex=0limit5,510数据查询-排序2-1升序排列SELECTStudentIDAs学员编号,(Score*0.9+5)As综合成绩FROMScoreWHERE(Score*0.9+5)60ORDERBYScore11数据查询-排序2-2按多列排序SELECTStudentIDAs学员编号,ScoreAs成绩FROMScoreWHEREScore60ORDERBYScore,CourseID思考:排序中的字段,可以使用表达式吗?——如果不可以,请说明原因;——如果可以,请举例说明;12模糊查询—LIKE•查询时,字段中的内容并不一定与查询内容完全匹配,只要字段中含有这些内容SELECTSNameAS姓名FROMStudentsWHERESNameLIKE'张%'姓名张果老张飞张扬出去•模式匹配:_,%13模糊查询—ISNULL•把某一字段中内容为空的记录查询出来SELECTSNameAs姓名SAddressAS地址FROMStudentsWHERESAddressISNULL姓名地址张果老NULL李寻欢NULL令狐冲NULL程灵素NULL……猜一猜:把Students表中某些行的SAddress字段值删掉后:——使用ISNULL能查询出来这些数据行吗?——怎么查询出这些行来?14模糊查询—BETWEEN•把某一字段中内容在特定范围内的记录查询出来SELECTStudentID,ScoreFROMSCoreWHEREScoreBETWEEN60AND80StudentIDScore77786111761764……15模糊查询—IN•把某一字段中内容与所列出的查询内容列表匹配的记录查询出来SELECTSNameAS学员姓名,SAddressAs地址FROMStudentsWHERESAddressIN('北京','广州','上海')学员姓名地址李扬广州于紫电上海李青霜北京司马弓上海……16问题成绩表中存储了所有学员的成绩,我想知道:学员的总成绩、平均成绩、有成绩的学员总共有多少名怎么办?17聚合函数-1SUMAVGSELECTSUM(ytd_sales)FROMtitlesWHEREtype='business'SELECTSUM(ytd_sales),PriceFROMtitlesWHEREtype='business'×SELECTAVG(SCore)AS平均成绩FromScoreWHEREScore=6018聚合函数-2MAX、MINCOUNTSELECTAVG(SCore)AS平均成绩,MAX(Score)AS最高分,MIN(Score)AS最低分FromScoreWHEREScore=60SELECTCOUNT(*)AS及格人数FromScoreWHEREScore=6019问题如果不是统计所有人所有课程的总成绩而是想求每一门课的平均绩或者某个人的所有课的总成绩怎么办?20分组汇总这三个数取平均值第4-6分数取平均值最后三个数取平均值有一个学员参加考试21分组查询—GROUPBYSELECTCourseID,AVG(Score)AS课程平均成绩FROMScoreGROUPBYCourseID22分组查询—思考SELECTStudentID,CourseID,AVG(Score)AS课程平均成绩FROMScoreGROUPBYCourseID思考:执行以下的T-SQL:——结果如何?23分组查询—多列分组第一次内部测试成绩第二次内部测试成绩第三次内部测试成绩补考成绩怎么样来统计每次的内部测试不同学员的成绩?24分组查询—再看看内部测试成绩还要把这个加上取平均StudentID和CourseID的组合存在重复……需要按照这两个来进行分组,避免StudentID和CourseID同时一样25分组查询—HAVINGSELECTStudentIDAS学员编号,CourseIDAS内部测试,AVG(Score)AS内部测试平均成绩FROMScoreGROUPBYStudentID,CourseIDHAVINGCOUNT(Score)126分组查询—对比WHEREGROUPBYHAVINGWHERE子句从数据源中去掉不符合其搜索条件的数据GROUPBY子句搜集数据行到各个组中,统计函数为各个组计算统计值HAVING子句去掉不符合其组搜索条件的各组数据行27分组查询—思考SELECT部门编号,COUNT(*)FROM员工信息表WHERE工资=2000GROUPBY部门编号HAVINGCOUNT(*)1思考:分析以下T-SQL的含义28多表联结查询—问题学员内部测试成绩查询的每次显示的都是学员的编号信息,因为该表中只存储了学员的编号;实际上最好显示学员的姓名,而姓名存储在学员信息表;如何同时从这两个表中取得数据?29多表联结查询—分类•内联结(INNERJOIN)•外联结——左外联结(LEFTJOIN)——右外联结(RIGHTJOIN)——完整外联结(FULLJOIN)30SELECTS.SName,C.CourseID,C.ScoreFromScoreASCINNERJOINStudentsASSONC.StudentID=S.SCodeScoreStudentsIDCourseIDScore122300100100200297896776300381猜一猜:这样写,返回的查询结果是一样的吗?SELECTS.SName,C.CourseID,C.ScoreFromStudentsASSINNERJOINScoreASCONC.StudentID=S.SCode再猜一猜:以下返回多少行?SELECTS.SName,C.CourseID,C.ScoreFromStudentsASSINNERJOINScoreASCONC.StudentIDS.SCode多表联结查询—内联结-1StundentsSName梅超风陈玄风陆乘风曲灵风SCode1234查询结果SName梅超风陈玄风陈玄风陆乘风CourseIDScore00100100200297896776陆乘风0038131多表联结查询—内联结-2SELECTStudents.SName,Score.CourseID,Score.ScoreFROMStudents,ScoreWHEREStudents.SCode=Score.StudentID32多表联结查询—三表联结SELECTS.SNameAS姓名,CS.CourseNameAS课程,C.ScoreAS成绩FROMStudentsASSINNERJOINScoreASCON(S.SCode=C.StudentID)INNERJOINCourseASCSON(CS.CourseID=C.CourseID)33ScoreStudentsIDCourseIDScore122300100100200297896776300381多表联结查询—左外联结StundentsSName梅超风陈玄风陆乘风曲灵风SCode1234查询结果SName梅超风陈玄风陈玄风陆乘风CourseIDScore00100100200297896776陆乘风00381曲灵风NULLNULLSELECTS.SName,C.CourseID,C.ScoreFromStudentsASSLEFTJOINScoreASCONC.StudentID=S.SCode猜一猜:这样写,返回的查询结果是一样的吗?SELECTS.SName,C.CourseID,C.ScoreFromScoreASCLEFTJOINStudentsASSONC.StudentID=S.SCode34多表联结查询—右外联结SELECTTitles.Title_id,Titles.Title,Publishers.Pub_nameFROMtitlesRIGHTOUTERJOINPublishersONTitles.Pub_id=Publishers.Pub_id谢谢
本文标题:02_MySQL查询
链接地址:https://www.777doc.com/doc-3708616 .html