MySQL语句(补充)

目录

一、子查询 

1.1.select 语句

1.1.1.相同表查询

 1.1.2.多表查询

1.1.3.NOT

1.1.4. insert 

1.1.5. update

1.1.6.delete

1.1.7.exists

1.1.8.as别名

二、MySql视图

2.1.视图与表的区别和联系

2.2.建立视图

2.3.修改视图表数据

三、NULL值 

四、连接查询

4.1.内连接

4.2.左连接

4.3.右连接

五、存储过程

5.1.存储过程的优点

5.2.创建存储过程

5.3.查看存储过程

5.4.存储过程的参数

5.5.修改存储过程 

5.6.  删除存储过程 

六、总结 


一、子查询 

子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤。

子语句可以与主语句所查询的表相同,也可以是不相同表

1.1.select 语句

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

子语句中的sql语句是为了,最后过滤出一个结果集,用于主语句的判断条件

in: 将主表和子表关联/连接的语法

1.1.1.相同表查询

 1.1.2.多表查询

IN 用来判断某个值是否在给定的结果集中,通常结合子查询来使用

1.1.3.NOT

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

1.1.4. insert 

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

1.1.5. update

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

1.1.6.delete

1.1.7.exists

exists这个关键字在子查询时,主要用于判断子查询的结果集是否为空,如果不为空,则返回true,反之则返回false

在使用exists时,当子查询有结果时,不关心子查询的内容,执行主查询操作;当子查询没有结果时,则不执行主查询操作。

1.1.8.as别名

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

二、MySql视图

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

功能:

简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性

本质而言,视图是一种select(结果集的呈现)

视图适合于多表浏览时使用,不适合增、删、改

2.1.视图与表的区别和联系

区别:

视图是已经编译好的sql语句。而表不是

视图没有实际的物理记录。而表有

表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改

视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构

表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表

视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)

联系

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

2.2.建立视图

create view 视图表名 as select * from 表名 where 条件;

2.3.修改视图表数据

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

三、NULL值 

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

四、连接查询

MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的 共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择 性的连接到选定的主表结果集上。

较常用的连接查询包括:内连接、左连接和右连接

4.1.内连接

MySQL 中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。通常在 FROM 子句中使用关键字 INNER JOIN 来连接多张表,并使用 ON 子句设置连接条件,内连接是系统默认的表连接,所以在 FROM 子句后可以省略 INNER 关键字,只使用 关键字 JOIN。同时有多个表时,也可以连续使用 INNER JOIN 来实现多表的内连接,不过为了更好的性能,建议最好不要超过三个表

 

select 表名1.字段1,表名1.字段2 from 表名1 inner join 表名2 on 表名1.字段 = 表名2.字段;

4.2.左连接

左连接也可以被称为左外连接,在FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 关键字来表示。左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行

左连接中左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方为NULL

4.3.右连接

右连接也被称为右外连接,在FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 关键字来表示。右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配

五、存储过程

存储过程是一组为了完成特定功能的SQL语句集合。

存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。

5.1.存储过程的优点

执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
SQL语句加上控制语句的集合,灵活性高
在服务器端存储,客户端调用时,降低网络负载
可多次重复被调用,可随时修改,不影响客户端调用
可完成所有的数据库操作,也可控制数据库的信息访问权限

5.2.创建存储过程

create procedure <过程名> ([过程参数……]) <过程体>
[过程参数……] 格式
<过程名>:尽量避免与内置的函数或字段重名
<过程体>:语句
[in|out|inout] <参数名><类型>
mysql>delimiter $$                   将语句的结束符号从分号;临时修改,以防出问题,可以自定义
mysql> create procedure aa()         创建存储过程,过程名自定义,()可带参数-> begin                         过程体以关键字BEGIN开始-> select * from ky35 where name like 'zh%';     过程体语句-> end$$                         过程体以关键字END结尾
mysql> delimiter ;                   语句的结束符号恢复为分号
mysql> call aa;                      调用存储过程​

存储过程的主体都分,被称为过程体

以BEGIN开始,以END结束,若只有一条sQL语句,则可以省略BEGIN-END

以DELIMITER开始和结束  

5.3.查看存储过程

SHOW CREATE PROCEDURE [数据库.]存储过程名;        #查看某个存储过程的具体信息SHOW PROCEDURE STATUS [LIKE '%Proc%'] \G          #查看存储过程状态

5.4.存储过程的参数

输入参数:in 表示调用者向过程传入值(传入值可以是字面量或变量)

输出参数:out 表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

输入/输出参数:inout ,即表示调用者向过程传入值,又表示过程向调用者传入值(只能是变量)

5.5.修改存储过程 


alter procedure <过程名> [<特征>……]
alter procedure bb modifies sql data sql security invoker;modifies sql data:表名子程序包含写程序的语句security:安全等级invoker:当定义为 invoker 时,只要执行者有执行权,就可以成功执行

5.6.  删除存储过程 

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。
 

drop procedure if exists 过程名;

六、总结 

子查询之间查询不同表的用法

视图的作用与局限性适合于多表浏览时使用,不适合增、删、改

连接查询

内连接inner join,显示的数据为左右表都同时满足条件

左连接 left join ,是以左表为基础显示,右表需满足条件

右连接right join ,是以右表为基础显示,左表需满足条件

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio详细安装教程及入门测试

Android Studio 是 Android 开发人员必不可少的工具。 它可以帮助开发者快速、高效地开发高质量的 Android 应用。 这里写目录标题 一、Android Studio1.1 Android Studio主要功能1.2 Android应用 二、Android Studio下载三、Android Studio安装四、SDK工具包下载五、新建测试…

以实践助力《银行保险机构数据安全管理办法》规范落地

日前&#xff0c;金融监管总局网站显示&#xff0c;为规范银行业保险业数据处理活动&#xff0c;保障数据安全&#xff0c;促进数据合理开发利用&#xff0c;金融监管总局起草了《银行保险机构数据安全管理办法&#xff08;征求意见稿&#xff09;》&#xff08;下称《办法》&a…

【C语言】strcmp 的使⽤和模拟实现

前言 这篇文章将要带我们去实现模拟一个strcmp函数 首先我们要知道strcmp函数的定义 strcmp()定义和用法 我们先看一下strcmp在cplusplus网站中的定义 链接: link int strcmp ( const char * str1, const char * str2 );比较两个字符串将 C 字符串 str1 与 C 字符串 str2 …

【物联网开源平台】tingsboard安装与编译

别看这篇了&#xff0c;这篇就当我的一个记录&#xff0c;我有空我再写过一篇&#xff0c;编译的时候出现了一个错误&#xff0c;然后我针对那一个错误执行了一个命令&#xff0c;出现了绿色的succes,我就以为整个tingsboard项目编译成功了&#xff0c;后面发现的时候&#xff…

Python中lambda函数使用方法

在Python中&#xff0c;lambda 关键字用于创建匿名函数&#xff08;无名函数&#xff09;&#xff0c;这些函数的特点是简洁、一次性使用&#xff0c;并且通常用于只需要一行表达式的简单场景。下面是lambda函数的基本结构和使用方法&#xff1a; 基本语法&#xff1a; lambd…

JRT菜单

上一章搭建了登录界面的雏形和抽取了登录接口。给多组使用登录和菜单功能提供预留&#xff0c;做到不强行入侵别人业务。任何产品只需要按自己表实现登录接口后配置到容器即可共用登录界面和菜单部分。最后自己的用户关联到JRT角色表即可。 登录效果 这次构建菜单体系 首先用…

A Review on Influence Dissemination in Social Networks

Abstract 影响力传播研究是社交网络信息传播的关键问题。由于影响力分析在营销、广告、个性化推荐、舆情监测等方面的现实意义&#xff0c;研究人员从不同角度研究了该问题并提出了解决方案。在本文中&#xff0c;我们回顾了社交网络中的影响力传播&#xff0c;并得出结论&…

串口IAP介绍

一、STM32编程方式 &#xff08;1&#xff09;在线编程&#xff08;ICP&#xff0c;in circuit programming&#xff09; 系统存储器&#xff1a;留给ST写启动程序代码&#xff0c;启动程序代码通过串口1接口实现对闪存存储器的编程。 &#xff08;2&#xff09;在程序中编程…

深度优先搜索—三种遍历方式

先序遍历、中序遍历、后序遍历 1、先序遍历 2、中序遍历 3、后序遍历

【ArcGIS微课1000例】0106:ArcGIS制作风向频率(风速)玫瑰图

文章目录 一、效果预览二、加载数据三、创建图表四、图表修饰五、保存图片一、效果预览 在ArcGIS制作的风向频率玫瑰图最终效果如下所示: 二、加载数据 加载配套实验数据包中0106.rar中的excel数据,然后右键→打开。 三、创建图表 1. 创建图表。右击打开属性表,选择表选项…

java多线程基本操作方法

目录 一、isAlive&#xff08;&#xff09; 二、 join&#xff08;&#xff09; 三、start和run 四、 volatile() 五、synchronized 1、synchronized 引入 2、死锁 第一种情况&#xff1a;反复加锁 第二种情况 对不同对象嵌套加锁的死锁 3、形成死锁条件 六、wait…

谷粒商城——Redisson看门狗

可重入锁&#xff1a; 看门狗机制&#xff1a;(lock.lock()不设置过期时间就会自动触发 看门狗机制) 如果一个线程已经上锁后&#xff0c;在运行的过程中中断导致未释放锁从而导致其他线程无法进行&#xff0c;为此需要为每个锁设置自动过期时间。但是如果线程运行时间较长&am…