MySQL(7)数据库中的高级(进阶)语句:VIEW视图、联集和常见计算
文章目录
- 一、VIEW(视图)
- 1.1 概念
- 1.2 创建、查看和删除视图
- 二、联集
- 2.1 UNION
- 2.2 UNION ALL
- 三、交集值
- 3.1 两表没有单独重复的行,并且确实有交集的时候用
- 3.2 取两个SQL语句结果的交集,且没有重复
- 三、无交集值
- 四、CASE的用法
- 五、排名的计算
- 六、中位数的计算
- 七、累积总计的计算
- 八、总合百分比的计算
- 九、累积总合百分比的计算
- 十、空值(NULL)和无值(“”)的区别
一、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.2 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;
示例:
三、无交集值
显示第一个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表进行
五、排名的计算
表格自我连接(self join),然后将结果依序列出,算出每一行之前(包括那一行本身)有多少行数
示例:
select A1.name,A1.value,count(A2.value) rank from football A1,football A2 where A1.value < A2.value OR (A1.value=A2.value and A1.name=A2.name) group by A1.name order by A1.value desc;
原理解释:
字段中的每个值跟所有的值进行比较,最大的值跟所有值比较后,大于或等于的只有一个,排名第二的值跟所有的值比较后,大于或等于的有两个,以此类推。
六、中位数的计算
## 求出中位数,显示姓名,value和排名
select * from (select A1.name,A1.value,count(A2.value) rank from football A1,football A2 where A1.value < A2.value OR (A1.value=A2.value and A1.name=A2.name) group by A1.name order by A1.value desc) A3 where A3.rank = (select (count(*)+1) DIV 2 from football);
## 求出中位数,仅显示value值
select value mid from (select A1.name,A1.value,count(A2.value) rank from football A1,football A2 where A1.value < A2.value OR (A1.value=A2.value and A1.name=A2.name) group by A1.name order by A1.value desc) A3 where A3.rank = (select (count(*)+1) DIV 2 from football);
示例:
七、累积总计的计算
同字段后面中的值都是前面所有值累计而成的
例:
## 计算value的累积总计
select A1.*,sum(A2.value) sum_socore from football A1,football A2 where A1.value < A2.value or(A1.value=A2.value and A1.name=A2.name) group by A1.name order by A1.value desc;
八、总合百分比的计算
每个值占总和的比例
例:
## 计算每位球员value值占整个value值的比例
select A1.*,A1.value/(select sum(value) from football) z_sum from football A1,football A2 where A1.value < A2.value or (A1.value=A2.value and A1.name=A2.name) group by A1.name;
九、累积总合百分比的计算
同字段后面中的值对应的百分比都是前面所有值的百分比累计而成的
示例:
##计算value的累积总计百分比
select A1.name,A1.value,sum(A2.value),sum(A2.value)/(select sum(value) from football) Z from football A1,football A2 where A1.value < A2.value or (A1.value=A2.value and A1.name=A2.name) group by A1.name order by A1.value desc;
##计算value的累积总计百分比并用%表示出来
select A1.name,A1.value,sum(A2.value),TRUNCATE(sum(A2.value)/(select sum(value) from football),2) ||’%’ Z from football A1,football A2 where A1.value < A2.value or (A1.value=A2.value and A1.name=A2.name) group by A1.name order by A1.value desc;
十、空值(NULL)和无值(“”)的区别
无值的长度为0,不占用空间;而空值null 的长度是null,是占用空间的;
IS NULL或者IS NOT NULL,是用来判断字段是不是NULL或者不是NULL,是不能查出是不是无值的;
无值的判断使用=’‘或者<>’'来处理。<>代表不等于;
在通过count()指定字段统计又多少行数时,如果遇到NULL值会自动忽略掉,遇到空值会自动加入记录中进行计算。
## 创建表
create table SITE(site varchar(20));
insert into SITE values(‘jiangsu’);
insert into SITE values(‘anhui’);
insert into SITE values(’’);
insert into SITE values(‘shandong’);
insert into SITE values(’’);
insert into SITE values();
insert into SITE values(‘heilongjiang’);
## 测试
select length(site) from SITE;
select * from SITE where site is NULL;
select * from SITE where site is not NULL;
select * from SITE where site =’’;
select * from SITE where site <> ‘’;
1)新建SITE表
2)测试
MySQL(7)数据库中的高级(进阶)语句:VIEW视图、联集和常见计算相关推荐
- MySQL(6)数据库中的高级(进阶) SQL 语句
文章目录 一.SQL高级语句 1.1 SELECT 1.2 DISTINCT 1.3 WHERE 1.4 AND OR 1.5 IN ----显示已知的值的资料 1.6 BETWEEN 1.7 通配符 ...
- MySQL(8)数据库中的高级(进阶)正则和存储过程
文章目录 一.正则表达式(REGEXP) 1.1 正则表达式匹配符 1.2 正则表达式示例 示例1:查找name中包含字符串'罗'的数据 示例2:查找age中年龄是2开头的数据 示例3:查找value ...
- 如何找出MySQL数据库中的低效SQL语句
面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改. MySQL数据库有几个配置选项可以帮助我 ...
- MariaDB/MySQL从数据库中选择随机的行
MariaDB/MySQL从数据库中选择随机的行 一个比较传统的做法是使用sql自带的rand函数,从而达到随机排序的目的. SELECT column FROM table ORDER BY RAN ...
- x509mysql_涂抹mysql笔记-数据库中的权限体系
涂抹mysql笔记-数据库中的权限体系 <>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确. mysql验证用户需要检查3项值:用户名.密码和主机来源(user.passwor ...
- oracle sql为null值,在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办
在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办? 1.MSSQL: ISNULL() 语法 ISNULL ( check_expression , replacem ...
- 自定义tt文本模板实现MySql指数据库中生成实体类
自定义tt文本模板实现MySql指数据库中生成实体类 1.在项目中依次点击"添加"/"新建项",选择"文本模板",输入名称后点击添加. 2. ...
- azure云数据库_Azure SQL数据库中的高级数据安全性–数据发现和分类
azure云数据库 Azure SQL supports in building and managing wide range of SQL databases, tools, frameworks ...
- MySql 查询数据库中所有表名
MySql 查询数据库中所有表名 查询数据库中所有表名 select table_name from information_schema.tables where table_schema='csd ...
最新文章
- yii2model 基本模型类
- 数据分析师常用的十种数据分析思路,你都知道吗?
- Java爬虫——网易云热评爬取
- NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码
- Python实现九九乘法表
- php定时执行任务没有执行,linux中定时任务crontab中的php任务无法执行,求可能的原因...
- table单元格样式
- SpringMVC中注解@RequestBody和@ResponseBody的使用区别
- 不靠谱的副业,别碰!
- Android 不透明度对应数值
- 一个简单的txt分割器
- eclipse Failed to create the part's controls 解决方法
- java mysql vo mybatis 分页_Mybatis Plus 使用VO分页查询
- 萤石云视频预览、回放、自定义录制
- freeswitch mrcp 源码分析--数据包的发送
- office2013来了
- spring中 shiro logout 配置方式
- 忆享科技聚焦|数字经济、视频云、AI数字人、全球5G用户……行业热点资讯一览
- 2010破局,联想笔记本用AMD芯
- 回顾2019年度京东集团10件大事:不忘初心,坚定前行
热门文章
- java 内存溢出和内存泄漏_JAVA中的内存溢出和内存泄漏有很大的区别
- react 文件 md5_从零配置webpack 4+react脚手架(二)
- 树型列表结构宽度调整_Material Design 网格列表
- 如何删除 AWS 资源以及关闭账户(来自亚马逊官方提供文档,记录一下方便查看)
- mysql建用户无密码_mysql建用户和修改密码和忘记密码的解决办法
- mysql 双缓冲_Mysql一些好的优化建议(二)
- Elasticsearch kibana一些基本概念
- linux下常见的网络相关命令
- 微软 VS Code 有 1400 万用户,而全球开发者才 2400 万
- 肝!打造一款高逼格的Vim神器