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>
    
  • 相关阅读:
    Leecode no.22 括号生成
    修改mysql数据库的时区
    Django 路由层之反向解析
    学习 Django 的几个教程网址
    leetcode周赛 242
    AcWing第二次热身赛
    AcWing夏季每日一题--最长公共子序列
    AcWIng夏季每日一题--序列最大收益
    leetcode周赛 241
    第十二届蓝桥杯C++ B组
  • 原文地址:https://www.cnblogs.com/itlihao/p/15262558.html
Copyright © 2011-2022 走看看