zoukankan      html  css  js  c++  java
  • mysql必会知识点整理

    1.查询同一个字段不同种类下的数据:

    case语句、round(X,2)表示X保留2位小数、FROM_UNIXTIME(data_time,'%y-%m-%d')格式化时间

    SELECT 
        FROM_UNIXTIME(data_time,'%y-%m-%d')AS sj,
        SUM(ROUND(data_size/1024,2))total,
        SUM(CASE WHEN data_type='01' THEN ROUND(data_size/1024,2) END) 11,
        SUM(CASE WHEN data_type='02' THEN ROUND(data_size/1024,2) END) 22,
        SUM(CASE WHEN data_type='03' THEN ROUND(data_size/1024,2) END)33
    FROM t_traffic_data_amount
    GROUP BY sj
    ORDER BY sj DESC;

    2.查询2张表

    left join XX on XX 

    SELECT
      t_traffic_device_epolice.qymc,
      SUM(t_traffic_illegal.wfsl) wfzs,
      FROM_UNIXTIME(t_traffic_illegal.wfsd,'%y-%m-%d') sj
    FROM
      t_traffic_illegal
    LEFT JOIN t_traffic_device_epolice ON t_traffic_illegal.sbbh=t_traffic_device_epolice.sbbm
    WHERE t_traffic_device_epolice.qymc IS NOT NULL
    GROUP BY t_traffic_device_epolice.qymc
    ORDER BY sj DESC

    3.格式化时间

    时分格式:

    FROM_UNIXTIME( aa, '%H:%i' )

    年月日时分秒格式:

    FROM_UNIXTIME(t_traffic_congestion .tjsj,'%Y/%m/%d %H%i%s')

    4.限制查询结果的条数

    查询10条数据:

    LIMIT 10
    limit 55

    返回从行5开始的五行

    5.条件查询

    先格式化时间为小时的格式

    再判断是否在7点和8点之间

    如果在,就输出

    t_traffic_point_speed.pjcs
    如果不在,就输出0
    IFNULL(ROUND(AVG(CASE WHEN FROM_UNIXTIME(t_traffic_point_speed.tjsj,'%H') IN(7,8) THEN t_traffic_point_speed.pjcs END),2),0) clsd_zgf

    6.分组

    ORDER BY sj DESC     #以sj为分组倒序排序

    7.1=1,1=2的使用:

    在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选

    8.针对查询结果进行再次查询或者相加减乘除

    首先把首次查询得到的结果当做一个表,再对这个表进行操作

    SELECT 
    t.*,( t.total - t.error) correct,              #t.* 查询出第一次查询的结果
    ROUND((( t.total - t.error)/t.total),2) sbl 
    FROM 
    (SELECT  
      FROM_UNIXTIME(data_time,'%y-%m-%d')AS sj,
      SUM(CASE WHEN type='total_error' THEN num END) error,
      SUM(CASE WHEN type='total' THEN num END) total
    FROM
    t_traffic_license_plate_recognition
    GROUP BY sj) t
    ORDER BY sj DESC;

    得到的结果:

    9.CONCAT函数用于将两个字符串连接起来,形成一个单一的字符串,各个串直接用,分隔。

    CONCAT( b.sbmc, '[', b.sbbm, ']' ) sbmc
    #输出 阳关路[0002568989999]

    CONCAT( RTrim(b.sbmc), '[', b.sbbm, ']' ) sbmc
    #RTrim()函数去掉值右边的空格
    LTrim()去掉左边的空格
    Trim()去掉串两边的空格

    10.正则表达式

    select prod_name from products where prod_name REGEXP ‘1000order by  prod_name; 
    #检索列prod_name包含文本1000的所有行
    
    select prod_name from products where prod_name REGEXP ‘.000order by  prod_name; 
    #检索列prod_name包含任意字符的所有行(.000表示匹配任意一个字符)
    
    进行OR匹配:
    select prod_name from products where prod_name REGEXP ‘1000 | 2000order by  prod_name; 
    #检索列prod_name包含文本1000或2000的所有行,或者两者都满足的数据
    
    匹配几个字符之一:
    select prod_name from products where prod_name REGEXP ‘[123] Ton’
    order by  prod_name; 
    #[123]定义一组字符,意思是匹配1或2或3,也可写做[1|2|3]
    
    匹配范围:
    select prod_name from products where prod_name REGEXP ‘[1-5] Ton’
    order by  prod_name; 
    #[1-5]定义一个范围,匹配1到5,返回满足的数据
    
    匹配特殊字符:(必须用\为前导)
    select prod_name from products where prod_name REGEXP ‘\.’
    order by  prod_name; 
    #检索列prod_name包含 . 的所有行

    匹配字符类:

    [:alnum:] 任意字母和数字(同[a-z A-Z 0-9])
    [:alpha:] 任意字符(同[a-z A-Z])
    [:blank:] 空格和制表(同[\t])
    [:contrl:] ASCII控制字符(ASCII 0到31和127)
    [:digit:] 任意数字(同[0-9])
    [:graph:] 与[:print:]相同,但不包括空格
    [:lower:] 任意小写字母(同[a-z])
    [:print:] 任意可打印字符
    [:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
    [:space:] 包括空格在内的任意空白字符(同[\f \n \r \t \v])
    [:upper:] 任意大写字母(同[A-Z])
    [:xdigit:] 任意十六进制数字(同[a-f A-F 0-9])

    匹配多个实例:

    * 0个或多个匹配
    + 1个或多个匹配(等于{1,})
    0个多1个匹配(等于{0,1})
    {n} 指定数目的匹配
    {n,} 不少于指定数目的匹配
    {n,m} 匹配数目的范围(m不超过255)
    select prod_name from products where prod_name
    REGEXP '\([0-9] sticks?\)'
    
    输出:
    prod_name
    TNT(1 stick)
    TNT(2 sticks)
    
    #\([0-9]匹配0-9的数字,sticks?\匹配stick和sticks,(s后的?使s可选,因为?匹配的是0个或1个匹配)
    
    
    
    select prod_name from products where prod_name
    REGEXP '[[:digit:]]{4}'
    
    输出:
    prod_name
    jetpack 1000
    jetpack 2000
    
    #[:digit:]匹配任意数字,所以它是一个集合。{4}确切的要求它前面的字符(任意数字)出现4次,所以[[:digit:]]{4}匹配连载一起的人员4位数字
    
    也可这样实现:
    select prod_name from products where prod_name
    REGEXP '[0-9][0-9][0-9][0-9]'

    定位符:

    ^ 文本的开始
    $

    文本的结尾

    [[:<:]] 词的开始
    [[:>:]] 词的结尾
    elect prod_name from products where prod_name
    REGEXP '^[0-9\.]'
    
    输出:
    prod_name
    .5 ton anvil
    1 ton anvil
    2 ton anvil
    
    #^匹配串的开始。因此^[0-9\.]只在.或任意数字为串的第一个字符时才匹配它们

     11.日期和时间处理函数

    AddDate() 增加一个日期(天、周等)
    AddTime() 增加一个时间(时、分等)
    CurDate() 返回当前日期
    CurTime() 返回当前时间

    Date()

    返回日期时间的日期部分
    DateDiff() 计算两个日期只差
    Date_Add() 高度灵活的日期运算函数
    Date_Format() 返回一个格式化的日期或时间串
    Day() 返回一个日期的天数部分
    DayOfWeek() 对于一个日期,返回对应的星期几
    Hour() 返回一个时间的小时部分
    Minute() 返回一个时间的分钟部分
    Month() 返回一个日期的月份部分
    Now() 返回当前日期和时间
    Second() 返回一个日期的秒部分
    Time() 返回一个日期时间的时间部分
    Year() 返回一个日期的年部分
    select cust_id,order_num from orders
    where Date(order_date) = '2021-06-28'
    
    #因为order_date存储的时间格式是2021-06-28 00:00:00,如果不用Date函数则无法比较,使用Date函数只会提取出2021-06-28这部分。(Time()函数也是这样,提取后面部分)

    12.count()函数:

    count(*):对表中行的数目进行计数,所有行都会计数

    count(column):对特定列中具有值的行进行计数,忽略NULL值

    count(1)效率比count(*)高

    13.删除

    delete from orders where id = 1001
    #删除表中的符合条件的数据
    
    truncate orders
    #删除orders表中的所有数据

    14.更新个插入

    update orders set order_id=100 where order_id=1001
    #更新一列
    
    update orders set order_id=100,price=5 where order_id=1001
    #更新多列
    
    insert into table values()
    #插入值

    15.连接多个表

    select order_nama,order_price,order_id from names,prices,ids
    where names.name=prices.name and prices.id=ids.id and id=5
    #3个表联合查数据
    
    select order_nama,order_price,order_id from  order_name whereselect * from products where id =5)
    
    #以子查询为条件

    union:自动去掉重复的行,可以手动加上union all

    select order_id,order_name,order_p from products where id=5
    unoin
    select user_id,user_name,user_p from user where id=5
  • 相关阅读:
    STL之vector
    bubble_sort(归并排序)
    just_sort
    单调队列(数列中长度不超过k的子序列和的最值)
    两数组中寻找两个数的某种关系
    删除一个数字之后数列gcd最大
    实现二叉树(search)
    简单的树(summary)
    H5页面,按钮点击效果(信用卡还款项目)
    vue路由相关知识收集
  • 原文地址:https://www.cnblogs.com/dydxw/p/12209248.html
Copyright © 2011-2022 走看看