select
id
,
name
from
test
2
where
id
=
4
limit
1
这个sql的目的是,从两张表中,取出id = 4 的数据,如果有多条,只取一条。
但是查询结果是:
经过分析发现,这条sql等效于下面:
select id ,name from test1
union (
select id, name from test 2 where id = 4 )
limit 1
这条sql(下面这个),查询结果是:
select id ,name from test1
union (
select id, name from test 2 where id = 4 )
id
|
name
|
1
|
张三
|
2
|
李四
|
3
|
王五
|
4
|
小一
|
然后limit 1, 取出来的就是第一条,即张三-1
所以这条sql应该修改成下面:
第一种修改方式:
select id ,name from test1 where id = 4
union
select id, name from test 2 where id = 4
limit 1
第二种修改方式:
select t.* from (
select id ,name from test1
union
select id, name from test 2
) t where t.id = 4
limit 1
这两种修改方式都能正确查询到结果。
记录一下,防止后面再犯这种错误。
对新列进行
条件
查询
时 必须
使用
having
where
是在分组之前
使用
,表示从所有
数据
中筛选出部分
数据
,以完成分组的要求, 在where子句中不允许
使用
统计函数,没有group by子句也可以
使用
。
having
下面的
SQL
语句
使用
UNION
ALL 从 “Websites” 和 “apps” 表中选取所有的中国(CN)的
数据
(也有重复的值):
SELECT country, name FROM Websites
WHERE country=‘CN’
UNION
ALL
SELECT country, app_name FROM apps
WHERE country=‘CN’
ORDER BY country;
union
用于把两个或者多个select
查询
的结果集合并成一个
进行合并的两个
查询
,其SELECT列表必须在数量和对应列的
数据
类型上保持一致
默认会去掉两个
查询
结果集中的重复行
默认结果集不排序
最终结果集的列...
UNION
ALL用于合并两个或多个select语句的结果集,保留重复行。
使用
UNION
操作符需要满足三个
条件
:列是相同数量、列具备相似的
数据
类型、每条select语句中的列的顺序必须相同。
左、右、内连接,是合并字段,是横向合并。
联合
查询
,是合并行,是纵向合并。
其实事情是这样的,由于编程能力太弱...
①合并、去重字段:合并完(a,s,d,f,g,z,x,c,v,b)共计10个字段
②A
使用
NULL凑齐字段:(a,s,d,f,g,null as z,null as x.null as c,null as v,null as b)
一、组合
查询
概述
多数
SQL
查询
都只包含从一个或多个表中返回
数据
的单条select语句。My
SQL
也允许执行多个
查询
(多个select语句)。并将结果作为单个
查询
结果集返回。这些组合
查询
通常称为并(
union
)或符合
查询
有两种基本情况,其中需要
使用
组合
查询
:
1.在单个
查询
中从不同的表中返回类似结构的
数据
2.对单个表执行多个
查询
,按单个
查询
返回
数据
组合
查询
(
union
)与多个...
union
:对两个结果集进行并集操作, 不包括重复行, 同时进行默认规则的排序, 相当于distinct去重处理;
union
all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不进行排序;
下面进行简单的测试
testdata表
数据
test_user表
数据
1、对单张表多个不同
条件
查询
的
数据
进行并集操作
selecta.stu_id,a.stu_name fromtestdata a
wherea.age = 28
union
selectb...
说起
数据
库的
SQL
语句执行效率的
问题
,就不得不提where
条件
语句中的or(逻辑或)引起的全表扫描
问题
,从而导致效率下降。
在以往绝大多数的资料中,大多数人的建议是
使用
union
代替or,以解决由于
使用
了OR导致的全表扫描。然而,实际是不是如此呢?flymorn就拿5万多条
数据
的MS
SQL
数据
库来测试。
在
SQL
Server
查询
分析器中键入...
2.
union
all 合并的是所有的列。
但是如果在按照某一
条件
进行
查询
时,如果表中
数据
没有符合该
条件
的记录。(即按此
条件
查询
,表中查找到的的记录每列都为空)此时
union
all并不能合并这种空的记录。
比如新建一个表名为t_student的表。记录学生的姓名,性别,年龄和成绩等基础信息。
在t_student表中
查询
名为李明,小河,张三的姓名和成绩。
select
碰到个
问题
,两个select语句,都是多表
查询
,还有
查询
条件
,分别执行,返回的都是空,
但是用
union
连接两个select语句,再整个执行,返回居然有
数据
!!!!!惊呆了
最后定位到的
问题
是因为select语句中用了 join on and 这种语法,连接后面跟and,and后面的
条件
是在两个表关联之前对
数据
进行过滤,where是在关联后过滤。
具体原因不明,个人推测是因为用了and ,又...