zoukankan      html  css  js  c++  java
  • MySQL之day5

    函数

    函数种类:  

    • 算术函数
    • 字符串函数
    • 日期函数
    • 转换函数
    • 聚合函数

    1. 算术函数

    •   +   -   *   /
    •   abs  --绝对值
    •   mod(被除数,除数)  --求余
    •   round(对象数值, 保留小数位数)  --四舍五入

    2. 字符串函数

    •   concat(str, str2 ,...)  -- 字符串拼接
    •   length(字符串)  --计算长度 

          注意:  中文一个字相当于两个字节,一个半角字符一个字节

             没有SQL 还有  char_length()函数

    •   lower(字符串)
    •   upper()
    •   replace(对象字符,替换前字符,替换后字符)
    •   substring(对象字符串  from  截取的起始位置  for  截取的字符数 )

    3. 日期函数

    mysql> select current_date;
    +--------------+
    | current_date |
    +--------------+
    | 2019-07-08   |
    +--------------+
    1 row in set (0.03 sec)
    mysql> select current_time;
    +--------------+
    | current_time |
    +--------------+
    | 10:38:43     |
    +--------------+
    1 row in set (0.02 sec)
    mysql> select current_timestamp;
    +---------------------+
    | current_timestamp   |
    +---------------------+
    | 2019-07-08 10:39:07 |
    +---------------------+
    1 row in set (0.04 sec)

      3.2 截取日期元素

    •     extract(日期元素 from   日期)
    mysql> select current_timestamp,
        -> extract(year from current_timestamp) as year,
        -> extract(month from current_timestamp) as month,
        -> extract(day from current_timestamp) as day,
        -> extract(hour from current_timestamp) as hour,
        -> extract(minute from current_timestamp) as minute,
        -> extract(second from current_timestamp) as second;
    +---------------------+------+-------+------+------+--------+--------+
    | current_timestamp   | year | month | day  | hour | minute | second |
    +---------------------+------+-------+------+------+--------+--------+
    | 2019-07-08 11:01:10 | 2019 |     7 |    8 |   11 |      1 |     10 |
    +---------------------+------+-------+------+------+--------+--------+
    1 row in set (0.03 sec)

    4. 转换函数

    •   字符串 ---->  数值

          select cast(<转换前的值>  as  signed integer) as <别名>

    •   字符串 ----->日期

        select  cast(<日期> as date )  as   <别名>

    •   将null ----->其他值

        coalesce(数据1, 数据2,......)    --- 如果有NULL 则转换为对于数据字符 ,没有不会转换

    mysql> select * from product;
    +------------+--------------+--------------+------------+----------------+-------------+------+
    | product_id | product_name | product_type | sale_price | purchase_price | regist_date | co   |
    +------------+--------------+--------------+------------+----------------+-------------+------+
    | 0001       | T恤          | 衣服         |       1000 |            500 | 2009-09-20  | NULL |
    | 0002       | 打孔器       | 办公用品     |        500 |            320 | 2009-09-11  | NULL |
    | 0003       | 运行T恤      | 衣服         |       4000 |           2800 | NULL        | NULL |
    | 0004       | 菜刀         | 厨房用品     |      30000 |           1400 | 2009-09-20  | NULL |
    | 0005       | 高压锅       | 厨房用品     |      68000 |           2500 | 2009-01-15  | NULL |
    | 0006       | 叉子         | 厨房用品     |       5000 |           NULL | 2009-09-20  | NULL |
    | 0007       | 砧板         | 厨房用品     |       8800 |            395 | 2008-04-28  | NULL |
    | 0008       | 圆珠笔       | 办公用品     |        100 |           NULL | 2009-11-11  | NULL |
    | 0009       | 电视机       | 家具         |       4000 |           3000 | 2019-07-04  | NULL |
    | 0010       | 电视机2      | 家具         |      40000 |           NULL | 2019-07-05  | NULL |
    | 0011       | 4k电视       | 家具         |      10000 |           3000 | 2019-07-07  | NULL |
    | 0020       | 电视机4      | 家具         |       NULL |          40001 | 2019-07-05  | NULL |
    +------------+--------------+--------------+------------+----------------+-------------+------+
    12 rows in set (0.04 sec)
    
    mysql> select coalesce( purchase_price , 'null')
        -> from product;
    +------------------------------------+
    | coalesce( purchase_price , 'null') |
    +------------------------------------+
    | 500                                |
    | 320                                |
    | 2800                               |
    | 1400                               |
    | 2500                               |
    | null                               |
    | 395                                |
    | null                               |
    | 3000                               |
    | null                               |
    | 3000                               |
    | 40001                              |
    +------------------------------------+
    12 rows in set (0.00 sec)
    View Code

    谓词

    like

    •  前方一致           ddd%
    • 中间一致            %ddd%
    • 后方一致            %ddd
    •  下划线              ddd_        ----一个下划线一个字符,以此类推
    模式描述
    ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ' ' 或 ' ' 之后的位置。
    $ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ' ' 或 ' ' 之前的位置。
    . 匹配除 " " 之外的任何单个字符。要匹配包括 ' ' 在内的任何字符,请使用象 '[. ]' 的模式。
    [...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
    [^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
    p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
    * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
    + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
    {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
    {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
    mysql> select *
        -> from product
        -> where product_name like '%视%';
    +------------+--------------+--------------+------------+----------------+-------------+------+
    | product_id | product_name | product_type | sale_price | purchase_price | regist_date | co   |
    +------------+--------------+--------------+------------+----------------+-------------+------+
    | 0009       | 电视机       | 家具         |       4000 |           3000 | 2019-07-04  | NULL |
    | 0010       | 电视机2      | 家具         |      40000 |           NULL | 2019-07-05  | NULL |
    | 0011       | 4k电视       | 家具         |      10000 |           3000 | 2019-07-07  | NULL |
    | 0020       | 电视机4      | 家具         |       NULL |          40001 | 2019-07-05  | NULL |
    +------------+--------------+--------------+------------+----------------+-------------+------+
    4 rows in set (0.00 sec)

    between     ---包括边界

    mysql> select *
        -> from product
        -> where purchase_price between 400 and 3000;
    +------------+--------------+--------------+------------+----------------+-------------+------+
    | product_id | product_name | product_type | sale_price | purchase_price | regist_date | co   |
    +------------+--------------+--------------+------------+----------------+-------------+------+
    | 0001       | T恤          | 衣服         |       1000 |            500 | 2009-09-20  | NULL |
    | 0003       | 运行T恤      | 衣服         |       4000 |           2800 | NULL        | NULL |
    | 0004       | 菜刀         | 厨房用品     |      30000 |           1400 | 2009-09-20  | NULL |
    | 0005       | 高压锅       | 厨房用品     |      68000 |           2500 | 2009-01-15  | NULL |
    | 0009       | 电视机       | 家具         |       4000 |           3000 | 2019-07-04  | NULL |
    | 0011       | 4k电视       | 家具         |      10000 |           3000 | 2019-07-07  | NULL |
    +------------+--------------+--------------+------------+----------------+-------------+------+
    6 rows in set (0.00 sec)

    in     和  not in  

    mysql> select *
        -> from product
        -> where product_id in ('0002','0011');
    +------------+--------------+--------------+------------+----------------+-------------+------+
    | product_id | product_name | product_type | sale_price | purchase_price | regist_date | co   |
    +------------+--------------+--------------+------------+----------------+-------------+------+
    | 0002       | 打孔器       | 办公用品     |        500 |            320 | 2009-09-11  | NULL |
    | 0011       | 4k电视       | 家具         |      10000 |           3000 | 2019-07-07  | NULL |
    +------------+--------------+--------------+------------+----------------+-------------+------+
    2 rows in set (0.37 sec)
    mysql> select * from shopproduct;
    +---------+-----------+------------+----------+
    | shop_id | shop_name | product_id | quantity |
    +---------+-----------+------------+----------+
    | 000A    | 东京      | 0001       |       30 |
    | 000A    | 东京      | 0002       |       50 |
    | 000A    | 东京      | 0003       |       15 |
    | 000B    | 名古屋    | 0002       |       30 |
    | 000B    | 名古屋    | 0003       |      120 |
    | 000B    | 名古屋    | 0004       |       20 |
    | 000B    | 名古屋    | 0006       |       10 |
    | 000B    | 名古屋    | 0007       |       40 |
    | 000C    | 大阪      | 0003       |       20 |
    | 000C    | 大阪      | 0004       |       50 |
    | 000C    | 大阪      | 0006       |       90 |
    | 000C    | 大阪      | 0007       |       70 |
    | 000D    | 大阪      | 0001       |      100 |
    +---------+-----------+------------+----------+
    13 rows in set (0.00 sec)
    mysql> select product_name ,sale_price
        -> from product
        -> where product_id in (select product_id
        -> from shopproduct
        -> where shop_id = '000B');
    +--------------+------------+
    | product_name | sale_price |
    +--------------+------------+
    | 打孔器       |        500 |
    | 运行T恤      |       4000 |
    | 菜刀         |      30000 |
    | 叉子         |       5000 |
    | 砧板         |       8800 |
    +--------------+------------+
    5 rows in set (0.00 sec)
    View Code

    exists    --判断是否满足某种条件的记录  ,,  存在 的意思

    注意:  关联子查询作为exists 参数

    mysql> SELECT product_name, sale_price
        ->   FROM Product AS P
        ->  WHERE EXISTS (SELECT *
        ->                  FROM ShopProduct AS SP
        ->                 WHERE SP.shop_id = '000C'
        ->                   AND SP.product_id = P.product_id);
    +--------------+------------+
    | product_name | sale_price |
    +--------------+------------+
    | 运行T恤      |       4000 |
    | 菜刀         |      30000 |
    | 叉子         |       5000 |
    | 砧板         |       8800 |
    +--------------+------------+
    4 rows in set (0.00 sec)

     case

    分为简单CASE表达式搜索CASE表达式两种
      

    CASE WHEN <求值表达式> THEN <表达式>
    WHEN <求值表达式> THEN <表达式>
    WHEN <求值表达式> THEN <表达式>
    .
    .
    .
    ELSE <表达式>
    END    --不可省略
    mysql> select sum(case when sale_price < 1000 then 1 else 0 end ) as low_price,
        ->  sum(case when sale_price between 1000 and 3000 then 1 else 0 end ) as mid_price,
        ->  sum(case when sale_price >3001 then 1 else 0 end ) as high_price
        -> from product;
    +-----------+-----------+------------+
    | low_price | mid_price | high_price |
    +-----------+-----------+------------+
    |         2 |         1 |          8 |
    +-----------+-----------+------------+
    1 row in set (0.08 sec)
  • 相关阅读:
    【svn】一个设置,少写几个字
    转眼一年
    linux虚拟机与windows主机传输文件方法
    meta常用命令
    Metasploit 读书笔记-持久控制
    Metasploit 读书笔记-神器Meterpreter
    [工作]采购失误
    解决:kali linux 在vmware 虚拟机中使用bridge模式上网的问题
    metasploit 读书笔记-EXPLOITATION
    [共鸣]温州600住户合买高音炮 还击广场舞大妈
  • 原文地址:https://www.cnblogs.com/liuyuanq/p/11149988.html
Copyright © 2011-2022 走看看