Mysql高阶语句—子查询、视图、NULL

目录

一、子查询 

1.1 select

1.1.1 相同表查询  

1.1.2 多表查询

1.1.3 NOT 取反,将子查询的结果,进行取反操作 

1.2 insert 

1.3 update

1.4 delete

1.5 exists

1.6 as别名

二、MySql视图

2.1 创建单视图表

2.2 创建多视图表

2.3修改视图表数据

2.4更改源表数据 

三、NULL值 


一、子查询 

子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。子查询语句是先于主查询进行下一步的查询过滤。
在子查询中可以与主语句查询相同的表,也可以是不同的表

in:将主表和子表关联

1.1 select

语法格式:

select 字段1,字段2 from 表名1 where 字段 in (select 字段 from 表名 where 条件);

1.1.1 相同表查询  

select name,score from t1 where id in (select id from t1 where score>85);

1.1.2 多表查询

使用t1和shuju,两张表

 select name,score from t1 where id in (select id from shuju where score<86);

1.1.3 NOT 取反,将子查询的结果,进行取反操作 

select * from t1 where id not in (select id from shuju where score<88);

1.2 insert 

子查询还可以用在insert语句中,子查询的结果集可以通过insert语句插入到其它表中

insert into t2 select * from t1 where id in (select id from t1);

1.3 update

update语句也可以使用子查询,update内的子查询,在set更新内容时,可以是单独的一列,也可以是多列。

update t1 set score=100 where id in (select id from shuju where id<4);

1.4 delete

delete from t1 where id in (select id from shuju where score>90);

1.5 exists

exists这个关键字在子查询时,主要用于判断子查询的结果集是否为空,如果不为空,则返回true,反之则返回false
ps:在使用exists时,当子查询有结果时,不关心子查询的内容,执行主查询操作;当子查询没有结果时,则不执行主查询操作。

select count(*) from t1 where exists(select id from t1 where score>80);

select count(*) from t1 where exists(select id from t1 where score<60);

1.6 as别名

将结果集作为一张表进行查询的时候,需要用到别名

select a.id,a.name from (select id,name from t1) a;

二、MySql视图

视图时一张虚拟的表,这张虚拟表中不包含真实数据,只是做了真实数据

功能:
简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性
本质而言,视图是一种select(结果集的呈现)
注:视图适合于多表浏览时使用,不适合增、删、改

视图与表的区别和联系:

区别:

  • 视图是已经编译好的sql语句。而表不是
  • 视图没有实际的物理记录。而表有
  • 表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
  • 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构
  • 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表
  • 视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)

联系:

视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系

#创建视图
create view 视图表名 as select * from 表名 where 条件;
#查看视图
select * from 视图表名
#查看表状态
show table status\G
#查看视图结构
desc 视图表名

2.1 创建单视图表

创建单视图表

create view v_t1 as select * from t1 where score<86;

查看视图与源表结构 

2.2 创建多视图表

创建多视图表

create view v_t3(id,name,score,age) as select t.id,t.name,t.score,c.age from t1 t,test c where t.name=c.name;

2.3修改视图表数据

当数据发生变化时,若数据与之前创建视图表时的关联条件不一致时,视图表的数据将会发生改变

update v_t1 set score=88 where id=5;

2.4更改源表数据 

 update t1 set score=80 where id=5;

三、NULL值 

在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失的值,也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空。在向表内插入记录或者更新记录时,如果该字段没有 NOT NULL 并且没有值,这时候新记录的该字段将被保存为 NULL。需要注意 的是,NULL 值与数字 0 或者空白(spaces)的字段是不同的,值为 NULL 的字段是没有 值的。在 SQL 语句中,使用 IS NULL 可以判断表内的某个字段是不是 NULL 值,相反的用 IS NOT NULL 可以判断不是NULL值

NULL值与空值区别:

空值长度为0,不占空间,NULL值的长度为null,占用空间
is null无法判断空值
空值使用"=“或者”<>"来处理(!=)
count()计算时,NULL会忽略,空值会加入计算
select length(null),length(''),length('abc');

新加一个字段

alter table t1 add phone int(11);

修改字段phone一个值为空值

update t1 set card='' where id=1;

查找空值和非空值

 select * from t1 where card is null;

 select * from t1 where card is not null;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/493094.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Gui guider使用自定义字体总结

在实际开发中&#xff0c;我们通常是使用自定义字体。 在 LVGL 中&#xff0c;用户需要使用自定义的字库&#xff0c;其实现方法可分为两类&#xff1a; ① 通过 C 语言数组&#xff08;内部读取&#xff09;&#xff1b; ② 通过文件系统读取字库&#xff08;外部读取&#…

Databend 开源周报第 137 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持查询匹配倒…

大型网络游戏设计与AI赋能-4

接上文---- 第一个要去搭建的就是这个运行平台层。在此之上&#xff0c;我们会引入一些第三方SDK包。 为什么要引入第三方的SDK包&#xff1f;大家要知道一点&#xff0c;任何研发一款软件从来都不会从头造轮子。就是我们在开发一款软件的时候&#xff0c;从来都不会从头造轮子…

PyTorch使用cuda场合与Apple M1的GPU MPS的转换

此示例仅仅是一个简单的VGG模型调用。

T2. 排队选人 - 小米前端笔试编程题解

考试平台&#xff1a; 赛码 题目类型&#xff1a; 20道选择 2道编程题 考试时间&#xff1a; 2024-03-23 &#xff08;两小时&#xff09; 题目描述 小D是一名老师&#xff0c;他想选出一些同学参加一个团体比赛。 总共有n个同学&#xff0c;每个同学有一个能力值x和一个合作…

深入探讨iOS开发:从创建第一个iOS程序到纯代码实现全面解析

iOS开发作为移动应用开发的重要领域之一&#xff0c;对于开发人员具有重要意义。本文将深入探讨iOS开发的各个方面&#xff0c;从创建第一个iOS程序到纯代码实现iOS开发&#xff0c;带领读者全面了解iOS应用程序的开发流程和技术要点。 &#x1f4f1; 第一个iOS程序 在创建第…

【数据结构】 HashMap源码分析(常量+构造方法+方法)

文章目录 HashMap源码分析一、成员常量二、构造方法三、方法1.此时假定为进行了无参构造&#xff0c;没有分配内存2.当发生有参构造时&#xff0c;完成对容量的大小判断后&#xff0c;将容量大小&#xff0c;传进tableSizeFor方法中&#xff1a; HashMap源码分析 一、成员常量…

IDEA2023版本创建spring boot项目时,Java版本无法选择Java8问题解决

先简单说下出现本问题的原因&#xff1a; spring boot3.0发布时提到未来Java17将会成为主流版本&#xff0c;所有的Java EE Api都需要迁移到Jakarta EE上来。而spring boot3.0及以上版本已经不支持Java8了&#xff0c;支持Java17及以上版本。同时官方支持项目初始化的 Spring B…

FreeRTOS(三)

第二部分 事件组 一、事件组的简介 1、事件 事件是一种实现任务间通信的机制&#xff0c;主要用于实现多任务间的同步&#xff0c;但事件通信只能是事件类型的通信&#xff0c;无数据传输。其实事件组的本质就是一个整数(16/32位)。可以是一个事件发生唤醒一个任务&#xff…

微服务(基础篇-006-Docker)

Docker是一个开源的应用容器引擎&#xff0c;它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间没有任何接口&#xff08;类似 iPhone 的 app&…

【晴问算法】入门篇—递归—汉诺塔

题目描述 汉诺塔(又称河内塔)问题源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定&#xff0c;在小圆盘…

Count Color 线段树统计颜色

线段树统计颜色 先压位存储 类似一个bitset 输出答案的时候看看有几个1就好了 pushup的话或一下左右区间 #include<iostream> #include<cstring> using namespace std;const int N 1e610;struct Segment{int l,r,id,lz; }tr[N<<2];void pushup(int u){t…

oracle19c adg搭建

一、环境搭建 主机IPora19192.168.232.111ora19std192.168.232.112 本文结合&#xff1a;https://blog.csdn.net/weixin_63131036/article/details/136635553 1.配置网络yum源 1.删除redhat7.0系统自带的yum软件包&#xff1b; rpm -qa|grep yum >oldyum.pkg 备份原信息 …

工作12年了,我还没能过上自己想要的生活

写这篇文章之前&#xff0c;我想了很久&#xff0c;不知道该如何下笔&#xff0c;如何向读者说明这些年我是怎么走过来的&#xff0c;我只是依稀的记得当时的自己犹如在昨天。 2009年大学毕业&#xff0c;我和大多数的毕业生一样写简历求职。不管是招聘会还是网上投简历&#x…

YOLOv9改进策略:卷积魔改 | DCNv2升级版本,助力检测

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;在DCN的基础上&#xff0c;增加了2个创新点&#xff0c;分别是调制模块和使用多个调制后的DCN模块&#xff0c;从形成了DCN的升级版本——DCNv2 &#x1f4a1;&#x1f4a1;&#x1f4a1;如何使用&#xff1a…

循环神经网络(RNN):处理序列数据的利器

目录 1. 引言 2.RNN原理与时间步展开 3.LSTM与GRU工作机制与优势 3.1.LSTM&#xff08;Long Short-Term Memory&#xff09; 3.2.GRU&#xff08;Gated Recurrent Unit&#xff09; 4.应用案例 4.1文本生成 4.2情感分析 5.总结 1. 引言 循环神经网络&#xff08;Recurr…

UE5学习日记——Rope Swing 人物与绳索摆动知识准备

rope swing荡绳 比我想的要复杂&#xff0c;目前还没查到简单的做法。本文为查资料的记录&#xff0c;积累后再做一个自己满意的荡绳蓝图。 一、某国外网友的解释 原文 https://forums.unrealengine.com/t/implementing-rope-swing/83098/15 Project Flake - Physics Rope De…

JavaScript Uncaught ReferenceError: WScript is not defined

项目场景&#xff1a; 最近在Visual Studio 2019上编译libmodbus库&#xff0c;出现了很多问题&#xff0c;一一解决特此记录下来。 问题描述 首先就是configure.js文件的问题&#xff0c;它会生成两个很重要的头文件modbus_version.h和config.h&#xff0c;这两个头文件其中…

软件测试过程中如何有效的开展接口自动化测试

一.简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中&#xff0c;通过对接口的自动化测试来提高测试效率和测试质量&#xff0c;减少人工测试的工作量和测试成本&#xff0c;并且能够快速发现和修复接口错误&…

使用Qt生成图片

Qt之生成png/jpg/bmp格式图片_qt生成图片-CSDN博客 (1)使用QPainter 示例关键代码&#xff1a; QImage image(QSize(this->width(),this->height()),QImage::Format_ARGB32);image.fill("white");QPainter *painter new QPainter(&image);painter->…