目录
12.4.1 条件控制语句 if-then-else … end if
一、VIEW(视图)
1.1 概念
可以被当作是虚拟表或存储查询
视图跟表格的不同是,表格中有实际储存资料,而视图是建立在表格之上的一个架构,它本身并不实际储存资料。
临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。
1.2 创建、查看和删除视图
建立两张表,字段数据如下,后面测试用:
CREATE VIEW "视图表名" AS "SELECT 语句"; #创建视图表
SELECT * FROM 'V_NAME_VALUE'; #查看视图表
DROP VIEW V_NAME_VALUE; #删除视图表
实例:
CREATE VIEW V_NAME_VALUE AS SELECT A.name NAME,SUM(B.value) VALUE FROM club A INNER JOIN football B ON A.name = B.name GROUP BY NAME;
二、联集
将两个SQL语句的结果合并起来,两个SQL语句所产生的栏位需要是同样的资料种类
2.1 UNION
生成结果的资料值将没有重复,且按照字段的顺序进行排序
语法:[SELECT 语句 1] UNION [SELECT 语句 2];
示例:
SELECT name FROM club UNION SELECT name FROM football;
2.1 UNION ALL
将生成结果的资料值都列出来,无论有无重复
语法:[SELECT 语句 1] UNION ALL [SELECT 语句 2];
示例:
SELECT name FROM club UNION ALL SELECT name FROM football;
三、交集值
取两个SQL语句结果的交集
SELECT A.name FROM club A INNER JOIN football B ON A.name = B.name;
SELECT A.name FROM club A INNER JOIN football B USING(name);
示例:
3.1 两表没有单独重复的行,并且确实有交集的时候用
SELECT A.name FROM (SELECT name FROM club UNION ALL SELECT name FROM football ) A GROUP BY A.name HAVING COUNT(*) > 1;
这里的A表示派生表
示例:
3.2 取两个SQL语句结果的交集,且没有重复
SELECT A.name FROM (SELECT B.name FROM club B INNER JOIN football C ON B.name = C.name ) A GROUP BY A.name;
SELECT DISTINCT A.name FROM club A INNER JOIN football B USING(name);
SELECT DISTINCT name FROM club WHERE (name) IN (SELECT name FROM football);
SELECT DISTINCT A.name FROM club A LEFT JOIN football B USING(name) WHERE B.name IS NOT NULL;
示例:
3.3、无交集值
显示第一个SQL语句的结果,且与第二个SQL语句没有交集的结果,且没有重复
SELECT DISTINCT name FROM club WHERE (name) NOT IN (SELECT name FROM football);
实例:
四、CASE的用法
是SQL用来作为IF-THEN-ELSE之类逻辑的关键字
语法格式:
SELECT CASE (字段名)
WHEN "条件1" THEN "结果1"
WHEN "条件2" THEN "结果2"
……
ELSE "结果N"
END
FROM "表名"
#条件可以是一个数值或是公式。ELSE子句不是必须的。
示例:
select case area #选择area字段
when 'America' then value + 10000000 #如果球员是America的就加一千万
when 'Europe' then value + 10000000 #如果球员是Europe的就减一千万
else value / 2 #其他情况除2
end #结束此case
result,name,area #别名为result,显示name和area字段
from football; #以上操作对于football表进行