MySQL笔记--SQL语句
目录
1--SQL的通用语法
2--SQL语句的分类
3--DDL语句
3-1--数据库操作
3-2--表操作
3-3--数据类型
3-4--修改和删除
4--DML语句
4-1--插入数据
4-2--修改数据
4-3--删除数据
5--DQL语句
5-1--基本查询
5-2--条件查询
5-3--聚合函数
5-4--分组查询
5-5--排序查询
5-6--分页查询
5-7--执行顺序
6--DCL语句
6-1--用户管理
6-2--权限控制
1--SQL的通用语法

2--SQL语句的分类

3--DDL语句
3-1--数据库操作
# 查询所有数据库
show databases;# 查询当前使用数据库
select database();# 创建数据库
create database 数据库名
create database if not exists 数据库名; # 不存在时创建,存在则不创建
create database 数据库名 default charset 字符集; # 使用特定字符集# 删除数据库
drop database if exists 数据库名;# 使用特定数据库
use 数据库名;

3-2--表操作
# 查询当前数据库所有表
show tables;# 查询表结构
desc 表名;# 查询指定表的建表语句
show create table 表名;# 创建表
create table 表名(字段1 字段1类型[COMMENT 字段1注释],字段2 字段1类型[COMMENT 字段2注释],字段3 字段1类型[COMMENT 字段3注释],......字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释];# example:
create table tb_user(-> id int comment '编号',-> name varchar(50) comment '姓名',-> age int comment '年龄',-> gender varchar(1) comment '性别'-> ) comment '用户表';

3-3--数据类型
MySQL中数据类型包括三类:数值类型、字符串类型和日期时间类型;
数值类型:通过增加 unsigned 来指明使用无符号;

字符串类型:char 的性能会比 varchar 的性能要好。

日期时间类型:

案例:
create table emp(-> id int comment '编号',-> workno varchar(10) comment '工号',-> name varchar(10) comment '姓名',-> gender char(1) comment '性别',-> age tinyint unsigned comment '年龄',-> idcard char(18) comment '身份证号',-> entrydate date comment '入职时间'-> ) comment '员工表';

3-4--修改和删除
# 添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释];
# 为 emp 表增加一个新的字段"昵称",字段名为nickname,类型为varchar(20);
alter table emp add nickname varchar(20) comment "昵称";# 修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);# 修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释];
# 将 emp 表的 nickname 字段修改为 username,类型为varchar(30)
alter table emp change nickname username varchar(30) comment "用户名";# 修改表名
alter table 表名 rename to 新表名;
# 将 emp 表的表名修改为employee
alter table tmp rename to employee;# 删除字段
alter table 表名 drop 字段名;
# 将 emp 表的字段 username 删除;
alter table tmp drop username;# 删除表
drop table [if exists] 表名;# 删除指定表,并重新创建该表
truncate table 表名; # 重新创建的是一个空表
4--DML语句
4-1--插入数据
# 给指定字段添加数据
insert into 表名(字段名, 字段名2, ...) values(值1, 值2, ...);
# example
insert into emp(id, workno, name, gender, age, idcard, entrydate) values(1, '001', 'zhangsan', '男', 18, '123123123123123123', '2023-10-31');
# 展示插入后表的结果
select * from 表名;
# example
select * from emp;# 给全部字段添加数据
insert into 表名 values(值1, 值2, ...);# 一次插入多条记录,使用,来分隔两条记录
insert into 表名 values(...), (...);


4-2--修改数据
# 指定条件来修改指定数据
update 表名 set 字段1=值1, z字段2=值2, ..., where 条件;
# example
update emp set name = 'lisi', age = 19 where id = 1;# 不指定条件来修改所有数据
update 表名 set 字段1=值1, z字段2=值2, ...;
# update emp set age = 20;

4-3--删除数据
# 删除指定数据
delete from 表名 where 条件;# 删除全部数据
delete from 表名;

5--DQL语句
5-1--基本查询
# 查询多个字段
select 字段1, 字段2, 字段3, ... from 表名;
select * from 表名;# 设置别名
select 字段1 as 别名1, 字段2 as 别名2, ... from 表名;# 去除重复记录
select distinct 字段列表 from 表名;
5-2--条件查询
常用条件如下:

# 基本语法
select 字段列表 from 表名 where 条件列表;# 基本实例
# 1. 查询年龄等于 88 的员工
select * from emp where age = 88; # 2. 查询年龄小于 20 的员工
select * from emp where age < 20;# 3. 查询年龄小于等于 20 的员工
select * from emp where age <= 20;# 4. 查询没有身份证号的员工
select * from emp where idcard is null;# 5. 查询由身份证号的员工
select * from emp where idcard is not null;# 6. 查询年龄不等于 88 的员工
select * from emp where age != 88;
select * from emp where age <> 88;# 7. 查询年龄在15岁到20岁之间的员工(闭区间)
select * from emp where age >= 15 && age <= 20;
select * from emp where age >= 15 and age <= 20;
select * from emp where age between 15 and 20;# 8. 查询性别为女 且年龄小于 25 岁的员工
select * from emp where gender = '女' and age < 25;# 9. 查询年龄等于 18 或 20 或 40 的员工
select * from emp where age = 18 or age = 20 or age = 40;
select * from emp where age in (18, 20, 40);# 10. 查询姓名为两个字的员工
select * from emp where name like '__';# 11. 查询身份证号最后一位是X的员工
select * from emp where idcard like '%X';
5-3--聚合函数
聚合函数用于将数据作为整体,进行纵向计算;
常见聚合函数:
# 基本语法:
select 聚合函数(字段列表) from 表名; # null 值不参与聚合函数的计算# 代码实例
# 1. 统计员工数量
select count(*) from emp;# 2. 统计员工平均年龄
select avg(age) from emp;# 3. 统计员工最大年龄
select max(age) from emp;# 4. 统计员工最小年龄
select min(age) from emp;# 5. 统计深圳地区员工的年龄总和
select sum(age) from emp where workaddress = '深圳';
5-4--分组查询
基本语法
select 字段列表 from 表名 where 条件 group by 分组字段名 having 分组后过滤条件;where 和 having 的区别:
1. 执行时机不同,where是分组之前进行过滤,不满足where条件的不会参与分组,having是对分组之后的结果进行过滤
2. 判断条件不同,where不能对聚合函数进行判断,而having可以
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
# 代码实例:
1. 根据性别分组,统计男性员工和女性员工的数量
select gender, count(*) from emp group by gender;2. 根据性别分组,统计男性员工和女性员工的平均年龄
select gender, avg(age) from emp group by gender;3. 查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) > 3;
5-5--排序查询
基本语法:
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;排序方式:
asc 表示升序(默认值)
desc 表示降序
使用多字段排序时,当第一个字段值相同时,会根据第二个字段进行排序
代码实例:# 1. 根据年龄对员工进行升序排序
select * from emp order by age asc;# 2. 根据入职时间对员工进行降序排序
select * from emp order by entrydate desc;# 3. 根据年龄对员工进行升序排序,当年龄相同时按照入职时间进行降序排序
select * from emp order by age asc, entrydate desc;
5-6--分页查询
基本语法:
select 字段列表 from 表名 limit 起始索引, 查询记录数;注意事项:
起始索引从 0 开始,起始索引 = (查询页码 - 1) * 每页显示记录数;
不同数据库对于分页查询有不同的实现, MySql中是limit;
如果查询的是第一页数据,则起始索引可以省略;
代码实例:
# 1. 查询第1页员工数据,每页显示10条记录
select * from emp limit 0, 10;
select * from emp limit 10; # 第一页可以省略查询页码# 2. 查询第二页员工数据
select * from emp limit 10 10; # (2 - 1) * 10 = 10
5-7--执行顺序

6--DCL语句
6-1--用户管理
# 1. 查询用户
use mysql;
selece * from user;# 2. 创建用户
create user '用户名'@'主机名' identified by '密码';# 3. 修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';# 4. 删除用户
drop user '用户名'@'主机名';主机名可以使用 % 通配,表示可以从任何主机登录数据库;
6-2--权限控制
常见权限:

基本语句
# 1. 查询权限
show grants for '用户名'@'主机名';# 2. 授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';# 3. 撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';多个权限之间使用逗号分隔,授权时数据库名和表名可以使用 * 进行通配,表示所有
相关文章:
MySQL笔记--SQL语句
目录 1--SQL的通用语法 2--SQL语句的分类 3--DDL语句 3-1--数据库操作 3-2--表操作 3-3--数据类型 3-4--修改和删除 4--DML语句 4-1--插入数据 4-2--修改数据 4-3--删除数据 5--DQL语句 5-1--基本查询 5-2--条件查询 5-3--聚合函数 5-4--分组查询 5-5--排序查…...
线扫相机DALSA-相机平场矫正详细步骤
在相机视野下铺放白色亚克力板或纯白纸,采集图像。打开曲线图。 选择 Line Profile 模式。调节好相应所需的曝光时间、光源、增益和镜头光圈,让白平衡纸显示出来的灰度值大概在 150-200 左右。 在Calibration Algorithm 中将显示的数值设置好。 先暗场…...
求购供应发布农业副业产品市场行情小程序开发
农业副业产品求购供应发布市场行情小程序H5开源版开发 后台同步:一键获取全国近200家农产品批发市场的商品价格,包括蔬菜、水果、水产、粮油和农副产品等。 实时更新和同步市场价格动态,保障信息的准确性和时效性。 前端VIP权益功能&…...
框架安全-CVE 复现SpringStrutsLaravelThinkPHP漏洞复现
目录 服务攻防-框架安全&CVE 复现&Spring&Struts&Laravel&ThinkPHP概述PHP-开发框架安全-Thinkphp&Laravel漏洞复现Thinkphp-3.X RCEThinkphp-5.X RCELaravel框架安全问题- CVE-2021-3129 RCE JAVAWEB-开发框架安全-Spring&Struts2Struts2框架安全…...
【腾讯云 HAI域探秘】宝妈也能快速入门AI绘画
活动背景 本次活动是由腾讯云和CSDN联合推出的开发者技术实践活动。我通过技术交流直播、动手实验、征文等形式,深入沉浸式体验腾讯云高性能应用服务 HAI。从活动中汲取到技术上的精华。在本次活动中,只要完成各个环节任务,不仅可以参与 AIGC…...
归并排序,自顶向下
归并排序主要两步,一步是划分区间,另一步是合并两个区间 这个算法的稳定性更好,对比快排这种,如果整体是倒序的话,快排的复杂度会达到o(n^2),归并会更稳定。 划分区间主要是递归去实现,下面给…...
【案例】3D地球(vue+three.js)
需要下载插件 <template><div class"demo"><div id"container" ref"content"></div></div> </template> <script> import * as THREE from three; // import mapJSON from ../map.json; import { Or…...
C语言中float byte char uint_8 转换方法
1.float转Byte[] #include <stdio.h>int main() {float floatValue 3.141592; // 浮点数值// 存储到字节数组unsigned char *byteArr (unsigned char *)&floatValue;// 打印字节数组for (int i 0; i < sizeof(float); i) {printf("Byte %d: 0x%02X\n&q…...
瑞明达:脚踏实地,为实体经济贡献“瑞明达”力量
实体经济是指以实际物质生产和经营为主要特征的经济形态,是经济发展的基础和主体。瑞明达团队一直关注着实体经济的发展,也在不断探索如何运用科技手段和管理经验助力实体经济的发展。团队将从几个方面介绍瑞明达团队的看法和实践经验。 实体经济在国家经…...
ChatGPT-自然语言处理模型
前言 GPT(Generative Pre-trained Transformer)是一种自然语言处理模型,具有强大的文本生成和理解能力。 使用场景 它可以用于各种场景,包括但不限于: 1. 自动文本生成:GPT可以生成连贯、流畅的文章、故…...
Apache Dolphinscheduler如何不重启解决Master服务死循环
个人建议 Apache Dolphinscheduler作为一个开源的调度平台,目前已经更新到了3.X版本,4.0版本也已经呼之欲出。3.0版本作为尝鲜版本,新添加了许多的功能,同时也存在非常多的隐患,本人使用3.0版本作为生产调度也踩了很多…...
绝对好用!一个浏览器插件解决跨设备同步问题,吊打文件传输助手!
在数字化的时代,我们所接触的信息呈现指数级的增长。无论是办公资料、学习资源,还是各种生活中的点滴,所有这些信息以各种形式——文本、图片、视频、音乐等——出现在我们面前,如何有效地同步和管理这些内容成为一个挑战。 就跨…...
阿昌教你如何优雅的数据脱敏
阿昌教你如何优雅的数据脱敏 Hi,我是阿昌,最近有一个数据脱敏的需求,要求用户可自定义配置数据权限,并对某种类型数据进行脱敏返回给前端 一、涉及知识点 SpringMVCJava反射Java自定义注解Java枚举 二、方案选择 1、需求要求…...
力扣每日一题80:删除有序数组中的重复项||
题目描述: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…...
SQL——插入已经存在的数据
现在有一套ID为9003的高难度SQL试卷,时长为一个半小时,请你将 2021-01-01 00:00:00 作为发布时间插入到试题信息表examination_info(其表结构如下图),不管该ID试卷是否存在,都要插入成功,请尝试…...
【网络安全 --- 任意文件上传漏洞靶场闯关 6-15关】任意文件上传漏洞靶场闯关,让你更深入了解文件上传漏洞以及绕过方式方法,思路技巧
一,工具资源下载 百度网盘资源下载链接地址: 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan…...
阿里云2核2G3M云服务器99元/年,新老同享,续费不涨价!
2023年阿里云双11活动正在火热进行中,推出了一款面向个人开发者、学生、小微企业的年度爆款套餐,2核2G3M云服务器99元/年,新老同享,续费不涨价! 一、活动入口 活动地址:传送门>>> 二、活动详情 …...
UWB 技术在机器人和移动领域的应用题】
多年来,机器人生态系统不断增长,不同的应用程序也在不断增长。如今,机器人出现在许多不同的领域,例如私人家庭、商业场所、仓库和医疗场所。他们要么自主工作,要么与我们并肩工作,帮助我们完成任务。 根据…...
11.1 知识总结(JavaScript)
一、 ECMAScript的历史 年份 名称 描述 1997 ECMAScript 1 第一个版本 1998 ECMAScript 2 版本变更 1999 ECMAScript 3 添加正则表达式 添加try/catch ECMAScript 4 没有发布 2009 ECMAScript 5 添加"strict mode"严格模式 添加JSON支持 2011 EC…...
【Java 进阶篇】Java Web开发:实现验证码功能
在Web应用程序中,验证码(CAPTCHA)是一种常见的安全工具,用于验证用户是否为人类而不是机器。验证码通常以图像形式呈现,要求用户在登录或注册时输入正确的字符。在这篇文章中,我们将详细介绍如何在Java Web…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...


