美文网首页
可能是简书最全的MySQL常用语句

可能是简书最全的MySQL常用语句

作者: SailCoding | 来源:发表于2019-10-27 11:26 被阅读0次

    在平时开发中主要使用DQL(数据查询语句),但在使用DQL之前,一般的操作\color{red}{**流程**}
     登录数据库  --> 创建数据库  -->  选择数据库 --> 插入(导入)数据 --> 删库跑路(哈哈)
     mysql -uroot -pxxxxx; --> create database sail; --> use sail; --> source D:\sail.sql --> drop databse sail;
    还有一些常用操作,如下所示:
        查看所有数据库: show databases;
        查看对应数据库下所有的表:show tablse;
        查看表结构:desc tableName;


    SQL分类:

    简称 代表关键字
    DQL
    Data Query Language
    select
    DML
    Data Manipulation Language
    insert、 delete 、 update
    DDL
    Data Denifition Language
    create、 drop、 alter
    TCL
    Trasactional Control Language
    commit、 rollback
    DCL
    Data Control Language
    grant、 revoke

        毋庸置疑DQL是最重要的一部分,而这里有很多常用过滤语句,一个select语句的执行过程如下所示:

    select 
      * 
    from  
      xxxx
    where
      xxxx
    group by
      xxxx
    having
      xxxx
    order by
      xxxx
    

    MySQL中的DQL

        每个DQL的执行顺序不可改变,严格遵守以上询句的执行顺序:
    1) from:将硬盘上的表文件加载到内存
    2) where:将符合条件的数据行摘取出来,生成一张新的临时表
    3) group by:根据列中的数据种类,将当前临时表划分成若干个新的临时表
    4) having:可以过滤掉group by生成的符合条件的临时表
    5) select:对当前临时表进行整列读取
    6) order by: 对select生成的临时表,重新排序,生成临时表
    7) limit:对最终生成的临时表的数据行,进行分页。
        其中使用到的关键字有:where(条件查询)、having(筛选)、group by(分组)、order by(排序)、limit(限制结果数)其中数条件查询使用的最多,其支持的运算符有:

    运算符 说明
    = 等于
    select empno,ename,sal from emp where sal = 5000;
    为字符串时使用''或“”
    <>或!= 不等于
    select empno,ename,sal from emp where sal <> 5000;
    < 小于
    <= 小于等于
    > 大于
    >= 大于等于
    between … and …. 两个值之间,等同 >= and <=
    select ename from emp where ename between “A” and "F";
    select empno,ename,sal from emp where sal >= 1600 and sal <= 3000;
    is null 为null(is not null 不为空)
    select empno,ename,comm from emp where comm = null; (\color{red}×
    select empno,ename,comm from emp where comm is null; (\color{red}√
    and 并且
    or 或者
    select * from emp where sal>1800 and (deptno=20 or deptno=30);
    in 包含,相当于多个or(not in不在这个范围中)
    not not可以取非,主要用在is 或in中
    select ename,job from emp where job in ('SALESMAN','MANAGER');
    like like称为模糊查诟,支持%或_,%匹配任意个字符,_匹配一个字符
    select ename from emp where ename like'M%';

    \color{red}注:and的优先级高于or
    order by 排序 (order by asc/order by desc)
        系统默认升序 oder by asc
        如果存在 where 子句,那么 order by 必须放到where之后。
    group by 分组查询
        group by 的DQL询句中,select 询句后面只能能跟分组函数+参与分组的字段
        如果使用了 order by ,order by 必须放到 group by后面;
        提到了group by,则需要提提他的号搭档having,having对分组的数据再迚行过滤;
    下面看下having和where的关系
        1) where 和 having 都是为了完成数据的过滤,它们后面都是添加条件;
        2) where 是在 group by之前前完成过滤;
        3) having 是在 group by 之后完成过滤;
    为了使用方便,MySQL为我们提供了一些常用函数,如下表所示:

    函数 含义
    Lower 转为小写
    select lower(ename) as ename from emp;
    upper 转为大写
    select upper(ename) as ename from emp;
    substr 取子串(substr(被截取的字符串,起始下标,截取的长度))
    select substr(ename,2,1) from emp;
    length 取长度
    select ename,length(ename) as nameLength from emp;
    trim 去空格
    select * from emp where job = trim(' manager ');
    str_to_date 将字符串转换成日期
    select ename,hiredate from emp where hiredate = str_to_date(‟02-20-1981‟,‘%m-%d-%Y’ );
    date_format 格式化日期
    format 设置千分位
    round 四舍五入
    rand() 生成随机数
    Ifnull 可以将null转换成一个具体值
    select ename,ifnull(comm,0) from emp;
    case…when…then…else…end case job
    when ‘MANAGER’ then sal * 1.1
    when ‘SALESMAN’ then sal * 1.5
    else sal
    end case使用

    注:count()与count(filed的区别*
        1、 count(*)表示叏得当前查诟表所有记录
        2、 count(字段名称),丌会统计为 null 的记录
    多表的查询
        公司中表的结构一般满足三级范式,这也导致数据不是存储在一张表中,而是在多张表中,所以会出现连接查询,也称为跨表查询。提到连接查询就不得不提到笛卡尔积。主要有:
    内连接,关键字为inner(可忽略)
    外连接
        左连接,关键字 left join
        右连接,关键字 right join
    注:连接过程中不推荐使用where
            select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno;(\color{red}×)
    多张表的查询语法:

    select
              xxxx
    from
              A表
    join
              B表
    on
              连接条件1
    join
              C表
    on
              连接条件2;
    

    子查询
    还有一种经常使用的查询,称为子查询,常用结构如下:

    from …(select)…
    where …(select)…
    

    示例:
    select ename,sal from emp where sal > avg(sal);                (\color{red}×)
    select ename,sal from emp where sal > (select avg(sal) from emp);(\color{red}√)
    联合查询,关键字为union
    分页查询,关键字limit,如查询i页时,使用如下:

    limit (i-1)*pageSize, pageSize
    

    MySQL中的DML

    DML在平时也会使用到,但要求不高。
    首先,建表,在建表前先连接下字段类型

    数据类型 占用字节数 描述
    char char(n) 定长字符串,存储空间大小固定
    使用 char(2)来表示类型
    VARCH AR(3)表示存储的数据长度不能超过3个字符长度
    varchar varchar(n) 变长字符串,存储空间等
    数据空间
    叧包含英文字符的字符串
    CHAR(3) 表示存储的数据长度丌能超过3个字符长度
    int 4 个字节 表示整型,
    比如自增 ID 和表示數量
    INT(3)表示最大可以存储999
    bigint 8 个字节 表示长整型,比如自增(数量比较大的情况下)
    float(有效数字位数,小数位) float(有效数字位数,小数位) 数值型
    FLOAT(7,2)表示7个有效数字,2个有效小数位
    double(有效数字位数,小数位) double(有效数字位数,小数位) 数值型
    DOUBLE(7,2)表示7个有效数字,2个有效小数位
    date 8 字节 表示日期和时间
    实际开发中,常用字符串代替日期类型
    BLOB Binary Large Object (二进制大对象)专门存储图片、视频、声音等数据
    CLOB Character Large Object (字符大对象)可存储超大文本,可存储4G+字符串
    其它….. 其它….. 其它…..
    语句 注意点
    create table t_dg_student (
      id INT(10) not null,
      name varchar(256),
      sex(1),
      birth DATE,
      email VARCHAR(128)
      unique(name, email),
      constraint t_user_pk primary key(id)
    );
    1) 表格名称最好以 t_ 戒 tbl_ 开始,增强可读性
    2) VARCHAR长度最好是2的倍数,方便存储中文
    3)约束 not null,
    4)unique(name, email),也可以写到字段后
    5)约束名称可以不写constraint t_user_pk
    drop table t_fck; 库中不存在, 则会报错
    drop table if exists t_fck;
    insert into t_student(name,email) values('yangwei','ywdreamgo@163.com');
    insert into t_student(no,name,birth) values(1,'Jack',str_to_date('1980-10-19','%Y-%m-%d'));
    插入
    show create table t_student; 查看建表语句
    create table emp1 as select * from emp; 复制表
    alter table t_student add tel varchar(10); 新增字段
    alter table t_student modify tel varchar(20); 修改字段类型
    alter table t_student drop tel; 删除字段
    INSERT INTO tableName1 SELECT columnName1,columnName2,… FROM tableName2; 将查询结果查到表中
    update t_student set name = 'zhangsan',email = 'zhangsan@126.com' where no = 3; 修改数据
    delete from t_student where no = 3; 删除数据
    CREATE USER username IDENTIFIED BY 'password'; 创建用户
    grant all privileges on dbname.tbname to 'username'@'login ip' identified by 'password' with grant option; 1) dbname=表示所有数据库
    2) tbname=
    表示所有表
    3) login ip=%表示任何ip
    4) password为空,表示不需要密码即可登录
    5) with grant option; 表示该用户还可以授权给其他用户

    还有外键的概念,现在使用的不多
    注:常用系统表在information_schema中
    主键会自动添加索引

    相关文章

      网友评论

          本文标题:可能是简书最全的MySQL常用语句

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