MySQL高级SQL语句(下)
Posted 正在迷途
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL高级SQL语句(下)相关的知识,希望对你有一定的参考价值。
一、联集
将两个SQL语句的结果合并起来,两个SQL语句所产生的栏位需要是同样的资料种类
1.UNION
UNION :生成结果的资料值将没有重复,且按照字段的顺序进行排序
语法:[SELECT 语句 1] UNION [SELECT 语句 2];
例:
select place_name from destination union select place_name from info;
去重
2.UNION ALL
UNION ALL :将生成结果的资料值都列出来,无论有无重复
语法:[SELECT 语句 1] UNION ALL [SELECT 语句 2];
例:
select place_name from destination union all select place_name from info;
二、交集值
取两个SQL语句结果的交集
select a.place_name from destination a inner join info b on a.place_name = b.place_name;
select a.place_name from destination a inner join info b using(place_name);
select DISTINCT a.place_name from destination a inner join info b using(place_name);ame); DISTINCT 去重
两表没用重复的行,并且确实有交集的时候用
select a.place_name from (select place_name from destination union all select place_name from info) a group by a.place_name having count(*) > 1;
取两个SQL语句结果的交集,且没有重复
select a.place_name from (select b.place_name from destination b inner join info c on b.place_name =c.place_name) a group by a.place_name;
select distinct a.place_name from destination a inner join info b using(place_name);
select distinct place_name from destination where (place_name) in (select place_name from info);
select distinct a.place_name from destination a left join info b using(place_name) where b.place_name is not null;
三、无交集值
显示第一个SQL语句的结果,且与第二个SQL语句没有交集的结果,且没有重复
select a.place_name from destination a inner join info b on a.place_name = b.place_name;
select a.place_name from destination a inner join info b using(place_name);
四、CASE
CASE是 SQL 用来做为 IF-THEN-ELSE 之类逻辑的关键字
语法:
SELECT CASE ("字段名")
WHEN "条件1" THEN "结果1"
WHEN "条件2" THEN "结果2"
...
[ELSE "结果N"]
END
FROM "表名";
# "条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。
例如:
select place_name, case place_name
when beijing then sales - 50
when kunming then sales - 20
else sales
end
"new sales",date
from info;
#"New Sales" 是用于 CASE 那个字段的字段名。
五、空值(NULL) 和 无值(’’) 的区别
- 无值的长度为 0,不占用空间的;而 NULL 值的长度是 NULL,是占用空间的。
- IS NULL 或者 IS NOT NULL,是用来判断字段是不是为 NULL 或者不是 NULL,不能查出是不是无值的。
- 无值的判断使用=’‘或者<>’来处理。<> 代表不等于。
- 在通过 count()指定字段统计有多少行数时,如果遇到 NULL 值会自动忽略掉,遇到无值会加入到记录中进行计算。
SELECT length(NULL), length(), length(1);
1、测试
#建表
create table test(test varchar(20));
insert into test values( );
insert into test values(123123);
insert into test values();
insert into test values(1111);
insert into test values();
select * from test;
例:
select * from test where test is null;
select * MySQL高级(进阶)SQL语句