mysql 高阶查询

目录

基础用法

表连接

求交集

内连接

左/右连接

多表查询

子查询

分组统计

求左表无交集

求右表无交集

求两个表无交集

面试题:视图表的数据是否能修改?

无值''  和 空值null 的区别?

存储过程(数据库脚本)

创建存储过程:

查看存储过程

存储过程参数(只能用于字段)

存储过程控制语句


基础用法

select 字段 from 表 where 字段 = 值 [and|or 字段 = 值];
                               != <> > >= < <=
                               [not] in (值1, 值2, ...);
                               between 值1 and 值2;
                               like '通配符表达式';         %    _
                               regexp '正则表达式';       ^   $    .   *    {}    []    |
                               
select 字段 from 表 order by 字段 ASC|DESC;                    #排序
select 字段,聚合函数(字段) from 表 group by 字段;              #分组,通常会结合聚合函数使用
select 字段,聚合函数(字段) from 表 group by 字段 having 条件表达式;      #having的作用:根据group by分组后的结果再进行条件过滤

数学函数  round(x,y)  truncate(x,y)  rand()   greatest(值1, 值2, ....)     least(值1, 值2, ....)
聚合函数  sum(字段)   avg(字段)   max(字段)   min(字段)   count(字段)   count(*)
字符串函数   concat(字段1, 字段2, ....)    substr(x,y,z)        replace(x,y,z)     length(字段)
              字段1 || 字段2               substring(x,y,z)

select 字段 AS 字段别名  from  表 AS 表别名;

select 字段 from 表1 where 字段 运算符 (select 字段 from 表2 where 字段);
外查询                                 内查询   (内查询的结果会作为外查询的条件来使用)


表连接

inner join    内连接,只返回两个表的字段相等的行记录
left join     左连接,返回左表所有的行记录和右表字段相等的行记录,不相等的行返回null
right join    右连接,返回右表所有的行记录和左表字段相等的行记录,不相等的行返回null
union         联集,将两个select查询语句的结果合并,并去重
union all     联集,将两个select查询语句的结果合并,不去重

full outer join   全外连接,返回左表和右表中所有的行记录,MySQL不支持

求交集

内连接

select A.字段 from 左表 as A inner join 右表 as B  on  A.字段 = B.字段;
select A.字段 from 左表 as A inner join 右表 as B  using(同名字段);

左/右连接

select A.字段 from 左表 as A left join 右表 as B  on  A.字段 = B.字段 where B.字段 is not null;
select B.字段 from 左表 as A right join 右表 as B  on  A.字段 = B.字段 where A.字段 is not null;

多表查询

select A.字段 from 左表 A, 右表 B where A.字段 = B.字段;

子查询

select A.字段 from 左表 A where A.字段 in (select B.字段 from 右表 B);

分组统计

select A.字段,count(字段) from (select distinct 字段 from 左表 union all select distinct 字段 from 右表) A group by A.字段 having count(字段) > 1;


求左表无交集

select A.字段 from 左表 as A left join 右表 as B  on  A.字段 = B.字段 where B.字段 is null;

select A.字段 from 左表 A where A.字段 not in (select B.字段 from 右表 B);


求右表无交集


select B.字段 from 左表 as A right join 右表 as B  on  A.字段 = B.字段 where A.字段 is null;

select B.字段 from 右表 B where B.字段 in (select A.字段 from 左表 A);


求两个表无交集

select A.字段 from 左表 as A left join 右表 as B  on  A.字段 = B.字段 where B.字段 is null 
union 
select B.字段 from 左表 as A right join 右表 as B  on  A.字段 = B.字段 where A.字段 is null;

select A.字段 from (select distinct 字段 from 左表 union all select distinct 字段 from 右表) A group by A.字段 having count(A.字段) = 1;


create view  视图表名  as select distinct 字段 from 左表 union all select distinct 字段 from 右表;
select 字段 from 视图表名 group by 字段 having count(字段) = 1;

create view  视图表名  as  select语句;

面试题:视图表的数据是否能修改?


视图表保存的是select查询语句的定义。如果select语句查询的字段是没有被处理过的源表字段,则可以通过视图表修改源表数据。
 如果select语句查询的字段被 group by 或 函数 等处理过的字段,则不可以直接修改视图表的数据


select case '字段' when 值1或表达式 then 值或表达式              #根据一个字段的条件设置一个新的字段的值
when 值2或表达式 then 值或表达式
....
else 值或表达式 end AS "字段别名" 
from 表;


无值''  和 空值null 的区别?

空值null 的长度为 NULL ,占用空间;可以通过 字段 is null 或 字段 is not null 判断是否为null行;count(字段) 会忽略 null 行
无值'' 的长度为 0 ,不占用空间;可以通过 字段 = '' 或 字段 <> '' 判断是否为无值的行;count(字段) 不会忽略 无值 的行
                                                           != ''

存储过程(数据库脚本)


创建存储过程:

1)修改SQL语句结束符     delimiter $$
2)创建存储过程    use 库名       create procedure 存储过程名() begin  SQL语句序列;  end$$
3)把结束符改回分号      delimiter ;
4)调用存储过程          call 存储过程名;

查看存储过程

show create procedure 存储过程名;

show procedure status like '存储过程名'\G
   

存储过程参数(只能用于字段)

in      传入参数
out     传出参数
inout   传入传出参数

create procedure 存储过程名(in 传入参数名 参数数据类型, out 传出参数名 参数数据类型)
begin
    select 字段 into 传出参数 from 表 where 字段 = 传入参数;
end$$

call  存储过程名(参数值|@变量名; @变量名);      #传入参数指定的值可以是纯量值,也可以是变量名;传出参数指定的值只能是变量名


create procedure 存储过程名(inout 参数名 参数数据类型)
begin
    select 字段 into 参数名 from 表 where 字段 = 参数名;
end$$

set @变量名 = 传入的值;      #设置传入的值
call 存储过程名(@变量名);    #传入传出参数指定的值只能是变量名
select @变量名;              #查看传出的值


存储过程控制语句

条件语句:
if 条件表达式 then
    SQL语句序列1;
else
    SQL语句序列2;
end if;


循环语句:
while 条件表达式
do
    SQL语句序列;
    set 条件迭代;
end while;

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

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

相关文章

激光焊接机:塑料产品制造中的革命性优势

随着科技的飞速发展&#xff0c;激光焊接机在塑料产品制造领域的应用越来越广泛。相较于传统的焊接技术&#xff0c;激光焊接机在塑料产品制造中展现出诸多优势&#xff0c;成为现代工业生产中不可或缺的一部分。 一、精确、高效的焊接性能 激光焊接机采用高能激光束作为焊接热…

华为交换机怎么添加和剥除VLAN标签

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 华为交换机VLAN标签的添加和剥除处理过程 接口对收发的以太网数据帧添加或剥除VLAN标签的处理依据接口的接口类型和缺省VLAN。 由上面各类接口添加或…

http 状态码 列表

1XX系列&#xff1a; 指定客户端应相应的某些动作&#xff0c;代表请求已被接受&#xff0c;需要继续处理。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码&#xff0c;所以除非在某些试验条件下&#xff0c;服务器禁止向此类客户端发送 1xx 响应。 2XX系列&#xff1a; 代表…

windows通过ssh连接Liunx服务器并实现上传下载文件

连接ssh 输入&#xff1a;ssh空格用户名ip地址&#xff0c;然后按Enter 有可能出现下图提示&#xff0c;输入yes 回车即可 输入 password &#xff0c;注意密码是不显示的&#xff0c;输入完&#xff0c;再按回车就行了 以上是端口默认22情况下ssh连接&#xff0c;有些公司它…

(vue)el-popover鼠标移入提示效果

(vue)el-popover鼠标移入提示效果 效果&#xff1a; 代码&#xff1a; <el-form-itemv-for"(item,index) of ele.algorithmParameters":key"index":label"item.parametersName"class"descInput" ><el-input v-model"i…

柱面,盘片,盘面,扇面,磁头,磁道,扇区,CHS地址,LAB地址

柱面&#xff0c;盘片&#xff0c;盘面&#xff0c;扇面&#xff0c;磁头&#xff0c;磁道&#xff0c;扇区&#xff0c;CHS地址&#xff0c;LAB地址1 CHS地址 CHS地址指的是柱面&#xff08;Cylinder&#xff09;、磁头&#xff08;Head&#xff09;、扇区&#xff08;Secto…

Kotlin:Set其实是有插入的顺序?

MutableSet怎么能调用indexOf去获取它的插入顺序呢&#xff1f;参考官网Collections overview | Kotlin Documentationhttps://kotlinlang.org/docs/collections-overview.html#set翻不了墙的看下面 &#xff08;MutableSet的默认实现是LinkedHashSet&#xff0c;LinkedHashSet…

【论文阅读笔记】Stable View Synthesis 和 Enhanced Stable View Synthesis

目录 Stable View Synthesis摘要引言 Enhanced Stable View Synthesis 从Mip-NeRF360的对比实验中找到的两篇文献&#xff0c;使用了卷积神经网络进行渲染和新视角合成&#xff0c;特此记录一下 ToDo Stable View Synthesis paper&#xff1a;https://readpaper.com/pdf-ann…

Docker 存储卷管理

一、存储卷简介 存储卷是一种方便、灵活、高效的Docker容器内数据存储方式。存储卷可以在容器内的不同进程间共享数据&#xff0c;并且可以在容器之间共享和重用。 二、存储卷的优点 可以在容器之间共享和重用&#xff0c;避免了在不同容器之间复制数据的繁琐。对数据卷的修…

BMS开发之面向对象思想(adbms1818)

借鉴adbms1818的底层驱动代码 前言&#xff1a;adbms1818的主要用途就是不同种类的寄存器里面存储不同的数据&#xff0c;程序员需要通过特定的协议往寄存器里面写入或者读出数据 &#xff08;1&#xff09;定义一个结构体 里面存储了adbms1818的所有寄存器的信息。然后我们看…

航天航空线束工艺3D虚拟展馆支持多人异地参观漫游

为了满足汽车线束企业员工工作需要&#xff0c;让新老员工了解到更先进、规范的线束工艺设计技术&#xff0c;华锐视点基于VR虚拟仿真、web3d开发和图形图像技术制作了一款汽车线束工艺设计VR虚拟仿真模拟展示系统。 汽车线束工艺设计VR虚拟仿真模拟展示系统共分为pc电脑端和VR…

如何启动flowable的Flowable UI画工作流程图

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

分享一个idea插件MyBatisX的Bug

分享一个idea插件MyBatisX的Bug The plugin com.baomidou.plugin.idea. mybatisx failed to save settings and has been disabled. Please restart IntelliJ IDEAjava.lang.Throwableat com.intellij.openapi.project.DumbServiceImpl.queueTask(DumbServiceImpl.java:293)at…

XV4001BC (数字输出) 车载用

XV4001BC、XV4001BD、XV4001KC和XV4001KD是车载用SPI/I2C输出接口&#xff0c;支持角速度输出、温度传感器输出以及20度倾斜实现。这些接口可适应各种汽车导航和通讯系统&#xff0c;符合AEC-Q200标准 SPI / I2C 输出接口角速度输出(16bit)、温度传感器输出(11bit)20度倾斜实现…

初识Web服务器

一、web服务器 1、什么是web服务器&#xff1f; web服务器就是web项目的容器&#xff0c;我们将开发好的web项目部署到web容器中&#xff0c;才能使用网络中的用户通过浏览器进行访问。 一张图带你了解web服务器有啥作用&#xff1a; 在我的电脑上有一个已经做好的项目&#…

大数据Doris(五十):数据导出的其他导出案例参考

文章目录 数据导出的其他导出案例参考 一、​​​​​

Spark调优解析-spark数据倾斜优化2(七)

1 数据倾斜优化 1.1为何要处理数据倾斜&#xff08;Data Skew&#xff09; 什么是数据倾斜 对Spark/Hadoop这样的大数据系统来讲&#xff0c;数据量大并不可怕&#xff0c;可怕的是数据倾斜。 何谓数据倾斜&#xff1f;数据倾斜指的是&#xff0c;并行处理的数据集中&#xf…

UE5.1_AssetEditorSubsystemUE4_AssetEditorManager

UE5.1_AssetEditorSubsystem&UE4_AssetEditorManager 目录 UE5.1_AssetEditorSubsystem&UE4_AssetEditorManager 1. 疑问: 2. 引擎源码文件差别:

react中概念性总结(二)

目录 说说你对react的理解&#xff1f;有哪些特性&#xff1f; 说说Real diff算法是怎么运作的&#xff0c;从tree层到component层到element层分别讲解&#xff1f; 调和阶段setState干了什么&#xff1f; 说说redux的工作流程&#xff1f; 为什么react元素有一个$$type属…

Python split()方法详解:分割字符串

Python 中&#xff0c;除了可以使用一些内建函数获取字符串的相关信息外&#xff08;例如 len() 函数获取字符串长度&#xff09;&#xff0c;字符串类型本身也拥有一些方法供我们使用。 注意&#xff0c;这里所说的方法&#xff0c;指的是字符串类型 str 本身所提供的&#x…