zoukankan      html  css  js  c++  java
  • Mysql语法入门与进阶

    0. 若你控制台输入 mysql -v

    若你已经安装了mysql,还是显示:'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。

    说明有可能是你没有配置mysql的环境,应该去环境变量里面配置。





    1. Mysql语法分类

    1. DDL:对表结构的:create(创建),alter(修改),drop(删除),TRUNCATE(截断),RENAME(重命名)....;

    2. DML:delete(删除),update(更新),insert(新增)...;

    3. DQL:select(查询);




    2. 数据表操作

    2.1 修改表名

    alter table 旧表名 rename to 新表名;

    2.2 增加一列

    alter table 表名 add 新列名 字段类型 [字段选项];

    2.3 删除一列

    alter table 表名 drop 字段名;

    2.4 修改列类型

    alter table 表名 modify 字段名 新的字段类型 [新的字段选项];

    2.5 修改列名称

    alter table 表名 change 原字段名 新字段名 新的字段类型 [新的字段选项];

    2.6 查看创建表的语句

    show create table 表名





    3. 数据操作

    SQL完整语法:select * from user where group by having order by limit

    3.1 ifnull

    注意:只要有null参与的运算,结果一定为null

    select name,(sal+comm)*12 as yearsql from emp;
    
    # 解决办法:ifnull()空处理函数
    select name,(sal+ifnull(comm,0))*12 as yearsql from emp;
    

    3.2 count(id)与count(*)与count(1)

    • count(*):对行的数据进行计算,包含NULL
    • count(1):和上述一样
    • count(column):对特定列进行计算,不包含NULL

    3.3 where后面不能用聚合函数




    4. 关于group by,having

    分组函数:按照某个字段或某些字段进行分组。
    having:对分组之后的数据进行再次过滤。

    如:找出每个工作岗位的最高薪资

    1. select XXXXXX from emp group by job;  # 先分组
    2. select max(sql) from emp group by job;  # 查询出来的只要最高工资,不知道最高工资属于谁
    
    3. select ename,max(sal),job from emp group by job;  # 虽然查出来了人,但是数据有问题,ename是从该job分组里面取的一个人的enma,不一定恰好就是最高工资那个人的名字
    
    4. 结论:当一条sql语句有group by的时候。select 后面只能跟分组字段,或聚合函数(max,avg..)   否则查询出来的结果毫无意义0
    

    如:找出每个部门的最高薪资,要求只显示薪资大于3000的数据【能用where代替having的情况

    # 效率低
    select max(sal),detptno from emp group by deptno having max(sal) > 3000;
    
    # 效率高
    select max(sql),deptno from emp where sal > 3000 group by deptno;
    

    如:找出每个部门的平均薪资,要求只显示薪资大于3000的数据【不能用where代替having的情况

    select deptno,avg(sql) from emp group by deptno having avg(sal) > 3000
    



    5. 关于between and

    它是左闭右闭的。

    select * from emp where sal between 100 and 900;

    等同于

    select * from emp where sal >=100 and sal <= 900;

    使用between查询时间的时候需要注意:
    https://www.cnblogs.com/lj312/p/7238211.html

    另外一种时间范围查询的方法如下:分别设定开始时间和结束时间:

    <if test="endTime!=null and !&quot;&quot;.equals(endTime.trim())">
        AND m.endTime &lt; #{endTime}
    </if>
       <if test="startTime!=null  and !&quot;&quot;.equals(startTime.trim())">
        AND m.startTime &gt; #{startTime}
    </if>
    
  • 相关阅读:
    Saltstack module apache 详解
    Saltstack module ip 详解
    Saltstack module iosconfig 详解
    Saltstack module introspect 详解
    Saltstack module inspector 详解
    Saltstack module ini 详解
    Saltstack module incron 详解
    Modbus 指令 RS485指令规则
    停车系统对接第三方在线支付平台(二)
    停车系统对接第三方在线支付平台
  • 原文地址:https://www.cnblogs.com/itlihao/p/15262558.html
Copyright © 2011-2022 走看看