MySQL高级SQL语句(下)

生也有涯,知也无涯。这篇文章主要讲述MySQL高级SQL语句(下)相关的知识,希望能为你提供帮助。
一、联集将两个SQL语句的结果合并起来,两个SQL语句所产生的栏位需要是同样的资料种类
1.UNION

UNION :生成结果的资料值将没有重复,且按照字段的顺序进行排序
语法:[SELECT 语句 1] UNION [SELECT 语句 2];
例:
select place_name from destination union select place_name from info;

【MySQL高级SQL语句(下)】

去重
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);



四、CASECASE是 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 *

    推荐阅读