MySQL简单查询和单表查询_第1页
MySQL简单查询和单表查询_第2页
MySQL简单查询和单表查询_第3页
MySQL简单查询和单表查询_第4页
MySQL简单查询和单表查询_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!欢迎阅读本文档,希望本文档能对您有所帮助!MySQL简单查询和单表查询MySQL记录操作概览MySQL数据操作:DML在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括使用INSERT实现数据的插入UPDATE实现数据的更新使用DELETE实现数据的删除使用SELECT查询数据以及。插入数据insert1.插入完整数据(顺序插入)语法一:INSERTINTO表名(字段1,字段2,字段3…字段n)VALUES(值1,值2,值3…值n);语法二:INSERTINTO表名VALUES(值1,值2,值3…值n);2.指定字段插入数据语法:INSERTINTO表名(字段1,字段2,字段3…)VALUES(值1,值2,值3…);3.插入多条记录语法:INSERTINTO表名VALUES(值1,值2,值3…值n),(值1,值2,值3…值n),(值1,值2,值3…值n);4.插入查询结果语法:INSERTINTO表名(字段1,字段2,字段3…字段n)SELECT(字段1,字段2,字段3…字段n)FROM表2WHERE…;更新数据update语法:UPDATE表名SET字段1=值1,字段2=值2,WHERECONDITION;示例:UPDATEmysql.userSETpassword=password(‘123’)whereuser=’root’andhost=’localhost’;删除数据delete语法:DELETEFROM表名WHERECONITION;示例:DELETEFROMmysql.userWHEREpassword=’’;练习:更新MySQLroot用户密码为mysql123删除除从本地登录的root用户以外的所有用户查询数据search1.单表查询关键字执行的优先级:fromwheregroupbyselectdistincthavingorderbylimit1.找到表:from2.拿着where指定的约束条件,去文件/表中取出一条条记录3.将取出的一条条记录进行分组groupby,如果没有groupby,则整体作为一组4.执行select(去重)5.将分组的结果进行having过滤6.将结果按条件排序:orderby7.限制结果的显示条数简单查询#创建表createtableemployee(idintnotnulluniqueauto_increment,emp_namevarchar(20)notnull,sexenum(#39;male#39;,#39;female#39;)notnulldefault#39;male#39;,#大部分是男的ageint(3)unsignednotnulldefault28,hire_datedatenotnull,postvarchar(50),post_commentvarchar(100),salarydouble(15,2),officeint,#一个部门一个屋子depart_idint);#查看表结构mysqldescemployee;+--------------+-----------------------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+--------------+-----------------------+------+-----+---------+----------------+|id|int(11)|NO|PRI|NULL|auto_increment||emp_name|varchar(20)|NO||NULL|||sex|enum(#39;male#39;,#39;female#39;)|NO||male|||age|int(3)unsigned|NO||28|||hire_date|date|NO||NULL|||post|varchar(50)|YES||NULL|||post_comment|varchar(100)|YES||NULL|||salary|double(15,2)|YES||NULL|||office|int(11)|YES||NULL|||depart_id|int(11)|YES||NULL||+--------------+-----------------------+------+-----+---------+----------------+#插入记录#三个部门:教学,销售,运营insertintoemployee(emp_name,sex,age,hire_date,post,salary,office,depart_id)values(#39;egon#39;,#39;male#39;,18,#39;20170301#39;,#39;办事处#39;,7300.33,401,1),#以下是教学部(#39;anwen#39;,#39;male#39;,78,#39;20150302#39;,#39;teacher#39;,1000000.31,401,1),(#39;wudi#39;,#39;male#39;,81,#39;20130305#39;,#39;teacher#39;,8300,401,1),(#39;yuanhao#39;,#39;male#39;,73,#39;20140701#39;,#39;teacher#39;,3500,401,1),(#39;liwen#39;,#39;male#39;,28,#39;20121101#39;,#39;teacher#39;,2100,401,1),(#39;jingliyang#39;,#39;female#39;,18,#39;20110211#39;,#39;teacher#39;,9000,401,1),(#39;jinxin#39;,#39;male#39;,18,#39;19000301#39;,#39;teacher#39;,30000,401,1),(#39;成龙#39;,#39;male#39;,48,#39;20101111#39;,#39;teacher#39;,10000,401,1),(#39;歪歪#39;,#39;female#39;,48,#39;20150311#39;,#39;sale#39;,3000.13,402,2),#以下是销售部门(#39;丫丫#39;,#39;female#39;,38,#39;20101101#39;,#39;sale#39;,2000.35,402,2),(#39;丁丁#39;,#39;female#39;,18,#39;20110312#39;,#39;sale#39;,1000.37,402,2),(#39;星星#39;,#39;female#39;,18,#39;20160513#39;,#39;sale#39;,3000.29,402,2),(#39;格格#39;,#39;female#39;,28,#39;20170127#39;,#39;sale#39;,4000.33,402,2),(#39;张xx#39;,#39;male#39;,28,#39;20160311#39;,#39;operation#39;,10000.13,403,3),#以下是运营部门(#39;程咬金#39;,#39;male#39;,18,#39;19970312#39;,#39;operation#39;,20000,403,3),(#39;程咬银#39;,#39;female#39;,18,#39;20130311#39;,#39;operation#39;,19000,403,3),(#39;程咬铜#39;,#39;male#39;,18,#39;20150411#39;,#39;operation#39;,18000,403,3),(#39;程咬铁#39;,#39;female#39;,18,#39;20140512#39;,#39;operation#39;,17000,403,3);#ps:如果在windows系统中,插入中文字符,select的结果为空白,可以将所有字符编码统一设置成gbk准备表和记录#简单查询SELECTid,emp_name,sex,age,hire_date,post,post_comment,salary,office,depart_idFROMemployee;SELECT*FROMemployee;SELECTemp_name,salaryFROMemployee;#避免重复DISTINCTSELECTDISTINCTpostFROMemployee;#通过四则运算查询SELECTemp_name,salary*12FROMemployee;SELECTemp_name,salary*12ASAnnual_salaryFROMemployee;SELECTemp_name,salary*12Annual_salaryFROMemployee;#定义显示格式CONCAT()函数用于连接字符串SELECTCONCAT(#39;姓名:#39;,emp_name,#39;年薪:#39;,salary*12)ASAnnual_salaryFROMemployee;CONCAT_WS()第一个参数为分隔符SELECTCONCAT_WS(#39;:#39;,emp_name,salary*12)ASAnnual_salaryFROMemployee;结合CASE语句:SELECT(CASEWHENemp_name=#39;jingliyang#39;THENemp_nameWHENemp_name=#39;alex#39;THENCONCAT(emp_name,#39;_BIGSB#39;)ELSEconcat(emp_name,#39;SB#39;)END)asnew_nameFROMemployee;小练习:1查出所有员工的名字,薪资,格式为lt;名字:egonlt;薪资:30002查出所有的岗位(去掉重复)3查出所有员工名字,以及他们的年薪,年薪的字段名为annual_yearselectconcat(#39;lt;名字:#39;,emp_name,#39;#39;,#39;lt;薪资:#39;,salary,#39;#39;)fromemployee;selectdistinctdepart_idfromemployee;selectemp_name,salary*12annual_salaryfromemployee;where约束where字句中可以使用:比较运算符:lt;=lt;=lt;!=between80and100值在80到100之间in(80,90,100)值是80或90或100like'e%'??通配符可以是%或_,??%表示任意多字符??_表示一个字符?逻辑运算符:在多个条件直接可以使用逻辑运算符andornot#1:单条件查询SELECTemp_nameFROMemployeeWHEREpost=#39;sale#39;;#2:多条件查询SELECTemp_name,salaryFROMemployeeWHEREpost=#39;teacher#39;ANDsalary10000;#3:关键字BETWEENANDSELECTemp_name,salaryFROMemployeeWHEREsalaryBETWEEN10000AND20000;SELECTemp_name,salaryFROMemployeeWHEREsalaryNOTBETWEEN10000AND20000;#4:关键字ISNULL(判断某个字段是否为NULL不能用等号,需要用IS)SELECTemp_name,post_commentFROMemployeeWHEREpost_commentISNULL;SELECTemp_name,post_commentFROMemployeeWHEREpost_commentISNOTNULL;SELECTemp_name,post_commentFROMemployeeWHEREpost_comment=#39;#39;;注意#39;#39;是空字符串,不是nullps:执行updateemployeesetpost_comment=#39;#39;whereid=2;再用上条查看,就会有结果了#5:关键字IN集合查询SELECTemp_name,salaryFROMemployeeWHEREsalary=3000ORsalary=3500ORsalary=4000ORsalary=9000;SELECTemp_name,salaryFROMemployeeWHEREsalaryIN(3000,3500,4000,9000);SELECTemp_name,salaryFROMemployeeWHEREsalaryNOTIN(3000,3500,4000,9000);#6:关键字LIKE模糊查询通配符’%’SELECT*FROMemployeeWHEREemp_nameLIKE#39;eg%#39;;通配符’_’SELECT*FROMemployeeWHEREemp_nameLIKE#39;al__#39;;小练习:1.查看岗位是teacher的员工姓名、年龄2.查看岗位是teacher且年龄大于30岁的员工姓名、年龄3.查看岗位是teacher且薪资在9000-1000范围内的员工姓名、年龄、薪资4.查看岗位描述不为NULL的员工信息5.查看岗位是teacher且薪资是10000或9000或30000的员工姓名、年龄、薪资6.查看岗位是teacher且薪资不是10000或9000或30000的员工姓名、年龄、薪资7.查看岗位是teacher且名字是jin开头的员工姓名、年薪selectemp_name,agefromemployeewherepost=#39;teacher#39;;selectemp_name,agefromemployeewherepost=#39;teacher#39;andage30;selectemp_name,age,salaryfromemployeewherepost=#39;teacher#39;andsalarybetween9000and10000;select*fromemployeewherepost_commentisnotnull;selectemp_name,age,salaryfromemployeewherepost=#39;teacher#39;andsalaryin(10000,9000,30000);selectemp_name,age,salaryfromemployeewherepost=#39;teacher#39;andsalarynotin(10000,9000,30000);selectemp_name,salary*12fromemployeewherepost=#39;teacher#39;andemp_namelike#39;jin%#39;;groupby单独使用GROUPBY关键字分组SELECTpostFROMemployeeGROUPBYpost;注意:我们按照post字段分组,那么select查询的字段只能是post,想要获取组内的其他相关信息,需要借助函数GROUPBY关键字和GROUP_CONCAT()函数一起使用SELECTpost,GROUP_CONCAT(emp_name)FROMemployeeGROUPBYpost;#按照岗位分组,并查看组内成员名SELECTpost,GROUP_CONCAT(emp_name)asemp_membersFROMemployeeGROUPBYpost;GROUPBY与聚合函数一起使用selectpost,count(id)ascountfromemployeegroupbypost;#按照岗位分组,并查看每个组有多少人强调:如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义多条记录之间的某个字段值相同,该字段通常用来作为分组的依据聚合函数#强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组示例:SELECTCOUNT(*)FROMemployee;SELECTCOUNT(*)FROMemployeeWHEREdepart_id=1;SELECTMAX(salary)FROMemployee;SELECTMIN(salary)FROMemployee;SELECTAVG(salary)FROMemployee;SELECTSUM(salary)FROMemployee;SELECTSUM(salary)FROMemployeeWHEREdepart_id=3;小练习:1.查询岗位名以及岗位包含的所有员工名字2.查询岗位名以及各岗位内包含的员工个数3.查询公司内男员工和女员工的个数4.查询岗位名以及各岗位的平均薪资5.查询岗位名以及各岗位的最高薪资6.查询岗位名以及各岗位的最低薪资7.查询男员工与男员工的平均薪资,女员工与女员工的平均薪资#题1:分组mysqlselectpost,group_concat(emp_name)fromemployeegroupbypost;#题目2:mysqlselectpost,count(id)fromemployeegroupbypost;#题目3:mysqlselectsex,count(id)fromemployeegroupbysex;#题目4:mysqlselectpost,avg(salary)fromemployeegroupbypost;#题目5mysqlselectpost,max(salary)fromemployeegroupbypost;#题目6mysqlselectpost,min(salary)fromemployeegroupbypost;#题目七mysqlselectsex,avg(salary)fromemployeegroupbysex;HAVING过滤HAVING与WHERE不一样的地方在于!!!!!!#!!!执行优先级从高到低:wheregroupbyhaving#1.Where发生在分组groupby之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。#2.Having发生在分组groupby之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数select*fromempwheresalary100000;mysqlselectpost,group_concat(emp_name)fromempgroupbyposthavingsalary10000;#错误,分组后无法直接取到salary字段ERROR1054(42S22):Unknowncolumn#39;salary#39;in#39;havingclause#39;mysqlselectpost,group_concat(emp_name)fromempgroupbyposthavingavg(salary)10000;小练习:1.查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数3.查询各岗位平均薪资大于10000的岗位名、平均工资4.查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资selectpost,group_concat(emp_name),count(id)fromemployeegroupbyposthavingcount(id)lt;2;selectpost,avg(salary)fromemployeegroupbyposthavingavg(salary)10000;selectpost,avg(salary)fromemployeegroupbyposthavingavg(salary)10000andavg(salary)lt;20000;ORDERBY查询排序按单列排序SELECT*FROMemployeeORDERBYsalary;SELECT*FROMemployeeORDERBYsalaryASC;SELECT*FROMemployeeORDERBYsalaryDESC;按多列排序:先按照age排序,如果年纪相同,则按照薪资排序SELECT

温馨提示

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

评论

0/150

提交评论