MySQL视图与联集

news/2024/11/8 15:13:10/

一、VIEW(视图)

1、 概念

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

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

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

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

2、 创建、查看和删除视图

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

实例操作:

create view v_test1_2 as select A.name,A.xueke from test2 A where name in (select B.name from test1 B where age > 20);
select *from v_test1_2;
drop view v_test1_2;

二、联集

将两个SQL语句的结果合并起来,两个SQL语句所产生的字段需要是同样的

1、UNION

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

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

实例操作:

select name from test1 union select name from test2;

2、UNION ALL

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

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

实例操作:

select name from test1 union all select name from test2;

三、交集值

取两个SQL语句结果的交集

1、取交集值的方法1(2种简单方法,内连接+on/using,去重则加上distinct)

select A.name from test1 A inner join test2 B on A.name=B.name;
select A.name from test1 A inner join test2 B using(name);
select distinct A.name from test1 A inner join test2 B on A.name=B.name;

2、取交集方法2(1种,union all结合group by)

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

select A.name from (select name from test1 union all select name from test2) A group by A.name having count(*) > 1;
select A.name from (select name from test1 union all select name from test2) A group by A.name having count(name) > 1; 
select name from test1 union all select name from test7; #拆分上面的SQL语句
select A.name,count(name) from (select name from test1 union all select name from test2) A group by A.name having count(name) > 1; #显示count值,便于理解select A.name,count(name) from (select distinct name from test1 union all select distinct name from test2) A group by A.name having count(name) > 1; #去重显示,在联集两个表之前先把表去重,以防一个表中本身就有重复值

3、取交集(去重)——4种方法

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

方法一:
mysql> select A.name from (select B.name from test1 B inner join test2 C on B.name=C.name) A group by A.name;
方法二:
select distinct A.name from test1 A inner join test2 B using(name);
方法三:
select distinct name from test1 where name in (select name from test2);
方法四:
select distinct A.name from test1 A left join test2 B using(name) where B.name is NOT NULL;

方法一:内连接取交集结合group by去重

 

方法二:内连接取交集结合distinct去重

方法三:where+in遍历取交集并结合distinct去重

方法四:使用左连接(也可用右连接)+where 判断NOT NULL 取交集并结合distinct去重

 

四、无交集值

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

方法一:
select A.name from (select distinct name from test1 union all select distinct name from test2) A group by A.name having count(name)=1;
方法二:
select distinct name from test2 where name not in (select distinct name from test1);
select distinct name from test1 where name not in (select distinct name from test2);
方法三:
select distinct A.name from test1 A left join test2 B using(name) where B.name is NULL;
select distinct B.name from test1 A right join test2 B using(name) where A.name is NULL;

方法一:union all结合group by进行分组汇总并使用count=1取无交集值

方法二:where+not in遍历取无交集值并结合distinct去重

方法三:使用左连接(或者右连接)+where 判断NULL 取无交集并结合distinct去重

五、CASE的用法

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

1、语法格式:

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

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

2、实例操作

六、空值(NULL)和无值(“”)的区别

区别:

无值的长度为0,不占用空间;而空值null 的长度是null,是占用空间的;

IS NULL或者IS NOT NULL,是用来判断字段是不是NULL或者不是NULL,是不能查出是不是无值的;

无值的判断使用=’‘或者<>’'来处理。<>代表不等于;

在通过count()指定字段统计有多少行数时,如果遇到NULL值会自动忽略掉,遇到空值会自动加入记录中进行计算。

1、判断空值和无值的字符长度

select length(NULL),length(''),length('1');

2、使用count统计行数(体现null与空值的区别)

count(*) 表示包括所有列的行数,不会忽略null值;空值正常统计

count(列名) 表示只包括这一列,统计时会忽略null值的行;空值正常统计


http://www.ppmy.cn/news/67919.html

相关文章

QT是什么软件

QT是一款跨平台的C图形用户界面(GUI)应用程序开发框架&#xff0c;由Digia公司开发并维护。QT提供了一套易于使用的API&#xff0c;使得开发者可以轻松地开发出高质量的应用程序&#xff0c;这些应用程序可以运行在各种操作系统和设备上&#xff0c;包括Windows、Mac OS X、Lin…

web集群第一次作业

目录 一. 简述静态网页和动态网页的区别 二. 简述 Web1.0 和 Web2.0 的区别 三. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。 一. 简述静态网页和动态网页的区别 1. 首先&#xff0c;两者的页面资源特征不同&#xff1a; 静态网页处理文件类型有…

低代码平台:10分钟从入门到原理

导航目录 一、低代码概念 二、优势及局限 三、基础功能及搭建 1、业务流程 2、用户权限 3、统计图表 四、使用感受 五、总结 传统的软件研发方式目前并不能很好地满足企业的需求&#xff1a;人员成本高、研发时间长、运维复杂。这时低代码工具的出现为快速开发软件提供…

图片转为base64格式的优缺点分析

1. 优点 &#xff08;1&#xff09;网页中使用base64格式的图片时&#xff0c;不用再请求服务器调用图片资源&#xff0c;减少了服务器访问次数。 &#xff08;2&#xff09;base64编码的字符串&#xff0c;更适合不同平台、不同语言的传输&#xff1b; &#xff08;3&#…

多语言多方式API接口pinduoduo.item_search据关键词取商品列表

Curl PHP PHPsdk JAVA C# Python Golang javascript JS-SDK Ruby Swift Objective-C C C Node.JS Kotlin Rust R MATLAB 在PHP、JAVA和C#环境下&#xff0c;API接口调用都可以使用对应语言的网络通信库实现。以下是各个语言常用的网络通信库&#xff1a; 1.PHP&…

【存储数据恢复】H3C存储卷中的数据恢复案例

存储数据恢复环境&故障&#xff1a; H3C FlexStorage某型号存储&#xff0c;25块磁盘组建的RAID5&#xff0c;其中包含一块热备盘。 工作人员误操作将存储设备中原先的2个卷删除&#xff0c;删除之后又使用和删除2个卷同样大小的空间重建了一个卷。用户希望恢复删除的2个卷…

京东短网址高可用提升最佳实践 | 京东云技术团队

作者&#xff1a;京东零售 郝彦军 什么是短网址&#xff1f; 短网址&#xff0c;是在长度上比较短的网址。简单来说就是帮您把冗长的URL地址缩短成8个字符以内的短网址。 当我们在腾讯、新浪发微博时&#xff0c;有时发很长的网址连接&#xff0c;但由于微博只限制140个字&a…

【Hello Network】网络编程套接字(二)

作者&#xff1a;小萌新 专栏&#xff1a;网络 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;简单介绍网络的基础概念 网络编程套接字&#xff08;二&#xff09; 简单的TCP网络程序服务端创建套接字服务端绑定服务器监听服务端获取连接服务端处…