MySQL通用语法解析

SQL通用语法

SQL语句可以单行或多行书写,以分号结尾
SQL语句可以使用空格/缩进来增强语句的可读性
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写

注释

单行注释:-- 注释内容 或 # 注释内容
多行注释:/* 注释内容 */

标题

SQL分类
DDL:数据定义语言,用来定义数据库对象(数据库,表,字段)
DML:数据操作语言,用来对数据库表中的数据进行增删改
DQL:数据查询语言,用来查询数据库中表的记录
DCL:数据控制语言,用来创建数据库用户、控制数据库的访问权限

DDL-数据库定义

创建数据库

create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ];

删除数据库

drop database [ if exists ] 数据库名;

切换数据库

use 数据库名;

查询数据库

查询所有数据库

show databases;

查询当前数据库

select database();

DDL-表定义

创建表

create table 表名(
字段1 类型 [comment 字段1注释 ],
字段2 类型 [comment 字段2注释 ],
字段3 类型 [comment 字段3注释 ],

字段n 字段n类型 [comment 字段n注释 ]
) [ comment 表注释 ];

删除表

删除表

drop table [ if exists ] 表名;

删除指定表, 并重新创建表

truncate table 表名;

修改表

添加字段

alter table 表名 add 字段名 类型 (长度) [ comment 注释 ] [ 约束 ];

删除字段

alter table 表名 drop 字段名;

修改字段类型

alter table 表名 modify 字段名 新数据类型 (长度);

修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 类型 (长度) [ comment 注释 ] [ 约束 ];

修改表名

alter table 表名 rename to 新表名;
rename table 旧表名to 新表名;

查询表

查询当前数据库所有表

show tables;

查看指定表结构

desc 表名;

查询指定表的建表语句

show create table 表名;

DML-表操作(增删改)

添加数据

给指定字段添加数据

insert into 表名 (字段名1, 字段名2, …) values (值1, 值2, …);

给全部字段添加数据

insert into 表名 values (值1, 值2, …);

批量添加数据

insert into 表名 (字段名1, 字段名2, …) values (值1, 值2, …),
(值1, 值2, …),
(值 1, 值2, …);

删除数据

delete from 表名 [ where 条件 ] ;

修改数据

update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , … [ where 条件 ] ;

DQL-表操作(查询)

语法结构

select
[聚合函数]字段列表
from
表名列表
[where]
条件列表
[group by]
分组字段列表
[having]
分组后条件列表
[order by]
排序字段列表
[limit]
分页参数

基础查询

查询多个字段

select 字段1, 字段2, 字段3 … from 表名 ;
select * from 表名 ; (效率低)

字段设置别名

select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] … from 表名;
select 字段1 [ 别名1 ] , 字段2 [ 别名2 ] … from 表名;

去除重复记录

select distinct 字段列表 from 表名;

条件查询

语法

select 字段列表 from 表名 where 条件列表 ;

条件

比较运算符功能
>大于
<小于
>=大于等于
<=小于等于
=等于
!= 或 <>不等于
between…and…在某个范围之内(含最小、最大值)
in(…)在in之后的列表中的值,多选一
like模糊匹配(_匹配单个字符,%匹配任意个字符)
null是NULL
逻辑运算符功能
and 或 &&并且(多个条件同时成立)
or 或 ||或者(多个条件任意一个)
not 或 !非,不是

聚合函数

将一列数据作为一个整体,进行纵向计算 ,null值是不参与所有聚合函数运算的

常见的聚合函数

函数功能
count()统计数量
max()最大值
min()最小值
avg()平均值
sum()求和

分组查询

语法

select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];

where与having区别

  1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组,而having是分组之后对结果进行过滤
  2. 判断条件不同:where不能对聚合函数进行判断,而having可以

注意事项

  1. 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
  2. 执行顺序: where > 聚合函数 > having ;
  3. 支持多字段分组, 具体语法为 : group by columnA,columnB

排序查询

语法

select 字段列表 from 表名 order by 字段1 排序方式1 ,字段2 排序方式2;

排序方式

  1. asc : 升序(默认值)
  2. desc: 降序
  3. 如果是升序, 可以不指定排序方式ASC
  4. 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

分页查询

语法

select 字段列表 from 表名 limit 起始索引, 查询记录数;

注意事项

  1. 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数
  2. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10
  3. 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT

单表查询书写顺序

select - from - where - group by - having - order by - limit

单表查询执行顺序

from - where - group by - having - select - order by - limit

函数

字符串函数

函数功能
concat(s1,s2,…sn)字符串拼接,将S1,S2,… Sn拼接成一个字符串
lower(str)将字符串str全部转为小写
upper(str)将字符串str全部转为大写
lpad(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str)去掉字符串头部和尾部的空格
substring(str,start,len)返回从字符串str从start位置起的len个长度的字符串

数值函数

函数功能
ceil(x)向上取整
floor(x)向下取整
mod(x,y)返回x/y的模
rand()返回0~1内的随机数
round(x,y)求参数x的四舍五入的值,保留y位小数

日期函数

函数功能
curdate()返回当前日期
curtime()返回当前时间
now()返回当前日期和时间
year(date)获取指定date的年份
month(date)获取指定date的月份
day(date)获取指定date的日期
date_add(date,interval expertype)返回一个日期/时间值加上一个时间间隔exprtype后的时间值
datediff(date1,date2)返回起始时间date1 和 结束时间date2之间的天数

流程函数

函数功能
if(value, t, f)如果value为true,则返回t,否则返回f
ifnull(value1 , value2)如果value1不为空,返回value1,否则返回value2
case when [ val1 ] then [res1] … else [ default ] end如果val1为true,返回res1,… 否则返回default默认值
case [ expr ] when [ val1 ] then [res1] … else [ default ] end如果expr的值等于val1,返回 res1,… 否则返回default默认值

约束

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
目的:保证数据库中数据的正确、有效性和完整性
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束

not null非空约束限制该字段的数据不能为null
unique唯一约束保证该字段的所有数据都是唯一、不重复的
primary key主键约束主键是一行数据的唯一标识,要求非空且唯一
auto_increment自增约束创建后自动加1
default默认约束保存数据时,如果未指定该字段的值,则采用默认值
check检查约束(8.0.16版本 之后)保证字段值满足某一个条件
foreign key外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性

外键约束

用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性

添加外键

create table 表名(
字段名 数据类型,

[constraint] [外键名称] foreign key (外键字段名) references 主表 (主表列名)
);
alter table 表名 add constraint 外键名称 foreign key (外键字段名)
references 主表 (主表列名) ;

删除外键

alter table 表名 drop foreign key 外键名称;

删除/更新行为

alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名 (主表字段名) on update 行为on delete 行为;

行为说明
no action当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 restrict 一致) 默认行为
restrict当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 no action 一致) 默认行为
cascade当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录
set null当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)

多表查询

多表关系

一对一

案例: 用户 与 用户详情的关系
关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique)

一对多

案例: 部门 与 员工的关系
关系: 一个部门对应多个员工,一个员工对应一个部门
实现: 在多的一方建立外键,指向少的一方的主键

多对多

案例: 学生 与 课程的关系
关系: 一个学生可以选修多门课程,一门课程也可以供多个学生选择
实现: 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

分类

内连接:相当于查询A、B交集部分数据
外连接:
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询右表所有数据,以及两张表交集部分数据
自连接:当前表与自身的连接查询,自连接必须使用表别名
子查询

内连接

隐式内连接

select 字段列表 from 表1 , 表2 where 条件 … ;

显示内连接

select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 … ;

注意事项

  1. 当表名过长时,可以给表起别名
  2. 一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段

外连接

左外连接

select 字段列表 from 表1 left [ outer ] join 表2 on 条件 … ;

右外连接

select 字段列表 from 表1 right [ outer ] join 表2 on 条件 … ;

自连接

select 字段列表 from 表a 别名a join 表a 别名b on 条件 … ;

注意事项
  1. 在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底是哪一张表的字段
  2. 自连接查询,可以是内连接查询,也可以是外连接查询

联合查询

select 字段列表 from 表a …
union [ all ]
select 字段列表 from 表b …;

注意事项

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集
对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致
union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重

子查询 (嵌套查询)

select * from t1 where column1 = ( select column1 from t2 );

分类

根据子查询结果不同,分为:

1.标量子查询(子查询结果为单个值)
2.列子查询(子查询结果为一列)
3.行子查询(子查询结果为一行)
4.表子查询(子查询结果为多行多列)

根据子查询位置,分为:

1.where之后
2.from之后
3.select之后

标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询
常用的操作符:= <> > >= < <=

列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询
常用的操作符:in 、not in 、 any 、some 、 all

操作符描述
in在指定的集合范围之内,多选一
not in不在指定的集合范围之内
any子查询返回列表中,有任意一个满足即可
some与any等同,使用some的地方都可以使用any
all子查询返回列表的所有值都必须满足

行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:= 、<> 、in 、not in

表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。
常用的操作符:in

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

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

相关文章

weight-tying探索

在一些领域&#xff0c;将嵌入层和输出层的权重绑定&#xff0c;以达到减少参数量并使得相同token保持统一的embedding空间的作用。 下面的nn.Linear(3, 10)的权重矩阵的尺寸是10*3&#xff0c;即y W x b&#xff0c;因此跟nn.Embedding(10, 3)的权重矩阵大小相等。 impor…

应用运维文档1

统一nginx接入配置指南 Nginx配置规范 1:不带微服务编码上下文至后端,以metadata-ui为例 location段配置信息,location配置中维护微服务编码上下文信息 # app_code: metadata-ui 流水线名称: metadata-ui location ~ ^/metadata-ui/(?P.*) {set $app_code metadata-ui;p…

语音特征的反应——语谱图

语谱图的横坐标为时间&#xff0c;纵坐标为对应时间点的频率。坐标中的每个点用不同颜色表示&#xff0c;颜色越亮表示频率越大&#xff0c;颜色越淡表示频率越小。可以说语谱图是一个在二维平面展示三维信息的图,既能够表示频率信息,又能够表示时间信息。 创建和绘制语谱图的…

卫星遥感监测森林植被健康度

随着地球环境的日益恶化&#xff0c;森林作为地球上最重要的生态系统之一&#xff0c;其变化对全球气候、生态环境和人类社会经济发展产生深远影响。因此&#xff0c;及时、准确地监测森林变化对于保护生态环境、维护生态平衡、推进可持续发展具有重要意义。卫星遥感影像技术因…

若依框架学习——分页查询列表

条件查询【多条件】列表展示【分页】SaCheckPermissionTableName TableId NotBlank Page分页 响应数据封装类

C语言main( ) 函数有什么作⽤?

一、问题 main( ) 函数是C语⾔程序中最重要的组成部分&#xff0c;不可或缺&#xff0c;那么它有什么作⽤&#xff1f; 二、解答 C程序是由⼀个或多个函数组成的&#xff0c;其中必须有⼀个且只有⼀个名为 main( ) 的函数&#xff0c; 该函数是整个程序的⼊口。 既然是程序的⼊…

C#速览入门

C# & .NET C# 程序在 .NET 上运行&#xff0c;而 .NET 是名为公共语言运行时 (CLR) 的虚执行系统和一组类库。 CLR 是 Microsoft 对公共语言基础结构 (CLI) 国际标准的实现。 CLI 是创建执行和开发环境的基础&#xff0c;语言和库可以在其中无缝地协同工作。 用 C# 编写的…

使用Python实现决策树算法

决策树是一种常用的机器学习算法&#xff0c;它可以用于分类和回归任务。在本文中&#xff0c;我们将使用Python来实现一个基本的决策树分类器&#xff0c;并介绍其原理和实现过程。 什么是决策树算法&#xff1f; 决策树是一种基于树形结构的机器学习算法&#xff0c;它通过…

GO - 泛型编程

go - 泛型编程 介绍 泛型即开发过程中编写适用于所有类型的模板&#xff0c;只有在具体使用的时候才能确定其真正的类型。随着Go 1.18版本的发布&#xff0c;泛型正式成为了Go语言的一部分。 在编写代码时&#xff0c;我们经常会遇到需要处理不同类型的数据的情况。传统上&am…

基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】

基于springboot实现IT技术交流和分享平台系统演示 摘要 我国科学技术的不断发展&#xff0c;计算机的应用日渐成熟&#xff0c;其强大的功能给人们留下深刻的印象&#xff0c;它已经应用到了人类社会的各个层次的领域&#xff0c;发挥着重要的不可替换的作用。信息管理作为计算…

蓝桥杯备考随手记: BigInteger 和 BigDecimal

在Java中&#xff0c;BigInteger和BigDecimal是用来处理大整数和高精度浮点数的类&#xff0c;分别属于java.math包。 下面分别介绍这两个类的特点、用途和常用方法&#xff1a; BigInteger: 特点: BigInteger类表示任意精度的整数&#xff0c;可以处理比long型和int型更大范围…

asm磁盘组无法写入问题-处理中

有个11204的rac环境&#xff0c;没应用补丁&#xff0c;5号突然报归档满&#xff0c;登录环境后发现奇怪&#xff0c;一个1T磁盘建成的DATA磁盘组使用了近800G&#xff0c;读写正常&#xff0c;一个1.5T磁盘建成的FRA磁盘组&#xff0c;目前还剩余729551M&#xff0c;无法写入归…

SAP ABAP ALV转换例程的问题

为关键用户开发了一个ALV报表&#xff0c;因为导出Excel导致 curr性质的字段 例程的 问题 &#xff0c;使得负号后置&#xff0c;Excel不能直接运算&#xff0c;需要转换你成数值后才可以&#xff0c;经过调试发现是对应的域 的转换例程的问题 FUNCTION CONVERSION_EXIT_AC152_…

雷达学习之多普勒频率

一、多普勒频率如何产生&#xff1f; 雷达的原理是发射一些无线电脉冲来探测目标&#xff0c;并通过回波的延时来计算目标与雷达的距离&#xff0c;但当目标为运动物体时&#xff0c;在回波向目标传输的同时&#xff0c;目标也会远离或接近回波&#xff0c;所以会导致回波信号…

ctfshow web入门 文件包含 web151--web161

web151 打算用bp改文件形式(可能没操作好)我重新试了一下抓不到 文件上传不成功 改网页前端 鼠标右键&#xff08;检查&#xff09;&#xff0c;把png改为php访问&#xff0c;执行命令 我上传的马是<?php eval($_POST[a]);?> 查看 web152 上传马 把Content-Type改为…

【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程

nnUNet是一个自适应的深度学习框架&#xff0c;专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点&#xff1a; 自适应框架&#xff1a;nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等&#xff0c;从而避免了繁琐的手工调参过程。 自动化流程&a…

C++流程控制语句:嵌套循环案例分析【九九乘法表】

在C++编程中,循环语句的嵌套是一种常见且强大的技术手段,它允许我们将多个循环结构相互嵌套,形成多维循环。不论是for循环、while循环还是do…while循环,均可以进行嵌套。 而在实践中,由于for循环具有明确的循环变量初始化、条件判断和更新机制,因此在嵌套循环中,for循…

封装单独的树操作栏组件

文章目录 概要整体架构流程 概要 把公共的部分单独拆出来&#xff0c;封装到一个新的vue文件夹中&#xff0c; 里面的数据通过父传子的方式传递&#xff0c;子通过props接受&#xff08;静态代码实现的树状图细看代码展示&#xff09; 整体架构流程 <template><!-- …

C语言第四十一弹---猜数字游戏

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 猜数字游戏 1、随机数生成 1.1、rand 1.2、srand 1.3、time 1.4、设置随机数的范围 2、猜数字游戏的分析和设计 2.1、猜数字游戏功能说明 2.2、猜数字游戏…

如何用Java后端处理JS.XHR请求

Touching searching engine destroies dream to utilize php in tomcat vector.The brave isn’t knocked down&#xff0c;turn its path to java back-end. Java Servlet Bible schematic of interaction between JS front-end and Java back-end Question 如何利用Java…