【MySQL语言汇总[DQL,DDL,DCL,DML]以及使用python连接数据库进行其他操作】

MySQL语言汇总[DQL,DDL,DCL,DML]

  • SQL分类
  • 1.DDL:操作数据库,表
    • 创建 删除 查询 修改
      • 对数据库的操作
      • 对表的操作
      • 复制表(重点)!!!!!
  • 2.DML:增删改表中数据
  • 3.DQL:查询表中的记录
    • 语法顺序
    • 基础查询
    • where 子句后面跟的条件
    • if 和 case when语句
    • 字符串函数拼接
    • 聚合函数
    • 分组查询
    • 分页查询 limit
  • 4.DCL (管理用户授权)
    • 1.管理用户
        • 添加,删除,修改,查询用户:
    • 2.权限管理:
      • 查询权限:
      • 授予权限:
      • 撤销权限:
  • 5.多表查询
    • 子查询
    • 约束
      • 主键约束
      • 外键约束
  • 6.用Python连接数据库进行调用和操作

SQL分类

在这里插入图片描述

1.DDL:操作数据库,表

创建 删除 查询 修改

对数据库的操作

# 创建数据库
create database 数据库名称;
# 查询数据库和表名
show databases;
show tables;
# 查看数据库的建库语句  表的建表语句
show create database 数据库名称;
show create table 表名称;
# 删除数据库
drop database 数据库名称;
# 使用数据库
use 数据库名称;
# 查看当前正在使用的数据库名称
select database();
# 修改数据库的字符集
alter database db4 character set utf8;

对表的操作

完整的建表语句
请添加图片描述

# 创建一个表
create table 表名(
   列名1 数据类型1,
   列名2 数据类型2......
   列名3 数据类型n
);
# 查询表
show tables;
# 查看表结构
show create table 表名;
# 修改表名
rename table 表名 to 新表名;
alter table 表名 rename to 新表名;
# 修改表的字符集
alter table 表名 character set 字符集名称;
# 查看某张表的字符集
show create table 表名;
# 添加一列
alter table 表名 add 列名 数据类型;
# 修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
# 删除列
 alter table 表名 drop 列名;
# 删除表
drop table 表名;

复制表(重点)!!!!!

-- 复制表的结构
create table if not exists 表名 like 被复制的表名;
-- 新建一个查询表的内容
create table if not exists 表名 as select语句;

在这里插入图片描述
这个方法 就是把一个你想要的临时表变成一个表 保存起来非常好用!!!
在这里插入图片描述
在这里插入图片描述

2.DML:增删改表中数据

# 向表中添加数据
insert into 表名
(列名1,列名2,列名3......,列名n) 
values(1,2,......值n);
# insert select 将select查询出来的数据插入到目标表中
insert into 表名 select语句;

# 删除数据
delete from 表名 [where条件]; 如果没有where条件则是删除这个表中的所有记录
如果行删除所有记录推荐使用 
truncate table 表名; (截断表 删除这个表在重新创建)

# 修改数据
update 表名 set 列名1 =1,列名2 =2,......[where条件];
如果不加where条件则是全部修改

3.DQL:查询表中的记录

语法顺序

select
   字段列表
from
   表名列表
where
   条件列表
group by
   分组字段
having
   分组之后的条件
order by
   排序
limit
   分页限定

基础查询

# 多个字段的查询
select 字段名1,字段名2... from 表名;
去除重复:distinct 去除重复的数据 全部去重

# select 列的时候可以添加一些四则运算法则
select age + 4 as new_age from student;

# 排序查询
order by 排序字段1 排序方式1,排序字段2 排序方式2...;
DESC:降序  

where 子句后面跟的条件

><<=>==<> 可以用符号表示 大于小于
BETWEEN...AND 在这两个条件之间 !! 是左闭右闭的区间
IN(集合) -- 集合可以写成子查询  但是结果应该只有一列
LIKE:模糊查询
	   _:单个任意字符
	   %:多个任意字符
IS NULL 
IS NOT NULL
count(字段名) 时注意null的列
注意 null 和 空字符串'' 的区别  null是什么都没有  ''这是空的字符串 是有东西的
and
or
not   


# 举例
SELECT * FROM student WHERE age > 20;
SELECT * FROM student WHERE age >= 20;
SELECT * FROM student WHERE age =20;
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
SELECT * FROM student WHERE age >=20 && age <=30;
SELECT * FROM student WHERE age >=20 AND age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
SELECT * FROM student WHERE age=22 OR age=20 OR age=25;
SELECT * FROM student WHERE age IN(22,18,55);
SELECT * FROM student WHERE english IS NOT NULL;
SELECT * FROM student WHERE NAME LIKE '马%'; # 匹配姓马的
SELECT * FROM student WHERE NAME LIKE "_化%"; #匹配名字第二个是化的
SELECT * FROM student WHERE NAME LIKE "___"; ## 匹配名字是三个的学生
SELECT * FROM student WHERE NAME LIKE "%景%" 
show variables like "%char%"

if 和 case when语句

-- if(condition,true_act,false_act) 函数 case when 的写法
           # 条件      true   false
select *,IF(age > 22,"old",'young') as age_type  from students;
# if 语句嵌套
select *,IF(age > 22,
                        # 年龄>22   并且>23     false 是年龄>22 但是<=23
						if(age>23,'big old','little old'),
					'young') as age_type  from students;

# case when 语句 用end 结尾
select *,case when age=22 then "young"
							when age=23 then 'little old'
							when age=24 then 'big old'
				else 'little young' end as type
				from students;

字符串函数拼接

-- 字符串函数
-- 字符串拼接
-- concat(*strs) 如果字符串中有null 结果就是null
select CONCAT(name,',',gender,',','a') from students; # 将这些字符串合并起来成为一个
select CONCAT(name,gender,'a',null) from students;
-- CONCAT_WS(separator,str1,str2,...) 中间有分隔符 他会过滤null
select CONCAT_WS(',',name,gender,'a',null,'b') from students;

-- 字符串切分
-- SUBSTR(str FROM pos FOR len) , SUBSTR(str,pos),SUBSTR(str,pos,len)
select *,SUBSTR(name,2) from students; # 切分前两个
select *,SUBSTR(name,1,2) from students; # 从第一个开始 切两个
select *,SUBSTR(name from 1 for 2) from students; 
select *,SUBSTRING(name,1,2) from students;

-- STRCMP 字符串对比
select *,STRCMP(SUBSTR(name,1,1),'施') from students;
# 切分第一个姓氏过后 与‘施’对比 选择施姓的
-- 数字类型的函数
select *,ABS(age),COS(age),LENGTH(clazz) from students;

聚合函数

将一列数据作为一个整体,进行纵向的计算
注意:聚合函数的计算,排除null值(可使用ifnull函数)

# max:计算最大值
SELECT MAX(math) FROM student;

# min:计算最小值
SELECT MIN(math) FROM student;

# sum:计算和
SELECT SUM(english) FROM student;

# avg:计算平均值
SELECT AVG(math) FROM student;

分组查询

语法:group by 分组字段
1.分组之后查询的字段:分组字段、聚合函数
2.wherehaving的区别?
​        where在分组之前进行限定,如果不满足条件,则不参与分组。
​        having在分组之后进行限定,如果不满足结果,则不会被查询出来
​        where后不可以跟聚合函数,having可以进行聚合函数的判断



# 按照性别分组,分别查询男、女同学的平均分
SELECT sex,AVG(math) FROM student GROUP BY sex;

# 按照性别分组,分别查询男、女同学的平均分,人数
SELECT sex,AVG(math),COUNT(id) FROM student GROUP BY sex;

# 按照性别分组,分别查询男、女同学的平均分,人数 要求:分数不低于70分的人,不参与分组。
SELECT sex,AVG(math),COUNT(id) FROM student WHERE math>70  GROUP BY sex;

# 按照性别分组,分别查询男、女同学的平均分,人数 要求:分数不低于70分的人,不参与分组,分组之后,人数大于2人。
SELECT sex,AVG(math),COUNT(id) FROM student WHERE math>70  GROUP BY sex HAVING COUNT(id)>2;

分页查询 limit

开始的索引 = (当前的页码 -1) * 每页显示的条数

SELECT * FROM student LIMIT 0,3; 第一页
SELECT * FROM student LIMIT 3,3;  第二页
SELECT * FROM student LIMIT 6,3;  第三页

4.DCL (管理用户授权)

1.管理用户

添加,删除,修改,查询用户:
关闭密码复杂验证
set global validate_password_policy=0;
set global validate_password_length=1;

# 用root用户添加一个新用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
例子: 
CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY '123';
CREATE USER 'lisi'@'%' IDENTIFIED BY '123';

# 删除用户
DROP USER '用户名'@'主机名';
例子:
DROP USER 'zhangsan'@'localhost';


# 修改用户密码
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
例子:
set password for 'lisi'@'%' = password('234567');


# 查询用户
USE mysql;
select * from user;
通配符: % 表示可以在任意主机使用用户登录数据库 

2.权限管理:

查询权限:

 SHOW GRANTS FOR '用户名'@'主机名';

 SHOW GRANTS FOR 'lisi'@'%';

授予权限:

grant 权限列表 on 数据库名.表名 to '用户名'@'主机名' [with grant option];

例子:
-- 将数据库db3下account表的SELECT ,DELETE, UPDATE权限授予用户'lisi'@'%'
GRANT SELECT ,DELETE, UPDATE  ON db3.account TO 'lisi'@'%';

-- 给zhangsan用户所有权限  
GRANT ALL  ON *.* TO 'zhangsan'@'localhost'

撤销权限:

revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

例子:
-- 将用户'lisi'@'%'对于表db3.account的更新权限撤销
REVOKE UPDATE ON db3.account FROM 'lisi'@'%';

-- 给lisi用户撤销所有权限
REVOKE ALL ON *.* FROM 'lisi'@'%';

5.多表查询

内连接 左连接 外连接

子查询

查询中嵌套查询,称嵌套查询为子查询

-- 查询工资最高的员工信息
-- 1.查询最高的工资是多少 9000
SELECT MAX(salary) FROM emp;
-- 2.查询员工信息,并且工资等于9000的
SELECT * FROM emp WHERE emp.salary=9000;
-- 一条sql就完成这个操作
SELECT * FROM emp WHERE emp.salary = (SELECT MAX(salary) FROM emp);


--子查询可以作为条件,使用运算符去判断。  运算符:> >= < <= =
--查询员工工资小于平均工资的人
SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);



--子查询可以作为集合,使用in、not int
--查询财务部和市场部所有员工信息
SELECT id FROM dept WHERE `NAME`='财务部' OR `NAME`='市场部';
SELECT * FROM emp WHERE dept_id=3 OR dept_id=2;
--使用子查询
SELECT * FROM emp WHERE dept_id in (SELECT id FROM dept WHERE `NAME`='财务部' OR `NAME`='市场部');



--子查询可以作为一张虚拟表参与查询
--查询员工入职日期是2011-11-11日之后的员工信息和部门信息
-- 子查询
select * from dept t1 (select * from emp where emp.join_date > '2011-11-11') t2 where t1.id = t2.dept_id;
--普通内连接查询
select * from emp t1,dept t2 where t1.dept_id = t2.id and t1.join_date > '2011-11-11'  


union 表的拼接 但是拼接时表的结构需要完全相同
* union 对数据进行去重
* union all

约束

主键约束

需要记住的为主键约束 : 条件 唯一 且非空
primary key
含义:非空且唯一
主键就是表中记录的唯一标识

CREATE TABLE stu (
   id INT PRIMARY KEY,  -- 给id添加主键约束
   NAME VARCHAR(20)
);

ALTER TABLE stu DROP PRIMARY KEY; -- 去除主键
alter table stu modify id int; -- 移除not null的限约束

ALTER TABLE stu MODIFY id INT PRIMARY KEY;  

外键约束

还有一个外键约束
foreign key,让表与表产生关系,从而保证数据的正确性。

create table 表名(
   外键列
   constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) 
);

添加级联操作
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;

当修改一个表的值之后 另一个表的值也会修改 保证了数据的正确性

6.用Python连接数据库进行调用和操作

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

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

相关文章

Pytorch CIFAR10图像分类 Swin Transformer篇

Pytorch CIFAR10图像分类 Swin Transformer篇 文章目录 Pytorch CIFAR10图像分类 Swin Transformer篇4. 定义网络&#xff08;Swin Transformer&#xff09;Swin Transformer整体架构Patch MergingW-MSASW-MSARelative position biasSwin Transformer 网络结构Patch EmbeddingP…

【深度学习】回归模型相关重要知识点总结

回归分析为许多机器学习算法提供了坚实的基础。在这篇文章中&#xff0c;我们将总结 10 个重要的回归问题和5个重要的回归问题的评价指标。 一、线性回归的假设是什么 线性回归有四个假设&#xff1a; 线性&#xff1a;自变量&#xff08;x&#xff09;和因变量&#xff08;y&…

创新领航 | 竹云参编《基层智治系统安全接入规范》团体标准正式发布!

近日&#xff0c;由杭州市委办公厅&#xff08;市密码管理局&#xff09;、杭州市基层治理综合指挥保障中心、杭州市拱墅区社会治理中心、杭州市拱墅区数据资源管理局、杭州竹云数字智能科技有限公司、杭州智诚质量标准技术评定中心共同参与编写的《基层智治系统安全接入规范》…

录视频人不在电脑旁,怎么设置定时关机

如果你平常工作比较忙&#xff0c;或者要录制的视频/音频文件需要很长时间&#xff0c;最好选择预约录制&#xff0c;这样可使录屏软件自动开始和停止录制&#xff0c;并且定时关机。此外&#xff0c;你还可以设置保存录制文件、关闭录屏软件。是不是听起来很感兴趣&#xff1f…

【unity3D】创建游戏物体的三种方式

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是在unity中创建游戏物体的三种方式 unity中创建游戏物体 使用构造函数创建一个空的游戏对象根据现有的预制体资源或者场景中已有的物体进…

Debian Linux安装配置ibus rime中文输入法

Linux安装配置Rime 安装 清除所有fcitx软件包 sudo apt purge fcitx*安装ibus和ibus-rime sudo apt install ibus ibus-rime启用输入法 找到输入法配置 启用ibus输入法 此时由于刚安装完毕ibus并没有启动 要么重启系统 要么输入下面的命令 ibus-daemon -drx找到ibus首选…

密码学学习笔记(二十三):哈希函数的安全性质:抗碰撞性,抗第一原象性和抗第二原象性

在密码学中&#xff0c;哈希函数是一种将任意长度的数据映射到固定长度输出的函数&#xff0c;这个输出通常称为哈希值。理想的哈希函数需要具备几个重要的安全性质&#xff0c;以确保数据的完整性和验证数据的来源。这些性质包括抗碰撞性、抗第一原象性和抗第二原象性。 抗碰…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(一)——创建Glue

1 通过Athena查询s3中的数据 此实验使用s3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 1 通过Athena查询s3中的数据1.1 架构图1.2 创建Glue数据库1.3 创建爬网程序1.4 创建表1.4.1 爬网程序创建表1.4.2 手动创建表 1…

Mybatis 操作续集(连着上文一起看)

"查"操作(企业开发中尽量不使用*,需要哪些字段就写哪些字段,都需要就全写上) Mybatis 会自动地根据数据库的字段名和Java对象的属性名进行映射,如果名称一样就进行赋值 但是那些名称不一样的,我们想要拿到,该怎么拿呢? 一开始数据库字段名和Java对象属性名如下图…

4G基站BBU、RRU、核心网设备

目录 前言 基站 核心网 信号传输 前言 移动运营商在建设4G基站的时候&#xff0c;除了建设一座铁塔之外&#xff0c;更重要的是建设搭载铁塔之上的移动通信设备&#xff0c;这篇博客主要介绍BBU&#xff0c;RRU以及机房的核心网等设备。 基站 一个基站有BBU&#xff0c;…

数字法院大脑管理|助力实现司法数字化

数字法院是现代社会数字化和信息化的产物&#xff0c;它的出现标志着法律领域的创新和进步。数字法院以数字技术为核心&#xff0c;借助互联网、大数据、人工智能等新兴技术&#xff0c;实现了案件流程的数字化和智能化。通过数字法院&#xff0c;人们可以在线提交诉讼材料&…

IDEA 保存自动ESLint格式化

作为后端人员&#xff0c;偶尔修改一下前端代码&#xff0c;ESLint总提示格式不正确。有没有什么办法实现自动格式化呢&#xff1f; 安装插件Save Actions Tool 设置中搜索eslint 勾选 Run eslint --fix on save 这样以后&#xff0c;只要保存文件就会自动格式化了。 参考 …

windows下ffmpeg源码编译

参考&#xff1a;windows上使用vs2019和msys64编译 ffmpeg 4.3 | 码农家园 (codenong.com) 安装命令&#xff1a; pacman -S nasm pacman -S yasm pacman -S make pacman -S cmake pacman -S diffutils pacman -S pkg-config pacman -S git 1.编译 x264 将 x264放到home文件下…

JS学习--类型转换

函数转换 parseInt() 转换之前&#xff0c;首先会分析该字符串。判断位置为0处的字符串&#xff0c;判断是否为有效数字&#xff0c;若否&#xff0c;直接返回NaN&#xff0c;不再继续&#xff1b; 若是&#xff0c;继续打印直到不为数字的地方停止 parseFloat() 转换之前&…

[英语学习][7][Word Power Made Easy]的精读与翻译优化

[序言] 这次翻译, 遇到非常细微的短语, 让我差点翻车. 我从7点半开始思考到10点, 才恍然大悟. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西, 同时加入我的社区讨论与交流英语相关的内容. [原著英文与翻译版对照][第19] …

SpringBoot系列之使用Redis ZSet实现排序分页

软件环境&#xff1a; JDK 1.8 SpringBoot 2.2.1 Maven 3.2 Mysql 8.0.26 spring-boot-starter-data-redis 2.2.1 jedis3.1.0 开发工具 IntelliJ IDEA smartGit 实现思路 相对于set来说&#xff0c;sorted set是一种有序的set&#xff0c;排序是根据每个元素的score…

Nginx(十二) gzip gzip_static sendfile directio aio 组合使用测试(2)

测试10&#xff1a;开启gzip、sendfile、aio、directio1m&#xff0c;关闭gzip_static&#xff0c;请求/index.js {"time_iso8601":"2023-11-30T17:20:5508:00","request_uri":"/index.js","status":"200","…

SpringBoot整合ES客户端操作

SpringBoot整合ES客户端操作 介绍ES ES下载与安装 https://www.elastic.co/cn/downloads/past-releases 不要装太新的&#xff0c;里面自己配置了jdk&#xff0c;太新的可能用不了&#xff0c;免安装的&#xff0c;解压就好 浏览器输入&#xff1a;http://localhost:9200/ 返…

算法通关村第十六关-黄金挑战滑动窗口与堆的结合

大家好我是苏麟 , 今天带来一道小题 . 滑动窗口最大值 描述 : 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 题目 : …

U-GAT-IT 使用指南:人脸动漫风格化

U-GAT-IT 使用指南 网络结构优化目标 论文地址&#xff1a;https://arxiv.org/pdf/1907.10830.pdf 项目代码&#xff1a;https://github.com/taki0112/UGATIT U-GAT-IT 和 Pix2Pix 的区别&#xff1a; U-GAT-IT&#xff1a;主要应用于图像风格转换、图像翻译和图像增强等任务…