zoukankan      html  css  js  c++  java
  • mysql原生sql盘点

    select*from

    (select*from test1

    union all 

    select*from test2

    )

    //两个查询的数据行数需要对应一致,且名字as 一致。

    1、如果直接用如下sql语句是会报错:Incorrect usage of UNION and ORDER BY。

    SELECT * FROM t1 WHERE username LIKE 'l%' ORDER BY score ASC
    UNION
    SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC

    因为union在没有括号的情况下只能使用一个order by,所以报错,这个语句有2种修改方法。如下:

    (1)可以将前面一个order by去掉,改成如下:

    SELECT * FROM t1 WHERE username LIKE 'l%'
    UNION
    SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC

    该sql的意思就是先union,然后对整个结果集进行order by。

    (2)可以通过两个查询分别加括号的方式,改成如下:

    (SELECT * FROM t1 WHERE username LIKE 'l%' ORDER BY sroce ASC)
    UNION
    (SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC)

    这种方式的目的是为了让两个结果集先分别order by,然后再对两个结果集进行union。但是你会发现这种方式虽然不报错了,但是两个order by并没有效果,所以应该改成如下:

    SELECT * FROM
    (SELECT * FROM t1 WHERE username LIKE 'l%' ORDER BY score ASC) t3
    UNION 
    SELECT * FROM
    (SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score ASC) t4

    也就是说,order by不能直接出现在union的子句中,但是可以出现在子句的子句中。

    2、顺便提一句,union和union all 的区别。

    union会过滤掉两个结果集中重复的行,而union all不会过滤掉重复行。

    (case

      when 条件(username is null) then 

        name 

      else

        username

    end)

    //可以放在select后面

    //表示子查询返回多行多列   (title,content,uid)  IN表示可以做多行多列进行对比

    SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)

    //表示子查询一行多列 

    SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)

    any关键词的意思是“对于子查询返回的列中的任何一个数值,如果比较结果为TRUE,就返回TRUE”

    使用in进行子查询,这个我们在日常写sql的时候是经常遇到的。in的意思就是指定的一个值是否在这个集合中,如何在就返回TRUE;否则就返回FALSE了。

    all必须与比较操作符一起使用。all的意思是“对于子查询返回的列中的所有值,如果比较结果为TRUE,则返回TRUE”。

    mysql取当天数据 select uid from period where DATE_FORMAT(begin(时间字段),'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d')

    //在该字段的时间上减三十分钟 date_add(begin(时间字段),interval -30 minute)

    //在该字段的时间上加三十分钟 date_add(begin(时间字段),interval 30 minute)

    列表根据当前时间由近及远进行排序

    select
    cp.pkg_name,
    cp.play_type_id,
    p.uid as period_id,
    p.name as period_name,
    p.begin,
    p.time_length,
    p.video_file,
    (CASE
    WHEN p.`begin`>now() THEN
    p.`begin`-NOW()
    WHEN p.`begin`<NOW() then
    now()-p.`begin`
    END) time,
    (CASE
    WHEN p.`begin`>now() THEN
    0
    WHEN p.`begin`<NOW() then
    1
    END) sort
    from period p
    left join chapter c on c.uid=p.chapter_id
    left join course_pkg cp on cp.uid=c.course_id
    where cp.teacher_id="TC001" and cp.status="1"
    and cp.tenant_id="qht"
    and cp.play_type_id="BF001"
    order by time,sort

    1.in查询相当于多个or条件的叠加,例如:

    select * from user where user_id in (1,2,3);
    等效于
    select * from user where user_id = 1 or user_id = 2 or user_id = 3;
    not in与in相反,如下
    select * from user where user_id not in (1,2,3);
    等效于
    select * from user where user_id != 1 and user_id != 2 and user_id != 3;

    1.find_in_set基本语法

    FIND_IN_SET(str,strlist)

    str 要查询的字符串,strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
    如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

    +----+---------+-----------+-------------+
    | id | user_id | follow_id | follow_time |
    +----+---------+-----------+-------------+
    | 13 | 15      | 16,15     |  1478096138 |
    | 14 | 15      | 17        |  1478177725 |
    | 15 | 15      | 19        |  1478181035 |
    +----+---------+-----------+-------------+

    比如这张表,SELECT * from test where FIND_IN_SET('5',follow_id);这样是查不到的,返回值为null,因为follow_id中没有”5”这个值,它不同于 like 模糊查询,它是以“,”来分隔值

    like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,
    ”分

  • 相关阅读:
    MonkeyScript_API
    APP性能(Monkey)【启动时间、CPU、流量、电量、内存、FPS、过度渲染】
    adb基本命令 & Monkey发生随机事件命令及参数说明
    MonkeyRunner_API
    2021春招冲刺-1218 页面置换算法 | sort的原理 | 语义化标签 | 标签的继承
    2021春招冲刺-1217 线程与进程 | ES6语法 | h5新增标签
    2021春招冲刺-1216 死锁 | 箭头函数 | 内联元素 | 页面渲染
    【unity】旧世开发日志
    HTTP 与HTTPS 简单理解
    GET POST 区分
  • 原文地址:https://www.cnblogs.com/zuoxh/p/10131895.html
Copyright © 2011-2022 走看看