美文网首页
MySQL之增删改查

MySQL之增删改查

作者: lily_5945 | 来源:发表于2020-12-18 17:38 被阅读0次

    SQL语言一共分为四大类:DDL(数据库定义语言)、DML(数据库操纵语言)、DQL(数据库查询语言)、DCL(数据库控制语言)

    一、DDL:数据库定义语言,主要操作对象是数据库和表结构

    • 查看数据库:show database;
    • 使用数据库:use 库名;
    • 创建数据库:CREATE database 库名;
    • 删除数据库:DROP database 库名;
    • 查看表结构:DESC 表名;
    • 创建表
    CREATE TABLE 表名(
        列名1 类型(长度) [约束],
        列名2 类型(长度) [约束],
        ……)
    
    • 添加一列:ALTER TABLE 表名 ADD 列名 数据类型;
    • 删除一列:alter table 表名 drop 列名;
    • 修改表的字段类型:ALTER TABLE 表名 MODIFY 列名 数据类型;
    • 修改表名:ALTER TABLE 旧表名 TO 新表名;**
    • 修改表的字符集:ALTER TABLE 表名 CHARACTER SET 字符集名称;
    • 查看创表细节:show create table 表名;

    二、DML:数据库操纵语言,主要是inster、update和delete

    • 插入单条数据:insert into 表名(字段1,字段2...) values(值1,值2…);
    • 插入多条数据:insert into 表名(字段1,字段2...) values(值1,值2…) ,(值1,值2…);
      注:列名与列值的类型、个数、顺序要一一对应、值不要超出列定义的长度、插入的日期和字符一样,使用引号括起来。
    • 修改全表的字段值:update 表名 set 字段=值;
    • 带条件修改指定字段的值:update 表名 set 字段=值 where 条件;
    • 带条件删除:delete from 表名 where 条件;
    • 删除表数据:delete from 表名;或 truncate table 表名;
      注:truncate是删除这个表,再重新创建一个一样的表(字段一样),属于DDL,delete是一条一条记录的删除。属于DML。

    三、DQL:数据库查询语言,主要是select

    前言:
    1,总的原则:select 查询字段 from 表名 where 条件 group by 分组字段 having 条件 order by 排序 limit;
    2,执行顺序:from > where > group by > having>order by > select
    3,条件查询(where)比较运算符:=(等于)、!=(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)
    4,条件查询(where)关键字:between...and(值在什么范围内)、is null (为空)、is not null(不为空)、and 与、or 或、not 非、in(set)固定范围值


    • 查询所有的列:select * from student;
    • 查询指定的列:select 列1,列2,列3... from 表名;
    • 数据去重(distinct):select distinct 列... from 表名;
    • 结果运算(必须要是数据型): select 列1 [+-*/] 列2 from 表名;
      注:很多记录的值为null,因为任何东西与null相加还是null,所以运算下面使用了把null转换成了数值0的函数 IFNULL。例:select ifnull(age,0)+ifnull(score,0) as test from student;
    • 设置别名(AS):select 列1 as 别名1,列2 as 别名2 from 表名;# as可以省略不写
    • 拼接结果:select concat(列1,列2) from 表;
    • 查询结果排序:select * from 表名 order by 列 [asc/desc]; # asc升序,desc降序,若不写默认asc
    • 聚集函数( 作用于一组数据,并对一组数据返回一个值 )
    COUNT:统计结果记录数,若统计的是列,列中为Null,那么count将不会计算值
    select count(*) from employee; # 查询所有记录数
    select count(perfmoance) from employee;  #查询有绩效的人数
    
    MAX:  统计计算最大值    MIN:  统计计算最小值
    select max(salary),min(salary) from employee; #查询最高工资和最低工资
    
    SUM:  统计计算求和
    select sum(salary+ifnull(perfomance,0)) from employee; #查询所有员工的月薪+绩效和
    
    AVG:  统计计算平均值
    select avg(salary) from emplpyee; #查询平均工资
    
    • 模糊查询(like): % 表示多个字符,_ 表示一个字符,可以多次使用
    select * from 表名 where  列 like %A;      # 以A结尾
    select * from 表名 where  列 like A%;      # 以A开头
    select * from 表名 where  列 like %A%;    # 包含A
    select * from 表名 where  列 like '_A_B%';  #第2个字符是A且第4个字符是B
    
    • 条件查询:条件查询就是在查询时给出where子句,在where子句中可以使用一些运算符及关键字:
    select 查询字段 from 表名 where 条件;
    
    • 比较运算符:=(等于)、!=(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)
    select 字段 from 表名 where 列 = 值;
    
    • 关键字:范围查询 between...and(值在什么范围内)
    where 列 between 条件1  and 条件2;          # 列在这个区间的值
    where 列 not between 条件1 and 条件2;    # 不在这个区间
    where !( 列 between 条件1 and 条件2 );     # 不在这个区间
    
    • 关键字:集合查询 in(set)
    select * from 表名 where 列 in(值1,值2);          # 列中的数据是in指定值里面的
    select * from 表名 where 列 not in(值1,值2);   # 列中的数据不是in指定值里面的
    
    • 关键字:null查询(注意:这里null前面是is,不是 = 号)
    select * from 表名 where 列 is null; # 查询列为空的数据
    select * from 表名 where 列 is not null;# 查询列不为空的数据
    
    • 分组查询(group by):将查询结果按照1个或多个字段进行分组,字段值相同的为一组
    select gender from employee group by gender; 
    注:当group by 单独使用时,只显示出每组的第一条记录,所以意义不大。
    
    • group by+group_concat(字段名):表示分组之后,根据分组,使用group_concat(字段名)来放置每一组的某字段的值的集合。
    select  gender,group_concat(name) from employee group by gender;# 根据性别分组,并显示分组下的所有姓名
    
    • group by+聚合函数
    select dept,group_concat(name) ,sum(salary) from employee group by dept; #根据dept分组,并查看每组的人员姓名以及每组的薪资最大值
    select dept,sum(salary),count(*) from employee group by dept; # 查询每个部门的部门名称和每个部门的工资和以及部门人数
    select dept,count(*) from employee where salary>1500 group by dept;  # 查询每个部门的名称以及每个部门工资大于1500的人数
    
    • group by+having:用来分组后指定一些条件来限制输出查询结果
    查询工资总和大于9000的部门名称以及工资和
    select dept,sum(salary) as ssum from employee group by dept having ssum>9000;
    
    查询工资大于2000的,工资和大于6000的部门名称以及工资和
    select dept,group_concat(salary),sum(salary) as ssum from employee where salary>2000 group by dept having ssum >9000;
    

    \color{#FF0000}{ where 和 having的区别}
    1,where 作用于分组前,用于表和视图;having作用于分组后的记录,用于选择满足条件的组。
    2,where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组
    3,having只作用于group byhaving后面,可以使用分组函数(统计函数)

    四、DCL(数据库控制语言)这个用的比较少,后续再补充

    相关文章

      网友评论

          本文标题:MySQL之增删改查

          本文链接:https://www.haomeiwen.com/subject/kdczjktx.html