zoukankan      html  css  js  c++  java
  • MySQL进阶

    创建表:
    CREATE TABLE T_ABC (t_id INT PRIMARY KEY AUTO_INCREMENT UNIQUE,t_name VARCHAR(32)
    NOT NULL DEFAULT'张三',t_salary INT)

    创建用户并授权:
    GRANT all PRIVILEGES on #所有的权限授权到数据库
    xk_demo to admin@'%' #访问的用户名
    IDENTIFIED by '0000'  #密码
    WITH GRANT OPTION; #附带下发权限
    #查看特定的用户权限
    show GRANTS for admin@'%'
    #删除用户
    DROP USER admin@'%'
    /*字符串要用单引号引起来
    大小写不敏感
    字符串敏感时需要加 binary关键字
    */
    #DATE
    #获取当前日期
    SELECT CURRENT_DATE()
    #获取当前时间
    SELECT CURRENT_TIME()
    SELECT CURTIME()
    #获取当前时间和日期
    SELECT NOW()
    #投影查询  通过t_name查到t_id
    SELECT t_id FROM T_ABC WHERE t_name = 'zhangsan'
    /*
    算数运算符
    数字类型的数据可以使用算术运算符运算
    DATE 类型可以使用+和- 不可以使用* /
    操作单位是天
    */
    #当前时间+1天
    SELECT CURRENT_DATE(),CURRENT_DATE()+1;
    /* NULL
    1、空值是指不可用、未分配的值,代表没有值,也是一种特殊的值。
    2、空值不等于零或空格
    3、任意类型都可以支持空值,也就是说任何类型的字段都可以允许空值作为值的存在

     注意:
    *  包括空值的任何算术表达式都等于空
    */
    #DISTINCT去重 查询工资大于14的 将t_id和t_name打印
    SELECT DISTINCT t_id,t_name FROM T_ABC WHERE T_SALARY>14;
    /*常用比较运算符;
     1)BETWEEN AND:在两值之间 (包含开始和结尾);
     2)IN(list):匹配列出的值;
     3)LIKE :匹配字符串模式;
      1-通配符:1:`_`:一个字符
           2:`%`:0个或多个字符
      2-转义符:ESCAPE: 表示后面的字符是一个转义符
     4)IS [NOT] NULL:是否[不为]为空;
    */
    #查询工资为134和137的员工
    SELECT *FROM T_ABC WHERE T_SALARY IN(134,117)
    #查询姓名以'n'结尾的员工
    SELECT t_name FROM t_ABC WHERE t_name LIKE '%n'
    #排序 默认为升序
    SELECT *FROM t_ABC ORDER BY t_salary

    函数分类
    单行函数:接收参数,输出一个结果
    多行函数:接收某列的所有的值,输出一个结
    #字符串大小写
    SELECT UPPER(t_name) FROM t_abc
    SELECT LOWER(t_name) FROM t_abc
    把每条记录的每个字段连接起来:

    AS 后面跟的是新列名
    SELECT CONCAT(t_name,'~~~~~~',t_salary) AS 新列名 FROM t_abc;
    在指定位置(位置,长度)的字符串替换成目标字符串
    SELECT INSERT(t_name,2,2,'新字段') FROM t_ABC
    LENGTH 字符串长度
    #计算字节数
    SELECT t_name,LENGTH(t_name) FROM t_abc
    #计算字符数
    SELECT t_name ,CHAR_LENGTH(t_name) FROM t_abc
    左右填补:
    字符串的字符数如果大于给定的个数,少了就从函数指定的边补齐
    多了就从字符串最后截掉
    SELECT LPAD(t_name,4,'左填补') ,#左填补
        RPAD(t_name,5,'右填补'),t_name FROM t_abc

    TRIM截去字符串两端的指定子字符串'an' '商都'
    SELECT TRIM('an' FROM t_name) FROM t_abc
    SELECT TRIM(BOTH '商都' FROM t_name)FROM t_abc
    #去尾
    SELECT TRIM(TRAILING '三' FROM t_name)
    FROM t_abc;
    替换
    当某一条记录中的字段值和第二个参数的值相等的时候
    把这个字段替换成第三个参数 将zhangsan换成主流
    SELECT REPLACE(t_name,'zhangsan','主流') FROM t_abc
    从指定位置截取到最后
    SELECT SUBSTR(t_name ,2) FROM t_abc
    从指定位置截取指定长度的子字符串
    SELECT SUBSTR(t_name ,2,3) FROM t_abc
    函数:
    取绝对值
    SELECT ABS(-12)
    取模
    SELECT MOD(12,5)
    SELECT CEILING(2.22)
    SELECT FLOOR(2.22)
    四舍五入(保留位数)
    SELECT ROUND(3.33,1)
    日期
    当前日期加一
    SELECT DATE_ADD(CURDATE(),INTERVAL 1 DAY)
    日期相减 天数
    SELECT DATEDIFF('2017-01-21','1995-01-21')
    获取模块的年月日是分秒
    SELECT DAY(NOW()) #当月的第x天
    SELECT DAYOFWEEK(NOW())#当前星期第几天
    时间戳格式化
    SELECT UNIX_TIMESTAMP(NOW()) #从1970年到现在的秒数
    数字格式化 保留一位小数
    SELECT FORMAT(123456.12345,1)
    #123,456.1
    生成UUID
    SELECT UUID();
    /*
    COALESCE(value,...)
    返回值为列表当中第一个非null值,如果没有非null值,则返回值为null
    */
    SELECT COALESCE(null,'jerry','tom');
    相当于三目运算符
    SELECT IF(1>1,'TRUE','false')
    SELECT CASE
    WHEN t_name LIKE '%n' THEN '以n结尾'
    WHEN t_name = '张三' THEN '张三'
    ELSE '不知道'
    END
    FROM t_abc;

    分组语句(两张有联系的表)GROUP BY:将表 分成小组
    ORDER BY:排序
    SELECT COUNT(t_name) FROM t_abc;
    #按性别分类,在t_abc中 当t_salary>3000,
    对 组 的过滤语句必须放在HAVING中
    如果没有GROUP BY 子句SELECT列表 中的任何列或表达式不能使用合计函数
    SELECT t_sex,AVG(t_salary) FROM t_abc WHERE t_salary >3000 GROUP BY t_sex;
    把工资小于2000的人过滤后按工资分组并按升序排序
    SELECT t_salary,t_name,AVG(t_salary)
    FROM t_abc
    WHERE t_salary > 2000
    GROUP BY t_salary

    多表查询
    SELECT ABC.t_id, ABC.t_name,emp.dp_name #列名
    FROM t_abc AS ABC ,employee AS emp #给表起别名
    WHERE ABC.dp_id=emp.dp_id; #两张表相同的信息

    SELECT ABC.t_id, ABC.t_name,emp.dp_name #列名
    FROM t_abc AS ABC JOIN employee AS emp #给表起别名
    WHERE ABC.dp_id=emp.dp_id; #两张表相同的信息

    #外连接
    /*
    JOIN table1 ON table2 默认是内连接。
    格式:
    SELECT table1.column, table2.column [, table3.column...]
    FROM table1 JOIN table2  ON (table1.column_name = table2.column_name)
    [JOIN table3  table2.column = table3.column...]

    ON子句:指明多表连接的条件, 能够把表连接的条件和其他的条件区分
    */
    左连接,把join关键字左边的表信息全部显示出来
    右连接,把join关键字右边的表信息全部显示出来
    SELECT * #列名
    FROM t_abc AS ABC LEFT JOIN employee AS emp #给表起别名
    ON ABC.dp_id=emp.dp_id; #两张表相同的信息
    自连接:SELECT xxxx FROM 表1 name1 JOIN 表1 name2 ON 过滤条件
    子查询:
    SELECT AVG(t_salary) '平均工资' FROM t_abc
    子查询
    SELECT t_id,t_salary,t_name FROM t_abc
    WHERE t_salary < (SELECT AVG(t_salary)FROM t_abc) ;

    SELECT t_name,t_id ,t_salary FROM t_abc
    where t_salary = 134 OR t_salary= 9444;

    SELECT t_name,t_id ,t_salary FROM t_abc
    where t_salary in (134,9444)

    SELECT * FROM t_abc
    WHERE t_salary IN (SELECT t_salary FROM t_abc
    WHERE t_salary = 134 OR  t_salary = 117 OR t_salary = 9444);

  • 相关阅读:
    android的ScaleGestureDetector缩放类详解
    ScaleGestureDetector缩放view
    setBackgroundDrawable和setBackgroundColor的用法
    Android安卓开发中图片缩放讲解
    android 比较靠谱的图片压缩
    Android ContentProvider和Uri详解 (绝对全面)
    android:intent flags
    Activity的加载模式及Intent.setFlags
    关于final中的几个忽略的点的再次阐述
    关于继承的一些问题
  • 原文地址:https://www.cnblogs.com/huike/p/6598482.html
Copyright © 2011-2022 走看看