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 是精确匹配,字段值以英文”,
”分
mysql原生sql盘点的更多相关文章
- mysql原生sql处理,按逗号拆分列为多行
举例: id value 1 1,2,3,4 2 2,3,4,5,6 拆分成: id value 1 1 2 2 3 3 4 4 5 5 6 6 ),) ) distinct:去重复操作 a.valu ...
- Hibernate原生SQL映射MySQL的CHAR(n)类型到String时出错
今天在用Hibernate通过原生SQL和ResultTransformer映射时,出现数据类型不匹配的错误.但是通过Entity映射,没有问题.在网上找了好多答案,终于解决了. 核心代码: Stri ...
- Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...
- 在.net core web 项目中操作MySql数据库(非ORM框架,原生sql语句方式)
本案例通过MySql.Data和Dapper包执行原生sql,实现对数据库的操作. 操作步骤: 第1步:在MySql数据库中新建表User(使用Navicat For MySql工具) 建表语句: c ...
- Hibernate原生SQL查询多表关联,SQL语句要注意的问题
Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...
- Hibernate执行原生SQL返回List<Map>类型结果集
我是学java出身的,web是我主要一块: 在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型 如果这时候我用的联合查询,那么返回都就是 ...
- Oracle、MySql、Sql Server比对
1. 价格 MySql:廉价(部分免费):当前,MySQL採用双重授权(DualLicensed),他们是GPL和MySQLAB制定的商业许可协议.假设你在一个遵循GPL的自由(开源)项目中使用 ...
- jpa 联表查询 返回自定义对象 hql语法 原生sql 语法 1.11.9版本
-----业务场景中经常涉及到联查,jpa的hql语法提供了内连接的查询方式(不支持复杂hql,比如left join ,right join). 上代码了 1.我们要联查房屋和房屋用户中间表,通过 ...
- 在Hibernate中使用原生SQL语句
使用原生SQL查询必须注意:程序必须选出所有的数据列才可被转换成持久化实体.假设实体在映射时有一个<many-to-one../>的关联指向另外一个实体,则SQL查询中必须返回该<m ...
随机推荐
- Posche Piwis 3 Original and Clone – What’s the difference
Category : Car Diagnostic Tools What’s the difference between Porsche Tester Piwis III original and ...
- hive资料
Hive基本操作 Hive 解锁操作 之前使用Hive,出现过一种情况:在代码正在执行insert into或insert overwrite时,中途手动将程序停掉,会出现卡死情况,只能执行查询操作, ...
- python-directory
#!/usr/bin/python # --*-- coding: utf-8 --*-- directory={ "张三":16, "李四":46, &quo ...
- oracle primary key & foreign key
主键:一个表中只有一个主键约束,但是一个主键约束可以由数据表中的多个列组成:primary key alter table TName add constraints pk_name PRIMARY ...
- WCF系列_WCF常用绑定选择
一.五种常用绑定常用绑定的传输协议以及编码格式 名称 传输协议 编码格式 互操作性 BasicHttpBinding HTTP/HTTPS Text,MTOM Yes NetTcpBinding TC ...
- iOS dispatch_semaphore_t(信号量)和 2.dispatch_group_t (组)
2017年,回望过去,前半年还致力于iOS开发,后半年就开始了python的漫漫之路,一路上走走停停,不过还好,总的来说,2017是收获的一年,也是付出的一年.2018加油! 话题转回来,关于线程执行 ...
- PID25 / 合并果子 ☆
这里用到了STL里面的priority_queue,我也不是很精通基本上属于现学现卖阶段,http://www.cnblogs.com/flyoung2008/articles/2136485.htm ...
- Linq语言,由红色部分可直接代替绿色(List,dictionary)
/// <summary> /// 获取最近5分钟缓存的车量 /// </summary> /// <param name="carNo">&l ...
- Cookie保存中文用户名报错(500)
在用Cookie保存用户名时候,当用户名是中文的时候服务器报错了. HTTP Status 500 - An exception occurred processing JSP page /dolog ...
- 找出数组中最大值and索引
找出数组中的最大值和和最大值的索引位置..... 第一中方法: /** * 找出数组中最大值和最大值的索引 * @param args */ public static void main(Strin ...