免费预览已结束,剩余120页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章MySql,学生第一次课时,将笔记本带到课堂-演示软件安装,概述,学习目标:掌握Word文档的建立、编辑、格式化、保存、输出的基本操作熟悉Word模板的使用掌握Word表格的相关操作图形了解在Word中处理图片、图形的方法了解样式、域的基本使用,第三章主要内容,8.1数据库8.2SQL语句3.33.4输入文本内容“插入”菜单3.5修改内容“编辑”菜单3.6文档排版“格式”菜单3.7Word对象的创建与设置3.8表格“表格”菜单3.9打印输出3.10综合实例,3.1数据库,3.1.1数据库概念3.1.2安装MYSQL数据库3.1.3MySQL服务器启动与客户端的登录,3.1.1数据库概念(了解),数据库就是用来存储和管理数据的仓库!数据库存储数据的优先:可存储大量数据;方便检索;保持数据的一致性、完整性;安全,可共享;通过组合分析,可产生新数据。,数据库的发展历程,没有数据库,使用磁盘文件存储数据;层次结构模型数据库;网状结构模型数据库;关系结构模型数据库:使用二维表格来存储数据;关系-对象模型数据库;注意:MySQL就是关系型数据库!Java-面向对象;数据库-面向关系;二者之间有一个映射。,常见数据库,Oracle:市场使用率最高!业界霸主;(1)“神喻”-国外应用的名字;(2)甲骨文-在中国注册的名字。DB2:IBM;SQLServer:微软;(课堂上,.net平台使用自己的东西)Sybase:赛尔斯;MySQL:甲骨文;(起始时免费,新版本也开始收费,目前用的5.5版本还是免费的),理解数据库,我们现在所说的数据库泛指“关系型数据库管理系统(RDBMS-Relationaldatabasemanagementsystem)”,即“数据库服务器”。,理解数据库,当我们安装了数据库服务器后,就可以在数据库服务器中创建数据库,每个数据库中还可以包含多张表。,理解数据库,数据库表就是一个多行多列的表格。在创建表时,需要指定表的列数,以及列名称,列类型等信息。而不用指定表格的行数,行数是没有上限的。下面是tab_student表的结构:,理解数据库,当把表格创建好了之后,就可以向表格中添加数据了。向表格添加数据是以行为单位的!下面是s_student表的记录:,注意:大家要学会区分什么是表结构,什么是表记录。,应用程序与数据库,应用程序使用数据库完成对数据的存储!,应用程序与数据库,(1)数据库和应用程序(如Java)不在同一台机器上,远程访问数据库。例如家(应用程序)和仓库(专门存放数据的,数据库)在两个地点。讲课时,为了方便数据库和应用程序是在同一台机器上的。(2)数据库和应用程序离得很远。远程数据库。如家和仓库离得很远。,3.1.2安装MySQL数据库,1、安装MySQL2、MySQL目录结构,安装MySQL,安装参考:MySQL安装图解.doc校验安装:MySQL安装图解.doc重点内容:开启关闭服务器以及登录退出客户端。卸载方法:MySQL安装图解.doc,MySQL目录结构,参见:MySQL安装目录介绍.doc,3.1.3MySQL服务器启动与客户端的登录,服务器操作开启服务器(必须保证mysql为windows服务):两种方法。验证方法:查看进程表中是否存在:mysqld.exe进程(存在)客户登操作开始-运行-cmd1.登录服务器:mysql-uroot-p123-hlocalhost-u:后面跟随用户名-p:后面跟随密码-h:后面跟随IP,可以省略,也可以为-hlocalhost或者-h,表示本机IP验证方法:查看进程表中是否存在:mysql.exe进程(存在)2.退出服务器:exit或quit,8.2SQL语句,8.2.1SQL概述8.2.2SQL分类8.2.3DDL(用的不太多)8.2.4DML(用的多)8.2.5DCL(用的很少)8.2.6DQL(用的多),SQL概述,SQL(StructuredQueryLanguage)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQLServer等。通俗地讲,SQL语言用于服务器端与客户端对话使用。即客户端使用SQL来操作服务器。启动mysql.exe,连接服务器后,就可以使用sql来操作服务器了。将来会使用Java程序连接服务器,然后使用sql来操作服务器。,SQL概述,SQL标准(例如SQL99,即1999年制定的标准,不断升级版本):由国际标准化组织(ISO)制定的,对DBMS的统一操作方式(例如相同的语句可以操作:mysql、oracle、SQLServer等,即这些数据库通用该语言)。SQL方言虽然SQL可以用在所有关系型数据库中,但很多数据库还会有一些自己独有的语法,这就称之为方言!例如limit语句只在MySQL中可以使用,其它数据库都不支持!当然,Oracle或SQLServer都有自己的方言。,SQL概述,语法要求SQL语句可以单行或多行书写,以分号结尾(注意:不同的使用环境对是否具有分号的要求也不同);可以用空格和缩进来来增强语句的可读性;关键字不区别大小写,建议使用大写;如:SELECT*FROMbook;,SQL语句分类,1.DDL(DataDefinitionLanguage):数据定义语言,用来定义数据库对象:库、表、列等;创建、删除、修改:库、表结构!2.DML(DataManipulationLanguage):数据操作语言,用来定义数据库记录(数据);增、删、改:表记录3.DCL(DataControlLanguage):数据控制语言,用来定义访问权限和安全级别;4.DQL*(DataQueryLanguage):数据查询语言,用来查询记录(数据)。本质上属于2的一部分。ddl:数据库或表的结构操作(重点)dml:对表的记录进行更新(增、删、改)(重点)dql:对表的记录的查询(重点,难点)dcl:对用户的创建,及授权!(尽量不用使用root,创建其他普通用户并使用),DDL知识-数据库操作,1.数据库操作查看所有数据库:SHOWDATABASES;切换(选择要操作的)数据库:USE数据库名;创建数据库:CREATEDATABASEIFNOTEXISTSmydb1CHARSET=utf8创建数据库,例如:CREATEDATABASEmydb1;,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATEDATABASEIFNOTEXISTSmydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错。“CHARSET=utf8”选项可以省略,因为在安装MySql时,已经指定了符号集。如果不指定字符集,则默认使用utf8。,DDL知识,1.数据库操作删除数据库:DROPDATABASEIFEXISTSmydb1删除数据库,例如:DROPDATABASEmydb1;,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROPDATABASEIFEXISTSmydb1,就算mydb1不存在,也不会的报错。修改数据库编码:ALTERDATABASEmydb1CHARACTERSETutf8;修改数据库mydb1的编码为utf8。注意,在MySQL中所有的UTF-8编码都不能使用中间的“-”,即UTF-8要书写为UTF8。,DDL知识(软件SQLyog)-数据类型,2.数据类型(参见“MySQL数据类型.doc”,MySQL中数据类型后面括号内的数字通常表示实际数据的位数)MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。int:整型double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;decimal:浮点型,在表示钱方面使用该类型,因为不会出现精度缺失问题;,DDL知识,2.数据类型char:固定长度字符串类型;char(255),数据的长度不足指定长度,补足到指定长度!如char(4),当数据长度为2时,会在后面添加2个空格补位。注意:255表示字符串的长度或者255Byte,此时一个字符便为一个Byte。适合于身份证号码、时间等固定长度场合的表示。varchar:可变长度字符串类型;varchar(65535),数据的长度不足指定长度,不补足到指定长度!如zhangSan。缺点:需要使用一个字节用来记录长度。当数据长度大于255时,记录长度就需要2个字节了。,DDL知识,text(对应“标准”里的clob类型):字符串类型;MySQL独有的类型。很小-tinytext小-text中-mediumtext大-longtext,存储一本小说blob:字节类型;很小-tinyblob小-blob中-mediumblob大-longblobdate:日期类型,格式为:yyyy-MM-dd;time:时间类型,格式为:hh:mm:sstimestamp:时间戳类型;包含时间和日期。,DDL知识-表的操作,1、创建表语法如下:CREATEIFNOTEXISTSTABLE表名(列名列类型,列名列类型,.列名列类型);,DDL知识-表的操作,1、创建表例如,创建如下表:CREATETABLEstu(sidCHAR(6),snameVARCHAR(20),ageINT,genderVARCHAR(10);表的字段名称:学号、姓名、年龄和性别。,DDL知识-表的操作,又如,创建如下表(雇工表):CREATETABLEemp(eidCHAR(6),enameVARCHAR(50),ageINT,genderVARCHAR(6),birthdayDATE,hiredateDATE,salaryDECIMAL(7,2),resumeVARCHAR(1000);表的字段名称:工号、姓名、年龄、性别、生日、雇用日期、薪水、个人简历。,DDL知识-表的操作,2、查看当前数据库中所有表名称:SHOWTABLES;3、查看指定表的创建语句:SHOWCREATETABLE表名(了解);如:SHOWCREATETABLEemp;,查看emp表的创建语句;4、查看表结构:DESC表名;如:DESCemp;,查看emp表结构;5、删除表:DROPTABLE表名;如:DROPTABLEemp;,删除emp表;,DDL知识-表的操作,6、修改表:前缀:ALTERTABLE表名修改之添加列:ALTERTABLE表名ADD(列名列类型,列名列类型,.列名列类型);如:给stu表添加classname列:ALTERTABLEstuADD(classnamevarchar(100);,DDL知识-表的操作,6、修改表:修改之修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在数据),语法如下:ALTERTABLE表名MODIFY列名列类型;如:修改stu表的gender列类型为CHAR(2):ALTERTABLEstuMODIFYgenderCHAR(2);,DDL知识-表的操作,6、修改表:修改之修改列名,语法如下:ALTERTABLE表名CHANGE原列名新列名列类型;如:修改stu表的gender列名为sex:ALTERTABLEstuchangegendersexCHAR(10);,DDL知识-表的操作,6、修改表:修改之删除列,语法如下:ALTERTABLE表名DROP列名;如:删除stu表的classname列:ALTERTABLEstuDROPclassname;,DDL知识-表的操作,6、修改表修改表名称,语法如下:ALTERTABLE原表名RENAMETO新表名;如:修改stu表名称为student:ALTERTABLEstuRENAMETOstudent;,DML知识-插入数据,DML(数据操作语言,它是对表记录的操作(增、删、改)!)预备知识:DQL查询表记录:SELECT*FROM表名;1.插入数据INTERTINTO表名(列名1,列名2,.)VALUES(列值1,列值2,.);在表名后给出要插入的列名,其他没有指定的列等同于插入null值。所以插入记录总是插入一行,不可能是半行。在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应。,DML知识-插入数据,例如:INSERTINTOstu(sid,sname,age,gender)VALUES(s_1001,zhangSan,23,male);注意:(1)在数据库中所有的字符串类型,必须使用单引,不能使用双引!(2)日期类型也要使用单引!又如:INSERTINTOstu(sid,sname)VALUES(s_1001,zhangSan);注意:因为没有插入age和gender列的数据,所以该条记录的age和gender值上为NULL,DML知识-插入数据,又如:INSERTINTOstu(sname,age,sid,gender)VALUES(wangwu,23,s_1003,female);注意:在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应。,DML知识-插入数据,1.插入数据INTERTINTO表名VALUES(列值1,列值2);没有给出要插入的列,那么表示插入所有列。值的个数必须是该表列的个数。值的顺序,必须与表创建时给出的列的顺序相同。不建议使用此种方式。如:INSERTINTOstuVALUES(s_1002,liSi,32,female);注意:插入记录中尽可能不出现汉字。,DML知识-修改数据,2.修改数据(一次可以同时修改表中的多条记录)UPDATE表名SET列名1=列值1,列名2=列值2,.WHERE条件说明:条件(条件可选的):条件必须是一个boolean类型的值或表达式:UPDATEstuSETsname=zhangSanSan,age=32,gender=maleWHEREsid=s_1002;运算符:=、!=(不等于)、(不等于)、=、30ANDgender=male;(2)UPDATEstuSETgender=femaleWHEREgenderISNULL;(3)UPDATEstuSETage=age+1WHEREsname=liSi;注意:在SQL中赋值和等于都是用“=”,根据上下文进行判断具体含义。,DML知识-修改数据,例如:(4)UPDATEstuSETage=age+1WHEREage=22ANDage用户只能在指定的IP地址上登录(2)CREATEUSER用户名%IDENTIFIEDBY密码;用户可以在任意IP地址上登录,DCL知识-创建用户,1.创建用户(使用root登录(此时权限最大),而后进行创建用户操作)例如:(1)CREATEUSERuser1localhostIDENTIFIEDBY123;user1用户只能在localhost这个IP登录mysql服务器验证方法:mysql-uuser1-p123或者mysql-uuser1-p123-hlocalhost验证登录。(2)CREATEUSERuser2%IDENTIFIEDBY123;user2用户可以在任何电脑上登录mysql服务器。验证方法:mysql-uuser2-p123验证登录。注意:user1和user2权限很有限,还需授权。如:此时在user1或者user2登录的情况下,键入showdatabases;命令,将显示不出mydb1数据库,即user1或者user2没有对mydb1数据库操作的权限。,DCL知识-给用户授权,2.给用户授权(使用root登录(此时权限最大),而后进行用户授权操作)(1)GRANT权限1,权限nON数据库.*TO用户名IP地址权限、用户、数据库给用户分派在指定的数据库上的指定的权限例如:GRANTCREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECTONmydb1.*TOuser1localhost;给user1用户分派在mydb1数据库上的create、alter、drop、insert、update、delete、select权限。此时在user1登录的情况下,键入showdatabases;命令,将能够显示出mydb1数据库,即user1拥有了对mydb1数据库操作的权限同样可以进行select等操作。,DCL知识-给用户授权,2.给用户授权(使用root登录(此时权限最大),而后进行用户授权操作)(2)GRANTALLON数据库.*TO用户名IP地址;给用户分派指定数据库上的所有权限。例如:GRANTALLONmydb1.*TOuser2localhost;此时在user2登录的情况下,键入showdatabases;命令,将能够显示出mydb1数据库,即user2拥有了对mydb1数据库操作的权限,同样可以进行select等操作。,DCL知识-撤销授权,3.撤销授权(使用root登录(此时权限最大),而后进行撤销授权操作)REVOKE权限1,权限nON数据库.*FROM用户名IP地址;撤消指定用户在指定数据库上的指定权限例如;REVOKECREATE,ALTER,DROPONmydb1.*FROMuser1localhost;撤消user1用户在mydb1数据库上的create、alter、drop权限,DCL知识-撤销授权,3.撤销授权(使用root登录(此时权限最大),而后进行撤销授权操作)例如:REVOKEdeleteONmydb1.*FROMuser1localhost;验证方法:使用user1登录,而后切换到mydb1数据库,执行delete操作将错误。具体如下:(1)mysql-uuser1-p123(2)usemydb1;(3)deletefromstu;,DCL知识-查看权限,4.查看权限(使用root登录(此时权限最大),而后进行查看权限操作)SHOWGRANTSFOR用户名IP地址查看指定用户的权限如:SHOWGRANTSFORuser1localhost;,DCL知识-删除用户,5.删除用户(使用root登录(此时权限最大),而后进行删除用户操作)DROPUSER用户名IP地址如:DROPUSERuser1localhost;此时再用user1登录将出错。,DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。创建学生表:stu,DQL知识-准备工作,DQL知识-准备工作,创建代码:CREATETABLEstu(sidCHAR(6),snameVARCHAR(50),ageINT,genderVARCHAR(50);,DQL知识-准备工作,插入记录:INSERTINTOstuVALUES(S_1001,liuYi,35,male);INSERTINTOstuVALUES(S_1002,chenEr,15,female);INSERTINTOstuVALUES(S_1003,zhangSan,95,male);INSERTINTOstuVALUES(S_1004,liSi,65,female);INSERTINTOstuVALUES(S_1005,wangWu,55,male);INSERTINTOstuVALUES(S_1006,zhaoLiu,75,female);INSERTINTOstuVALUES(S_1007,sunQi,25,male);INSERTINTOstuVALUES(S_1008,zhouBa,45,female);INSERTINTOstuVALUES(S_1009,wuJiu,85,male);INSERTINTOstuVALUES(S_1010,zhengShi,5,female);INSERTINTOstuVALUES(S_1011,xxx,NULL,NULL);,创建雇员表:emp,DQL知识-准备工作,DQL知识-准备工作,创建代码:CREATETABLEemp(empnoINT,enameVARCHAR(50),jobVARCHAR(50),mgrINT,hiredateDATE,salDECIMAL(7,2),commdecimal(7,2),deptnoINT);,DQL知识-准备工作,插入记录:INSERTINTOempVALUES(1009,zenganiu,chairman,NULL,2001-11-17,50000,NULL,10);INSERTINTOempVALUES(1004,liubei,manager,1009,2001-04-02,29750,NULL,20);INSERTINTOempVALUES(1006,guanyu,manager,1009,2001-05-01,28500,NULL,30);INSERTINTOempVALUES(1007,zhangfei,manager,1009,2001-09-01,24500,NULL,10);INSERTINTOempVALUES(1008,zhugeliang,analyst,1004,2007-04-19,30000,NULL,20);INSERTINTOempVALUES(1013,pangtong,analyst,1004,2001-12-03,30000,NULL,20);,DQL知识-准备工作,INSERTINTOempVALUES(1002,daiyisi,salesman,1006,2001-02-20,16000,3000,30);INSERTINTOempVALUES(1003,yintianzheng,salesman,1006,2001-02-22,12500,5000,30);INSERTINTOempVALUES(1005,xiexun,salesman,1006,2001-09-28,12500,14000,30);INSERTINTOempVALUES(1010,weiyixiao,salesman,1006,2001-09-08,15000,0,30);INSERTINTOempVALUES(1012,chengpu,clerk,1006,2001-12-03,9500,NULL,30);INSERTINTOempVALUES(1014,huanggai,clerk,1007,2002-01-23,13000,NULL,10);INSERTINTOempVALUES(1011,zhoutai,clerk,1008,2007-05-23,11000,NULL,20);INSERTINTOempVALUES(1001,ganning,clerk,1013,2000-12-17,8000,NULL,20);,创建部分表:dept,DQL知识-准备工作,DQL知识-准备工作,创建代码:CREATETABLEdept(deptnoINT,dnamevarchar(50),locvarchar(50);,DQL知识-准备工作,插入记录:INSERTINTOdeptVALUES(10,jiaoyanbu,beijing);INSERTINTOdeptVALUES(20,xuegongbu,shanghai);INSERTINTOdeptVALUES(30,xiaoshoubu,guangzhou);INSERTINTOdeptVALUES(40,caiwubu,wuhan);,DQL知识-基本查询,一、基本查询1.字段(列)控制1)查询所有列SELECT*FROM表名;如:SELECT*FROMemp;-其中“*”表示查询所有列,DQL知识-基本查询,2)查询指定列SELECT列1,列2,.列NFROM表名;如:SELECTempno,ename,sal,commFROMemp;,DQL知识-基本查询,3)完全重复的记录只一次当查询结果中的多行记录一模一样时,只显示一行。一般查询所有列时很少会有这种情况,但只查询一列(或几列)时,这总可能就大了!SELECTDISTINCT*|列1,列2,.列NFROM表名;SELECTDISTINCTjobFROMemp;SELECTDISTINCTdeptnoFROMemp;-保查询员工表的部门编号,如果存在相同的部门只显示一次!注意:该操作并不删除数据库中的重复记录,只是查询。,DQL知识-基本查询,4)列运算(调节ms-dos窗口宽度的方法:单击左上角图标-属性-布局-窗口大小-宽度).数量类型的列可以做加、减、乘、除运算例如:SELECT*,salFROMemp;SELECT*,sal*1.5FROMemp;SELECT*,sal+commFROMemp;注意:任何数据+NULL=NULL,处理方法见下页。ename+100=100,此时ename值处理成0。,DQL知识-基本查询,.转换NULL值有时需要把NULL转换成其它值,例如com+1000时,如果com列存在NULL值,那么NULL+1000还是NULL,而我们这时希望把NULL处理为0来运算。SELECT*,sal+IFNULL(comm,0)FROMemp;说明:IFNULL(comm,0):如果comm中存在NULL值,那么当成0来运算。又如:selectempno,ename,job,ifnull(mgr,boss),hiredate,sal,comm,deptnofromemp;,DQL知识-基本查询,.字符串类型可以做连续运算。Java中字符串连接符号为+;Oracle中字符串连接符号为|;MySQL中字符串连接符号为CONCAT;例如:SELECTCONCAT($,sal)FROMemp;又如:selectconcat(ename,job)fromemp;selectconcat(mynameis,ename,myjobis,job)fromemp;,DQL知识-基本查询,.给列起别名你也许已经注意到了,当使用列运算后,查询出的结果集中的列名称很不好看,这时我们需要给列名起个别名,这样在结果集中列名就显示别名了SELECT*,sal+IFNULL(comm,0)ASjiangjinFROMemp;-其中AS可以省略又如:selectconcat(mynameis,ename,myjobis,job)asdescrfromemp;,DQL知识-基本查询,.给列起别名以下两者等价:selectenameasname,jobasworkfromemp;等价于:selectenamename,jobworkfromemp;问题:selectempno,enamejob,sal,commfromemp;是否有错,结果如何?,DQL知识-基本查询,2、条件控制1)条件查询与前面介绍的UPDATE和DELETE语句一样,SELECT语句也可以使用WHERE子句来控制记录。说明:条件必须是一个boolean类型的值或表达式;运算符:=、!=(不等于)、(不等于)、=、10000ANDcommISNOTNULL;SELECTempno,ename,salFROMempWHEREsalBETWEEN20000AND30000;SELECTempno,ename,jobFROMempWHEREjobIN(chairman,manager);,DQL知识-基本查询,2)模糊查询当你想查询姓名中以“Z”开头,并且名字包含7个字符的员工时,就可以使用模糊查询:SELECT*FROMempWHEREenameLIKEz_;注意:模糊查询需要使用运算符:LIKE,其中_匹配一个任意字符,注意,只匹配一个字符而不是多个。SELECT*FROMempWHEREenameLIKE_;表示姓名由6个字符组成的员工。,DQL知识-基本查询,2)模糊查询如果想查询姓名中以“Z”开头的所有员工(姓名中字符个数任意),就要使用“%”了。SELECT*FROMempWHEREenameLIKEz%;注意:其中%匹配0n个任意字符。查询姓名中包含“Z”的所有员工。SELECT*FROMempWHEREenameLIKE%z%;注意:千万不要认为上面语句是在查询姓名中间带有阿字的员工,因为%匹配0n个字符,所以姓名以阿开头和结尾的员工也都会查询到。,DQL知识-基本查询,2)模糊查询SELECT*FROMempWHEREenameLIKE%;注意:这个条件等同于不存在(该条件有无均可,既可以去掉),但如果姓名为NULL的查询不出来!查询姓名中第二个字符为“h”的所有员工。SELECT*FROMempWHEREenameLIKE_h%;,DQL知识-排序,二、排序1、升序SELECT*FROMempORDERBYsalASC;-按sal排序,升序!-其中ASC是可以省略的,DQL知识-排序,2、降序SELECT*FROMempORDERBYcommDESC;-按comm排序,降序!-其中DESC不能省略,DQL知识-排序,3、使用多列作为排序条件SELECT*FROMempORDERBYsalASC,commDESC;-使用sal升序排,如果sal相同时,使用comm的降序排。SELECT*FROMempORDERBYsalASC,commDESC,empnoASC;-使用sal升序排,如果sal相同时,使用comm的降序排,如果sal和comm都相同时,使用empno升序排列。,DQL知识-聚合函数,聚合函数用来做某列的纵向运算。1、COUNT功能:统计指定列不为NULL的记录行数;(1)SELECTCOUNT(*)FROMemp;-计算emp表中所有列都不为NULL的记录的行数。(2)SELECTCOUNT(comm)FROMemp;-计算emp表中comm列不为NULL的记录的行数。,DQL知识-聚合函数,1、COUNT(3)查询emp表中月薪大于25000的人数:SELECTCOUNT(*)FROMempWHEREsal25000;(4)统计月薪与佣金之和大于25000元的人数:SELECTCOUNT(*)AScntFROMempWHEREsal+IFNULL(comm,0)25000;(5)查询有佣金的人数,以及有上级领导的人数:SELECTCOUNT(comm),COUNT(mgr)FROMemp;,DQL知识-聚合函数,2、SUM功能:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;(1)查询所有雇员月薪和:SELECTSUM(sal)FROMemp;(2)查询所有雇员月薪和,以及所有雇员佣金和:SELECTSUM(sal),SUM(comm)FROMemp;(3)查询所有雇员月薪+佣金和:SELECTSUM(sal+IFNULL(comm,0)FROMemp;(4)统计所有员工平均工资:SELECTSUM(sal)/COUNT(sal)FROMemp;(5)SELECTSUM(ename)FROMemp;,DQL知识-聚合函数,3、AVG功能:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0。(1)SELECTAVG(sal)FROMemp;-查询平均工资(2)SELECTAVG(ename)FROMemp;-查看结果,DQL知识-聚合函数,4、MAX功能:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算。(1)SELECTMAX(sal)FROMemp;-查询最高工资(2)SELECTMAX(ename)FROMemp;-查询最大姓名,DQL知识-聚合函数,5、MIN功能:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算。(1)SELECTMIN(sal)FROMemp;-查询最低工资(2)SELECTMIN(ename)FROMemp;-查询最小姓名,DQL知识-聚合函数,综合应用:SELECTcount(*)asrenshu,sum(sal)gongzihe,avg(sal)pingjunz,max(sal)zuida,min(sal)aszuixiaoFROMemp;,DQL知识-分组查询,四、分组查询1、基本形式分组查询是把记录使用某一列进行分组(例如,按照性别将同学们分成两组,又如,按照是否戴眼镜将同学们也可以分为两组),然后查询组信息。注意:(1)用于分组的列必须有重复记录的。例如在emp表中,如果对empno或者ename列进行分组,则无任何意义。而对job列进行分组就很有意义,因为在该列中包含众多重复记录。(2)分组查询,最终查询的为组信息,不是个人信息。若查询组信息,必须使用聚合函数来操作。,DQL知识-分组查询,举例:(1)例如,使用job分组,查询工作名称和每个工作的记录数SELECTjob,COUNT(*)FROMempGROUPBYjob;特点:select后面的列如果不加聚合函数,如job,则该列必须为分组列,即位于GROUPBY后(技巧:实际操作时,先添加二者),否则select后面的列必须加聚合函数。(2)使用deptno分组,查询部门编号和每个部门的记录数SELECTdeptno,COUNT(*)FROMempGROUPBYdeptno;(3)使用job分组,查询每种工作的最高工资SELECTjob,MAX(SAL)FROMempGROUPBYjob;,DQL知识-分组查询,2、组条件(1)分组前条件:根据条件去除的记录没有参见分组。(WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组)例如,以部门编号分组,查询每组记录数。要求只保留sal大于15000的记录。SELECTdeptno,COUNT(*)FROMempwheresal15000GROUPBYdeptno;与下面比较:SELECTdeptno,COUNT(*)FROMempGROUPBYdeptno;,DQL知识-分组查询,2、组条件(2)分组后条件:HAVING后的条件部分必须使用聚合函数作为条件。以部门编号分组,查询每组记录数。条件为记录数大于3。SELECTdeptno,COUNT(*)FROMempGROUPBYdeptnoHAVINGCOUNT(*)3;与下面比较SELECTdeptno,COUNT(*)FROMempGROUPBYdeptno;,DQL知识-总结,selectfromwheregroupbyhavingorderby在select语句中,如果同时使用上述关键字,则各个关键字的出现顺序如上,实际的执行顺序也为上。,DQL知识-limit子句(方言),五、limit子句(方言)-其他数据如果想实现limit的对应功能,必须使用多表查询(子查询)来实现。功能:LIMIT用来限定查询结果的起始行,以及总行数。主要用于分页查询场合。(1)例如:查询起始行为第5行,一共查询3行记录SELECT*FROMempLIMIT4,3;-其中4表示从第5行开始,其中3表示一共查询3行。即第5、6、7行记录。,DQL知识-limit子句(方言),(2)例如:查询起始行为第1行,一共查询5行记录select*fromemplimit0,5;(3)例如:查询起始行为第13行,一共查询5行记录select*fromemplimit12,5;注意:因为表中只剩下两条记录,所以只查到两条记录。,DQL知识-limit子句(方言),适用场合:分页查询问题描述:如果一页记录为10条,希望查看第3页记录应该怎么查呢?实现:select*fromemplimit20,10;分析:(1)第一页记录起始行为0,一共查询10行,即09;(2)第二页记录起始行为10,一共查询10行,即1019;(3)第三页记录起始行为20,一共查询10行,即2029;公式:limit数字1,数字2数字1公式:(当前页-1)*每页记录数数字2公式:每页记录数举例:每页8条记录,查询第17页记录?limit(17-1)*8,8,单表查询练习:,准备知识:SQLyog软件的安装与使用。该软件能够实现创建数据库、创建数据表、插入表记录等操作。但这些操作都是在可视化界面下通过鼠标操作来完成的,其本质也是转换成SQL语句。直接使用该软件,不利于我们对基本SQL语法的学习。本节只是使用该软件来演示查询的结果。注意该软件保存的文件扩展名为.sql。该文件中可以包含多个select查询语句,。,单表查询练习:,在屏幕中可以输入多条语句,选中需要执行的,单击F9即可。,在做具体操作之前,首先切换至当前数据表所在的数据库。,单表查询练习:,1.查询出部门编号为30的所有员工SELECT*FROMempWHEREdeptno=30;2.查询出所有销售员的姓名、编号和部门编号。SELECTename,empno,deptnoFROMempWHEREjob=salesman;3.找出奖金高于工资的员工。SELECT*FROMempWHEREcommsal;4.找出奖金高于工资30%的员工。SELECT*FROMempWHEREcommsal*0.3;,单表查询练习:,5.找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料。SELECT*FROMempWHERE(deptno=10ANDjob=manager)OR(deptno=20ANDjob=salesman);6.找出部门编号为10中所有经理,部门编号为20中所有销售员,还有即不是经理又不是销售员但其工资大或等于20000的所有员工详细资料。SELECT*FROMempWHERE(deptno=10ANDjob=manager)OR(deptno=20ANDjob=salesman)OR(jobNOTIN(manager,salesman)ANDsal=20000);,单表查询练习:,7.无奖金或奖金低于1000的员工。SELECT*FROMempWHEREcommISNULLORcomm50000ORDERBYSUM(sal)ASC;16.查询出有奖金的工种SELECTDISTINCTjobFROMempWHEREcommISNOTNULL;,第三章结束!,MySQL编码问题-解决不支持汉字问题,1.查看MySQL数据库编码SHOWVARIABLESLIKEchar%;,因为当初安装时指定了字符集为UTF8,所以所有的编码都是UTF8。,MySQL编码问题,2.编码解释(只关心两个即可)(1)character_set_client:MySQL使用该编码来解读客户端发送过来的数据,例如该编码为UTF8,那么如果客户端发送过来的数据不是UTF8,那么就会出现乱码。注意:你发送的数据编码必须与client指定的编码一致!详细解释如下:如果character_set_client=utf8,无论客户端发送的是什么编码的数据,mysql都当成是utf8的数据!若客户端发送的是GBK编码的数据服务器会当成utf8编码的数据对待总结:必然乱码!,MySQL编码问题,(1)character_set_client:处理问题的手段有两种;让客户端发送utf8的数据(行不通)把character_set_client修改为gbk,具体语句如下setcharacter_set_client=gbk;注意:该方法只在当前窗口内有效,也就是说,关闭窗口后,再打开,又回到utf8了。即每次打开窗口时,均执行上述语句一次,不爽。,MySQL编码问题,2.编码解释(2)character_set_results:响应的编码,即查询结果返回给客户端的编码。这说明客户端必须使用result指定的编码来解码。MySQL会把数据转换成该编码后,再发送给客户端,例如该编码为UTF8,那么如果客户端不使用UTF8来解读,那么就会出现乱码。具体解释如下:如果character_set_results=utf8,则表示MySQL把数据用utf8编码发送给客户端!若服务器发送给客户端的是utf8的数据客户端会把它当成gbk,因为我们的小黑屏,只能显示gbk(cmd下默认使用GBK)总结:必然乱码!,MySQL编码问题,(2)character_set_results:处理问题的手段有两种:让服务器发送gbk的数据:即使用该语句进行设置。setcharacter_set_results=gbk让小黑屏使用utf8来解读(行不通),MySQL编码问题,综上所述:(1)character_set_client|utf8(必须修改为gbk)注意:通过该语句,mysql把我们客户端传递的数据都当成是utf8!如果我们客户端传递的数据是gbk,那么需要修改这个变量为gbk。(2)character_set_connection|utf8(3)character_set_database|utf8(4)character_set_results|utf8(必须修改为gbk)注意:通过该语句,mysql发送给客户端的数据都是ut
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院感染与安全
- 实习生实习报告范文八篇
- 孔融让梨读书笔记15篇
- 督察部个人工作心得体会
- 皮肤管理套餐
- 高三说明文范文1000字五篇
- 选调生代表发言稿材料范文
- 幼儿雷雨安全教案
- 鼓励初三中考加油的话
- 金融行业会计培训
- 2024全固态电池产业研究:全固态电池即将迎来量产元年
- 《复杂网络入门必读》课件
- 国开《小学数学教学研究》形考期末大作业答案
- 仓库管理培训课件
- 传感器基础知识单选题100道及答案解析
- 传播学概论习题与参考答案
- 政治-湖南省长沙市(炎德英才大联考)长郡中学2025届高三上学期月考试卷(三)试题和答案
- 2023级《中国特色社会主义》学习通超星期末考试答案章节答案2024年
- 2024年学校联席会议制度范例(五篇)
- 2021年质量、环境和职业健康安全三体系相关方需求和期望分析表及组织环境分析报告
- 国有企业重组整合研究-以A集团与B公司重组为例
评论
0/150
提交评论