mysql表查询语句DQL:查询语句排序查询语法:orderby子句排序方式:ASC:升序,默认DESC:降序。注意:如果有多个排序条件,第二个条件SELECT*fromuserinfoORDERBYageASC,idDESC只有当前边的条件值相同才会判断;聚合函数:将一列数据作为一个整体,纵向计算count:Calculatethenumberselectcount(age)fromuserinfo;--这种返回数字的方式不会考虑nullselectcount(ifnull(age,0))fromuserinfo;--判断是否为nullPress0tocalculateselectcount(8)fromuserinfo;--查询记录(不推荐)max:计算最大值selectMax(age)fromuserinfo;--计算表中的最大年龄min:计算最小值selectMin(age)fromuserinfo;--计算表中最小的sum:calculateandselectsum(age)fromuserinfo;--计算avg表中所有年龄的总和:计算平均值selectavg(age)fromuserinfo;--计算表平均年龄分组查询:语法:groupbygroupingfield;注:分组后查询的字段:分组字段,聚合函数where和having的区别where在分组前被限定,如果不满足条件,则不参与分组。分组后having有限,如果结果不满足,则不查询;where条件后面不能跟聚合函数,having可以执行聚合函数的判断实现语句--groupbygenderandfindoutTheaverageageofeachgroupselectsex,avg(age)fromuserinfogroupby性别;--按性别分组,找出每个组的平均年龄,并找出平均年龄的参与人数selectsex,avg(age),count(age)fromuserinfogroupbysex;--Groupbysex,求出每个组的平均年龄,求出平均年龄参与人数并过滤掉20岁以上的人selectsex,avg(age),count(age)fromuserinfowhereage>20groupbysex;--同上,筛选少于2名参与者的组,从userinfo中选择sex,avg(age),count(age)whereage>20groupbysexhavingcount(age)<2;分页查询:语法:indexstartingfromlimit,每页查询数公式:(startingindex-1)*每页查询数select*fromuserinfolimit0,3;--第一页select*fromuserinfolimit3,3;--第二页select*fromuserinfolimit6,3;--第三页限制只适用于MySql;每个数据库都有自己的分页约束:概念:对表中的数据进行限制,保证表中数据的正确性、有效性和完整性;分类:主键约束:主键非空约束:notnull唯一约束:唯一外键约束非空约束建表时添加约束CREATETABLEuserinfo(id:INT,name:VARCHAR(20)notnull--name为非空字段)建表后,在表中的字段中添加一个非空字段ALTERTABLEuserinfoMODIFYNAMEVARCHAR(20)NOTNULL;删除非空字段空字段ALTERTABLEuserinfo修改名称VARCHAR(20);唯一约束:唯一,值不能重复创建表时,添加唯一约束CREATETABLEuserinfo(idINT,name:VARCHAR(20)UNIQUE)创建后添加唯一约束(注意:唯一约束字段可以有多个nulls)ALTERTABLEuserinfoMODIFYNAMEVARCHAR(20)UNIQUE;删除唯一约束ALTERTABLEuserinfoMODIFYNAMEVARCHAR(20)--这个是错误的ALTERTABLEuserinfoDROPINDEXname--这个是正确的主键约束主键注意含义:非空且只有一个表只能有一个主键主键是表中记录的唯一标识,建表时添加主键约束CREATETABLEuserinfo(idINTPRIMARYKEY,--添加主键名VARCHAR(20))创建表后,添加主键ALTERTABLEuserinfoMODIFYidINTPRIMARYKEY;删除主键ALTERTABLEuserinfoMODIFYidint;--这是错误的写法ALTERTABLEuserinfoDROPprimarykey;--这是正确的自动增长概念:如果列是int类型,使用auto_increment完成自动增长CREATETABLEuserinfo(idINTPRIMARYKEYAUTO_INCREMENT,--添加自动增长名称VARCHAR(20))--注:自动增长只和上一个相关,比如上一个是100,下一个是101--删除自动增长ALTERTABLEuserinfoMODIFYidint;ALTERTABLEuserinfoMODIFYidintauto_increment;foreignkeyconstraint外键,让表和表有关系,从而保证数据的正确性语法createtableuserinfo(....foreignkeycolumns,constraint外键名foreignkey(外键列名)references主表名(主表列名也是主键名))deleteforeignkeyaltertableuserinfodropforeignkeyforeignkeycolumnnameaddforeignkeyaftercreatingtablealtertableuserinfoaddconstraint外键名foreignkey(外键列名)references主表名(主表列名也是主键名)级联更新操作altertableuserinfoaddconstraint外键名foreignkey(外键列名)references主表名(主表列名也是主键名)ONupdateCASCADEONDELETECASCADE;--ONUPDATECASCADE级联更新操作ONDELETECASCADE级联删除操作多表查询内连接隐式内连接查询:select*fromemp,deptwhereemp.id=dept.rid--emp.id为外键dept。rid是主键selectt1.name,t1.gender,t2.namefromempt1,deptt2wheret1.id=t2.rid;显示内部连接??select*fromempinnerjoindeptonemp.id=dept.rid;select*fromempjoindeptonemp.id=dept.rid;--inner是一个可选的内连接查询:1.从哪些表中查询数据2.条件是什么?3.查询哪个字段outerjoin查询leftouterjoin:select*fromempleft[outer]joindeptonemp.id=dept.rid;--[outer]可选--左外连接查询是左表及其交集rightouterjoinselect*fromempright[[outer]]joindeptonemp.id=dept.rid;--右外连接join查询是右表及其交集子查询:嵌套查询--won从userinfo中取出年龄最大的一条信息selectMax(age);--找出结果集如:56select*fromuserinfowhereage=56;select*fromuserinfowhereage=(selectMax(age)fromuserinfo);查询结果为单行单列的子查询,可以作为条件,运算符用于判断--查询工资低于平均工资的员工select*fromuserinfowheresalary<(selectavg(salary)fromuserinfo)子查询结果为单行多列--查询某两个部门的所有员工信息select*fromuserinfowhereridin(selectidfromuserinfowherename="某部门名称"orname="另一个部门名称";);subquery结果是多行多列--把子查询当成一个虚表select*fromdeptt1,(select*fromempwherejoin_date>"2011-11-11")t2wheret1.id=t2.rid;更新完成
