MySQL高阶SQL语句二(视图、联集、交集、CASE)

CREATE VIEW(视图)

可以被当作是虚拟表或存储查询

视图跟表格的不同是,表格中有实际储存资料,而视图是建立在表格之上的一个架构,它本身并不实际储存资料。

临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。

视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。

CREATE VIEW "视图表名" AS "SELECT 语句";                      #创建视图表
SELECT * FROM `V_Store_Nametore_Name_VALUE`;                       #查看视图表
DROP VIEW V_Store_Nametore_Name_VALUE;                         #删除视图表

 

MySQL高阶SQL语句二(视图、联集、交集、CASE)

 

 

MySQL高阶SQL语句二(视图、联集、交集、CASE)

 

 

UNION(联集)

将两个SQL语句的结果合并起来,两个SQL语句所产生的栏位需要是同样的资料种类

1、UNION

生成结果的资料值将没有重复,且按照字段的顺序进行排序

语法:[SELECT 语句 1] UNION [SELECT 语句 2];

MySQL高阶SQL语句二(视图、联集、交集、CASE)

 

 

2、UNION ALL

将生成结果的资料值都列出来,无论有无重复

语法:[SELECT 语句 1] UNION ALL [SELECT 语句 2];

MySQL高阶SQL语句二(视图、联集、交集、CASE)

 

 

交集值

取两个SQL语句结果的交集

select A.Store_Name from location A inner join store_info B on A.Store_Name=B.Store_Name;
或 select A.Store_Name from location A inner join store_info B using(Store_Name);

MySQL高阶SQL语句二(视图、联集、交集、CASE)

 

 

两表其中的一个表没有指定的行,而另一个表这个行有重复不可用,要求两个表确实有交集的时候用

select A.Store_Name from 
(select Store_Name from location union all select Store_Name from store_info) A
group by A.Store_Name having count(*) > 1;

MySQL高阶SQL语句二(视图、联集、交集、CASE)

 

 

取两个SQL语句结果的交集,且没有重复

方法一:内连接取交集结合group by去重
select A.Store_Name from (select B.Store_Name from location B inner join store_info C on B.Store_Name=C.Store_Name) A group by A.Store_Name;

方法二:内连接取交集结合distinct去重
select distinct A.Store_Name from location A inner join store_info B using(Store_Name);

方法三:where+in遍历取交集并结合distinct去重
select distinct Store_Name from location where Store_Name in (select Store_Name from store_info);

方法四:使用左连接(也可用右连接)+where 判断NOT NULL 取交集并结合distinct去重
select distinct A.Store_Name from location A left join store_info B using(Store_Name) where B.Store_Name is NOT NULL;

 

无交集值

显示第一个SQL语句的结果,且与第二个SQL语句没有交集的结果,且没有重复

方法一:where+not in遍历取无交集值并结合distinct去重
select distinct Store_Name from location where (Store_Name) not in (select Store_Name from store_info);

方法二:使用左连接(或者右连接)+where 判断NULL 取无交集并结合distinct去重
select distinct A.Store_Name from location A left join store_info B using(Store_Name) where B.Store_Name is NULL;

方法三:union all结合group by进行分组汇总并使用count=1取无交集值
select A.Store_Name from 
(select distinct Store_Name from location union all select distinct Store_Name from store_info) A 
group by A.Store_Name having count(*)=1;

 

CASE

SQL用来作为IF-THEN-ELSE之类逻辑的关键字

语法:

SELECT CASE (字段名)
    WHEN "条件1" THEN  "结果1"
    WHEN "条件2" THEN  "结果2"
    ……
    [ELSE "结果N"]
    END
FROM "表名"

#条件可以是一个数值或是公式。ELSE子句不是必须的

 

MySQL高阶SQL语句二(视图、联集、交集、CASE)

 

上一篇:dotnetcore EF (entity column definition, sql statement logging)


下一篇:聚合函数操作