MySQL【知识改变命运】复习前1~11

devtools/2024/10/24 10:17:52/

复习

  • 1:客户端和数据库操作
  • 2:表操作
  • 3: CRUD 增删改查
  • 4:数据库约束
  • 5:表的设计
  • 6:聚合函数
  • 7:GROUP BY分组查询和HAVING子句
  • 8:联合查询(表连接查询)

1:客户端和数据库操作

 1. 登录 mysql -uroot -p
> 2. 查看当前数据库的版本 select version();
> 3. 显示所有数据库 show databases> 4. 查看创建库的语句 show  create database 库名;
> 5. 创建数据库 create database [if not exists]数据库character set 字符集编码 collate 排序规则;
> 6. 选择数据库 use 数据库> 7. 查看当前选择的数据库 select database();
> 8. 修改数据库 alter database数据库character set 字符编码及 collate 排序规则;
> 9. 删除数据库 drop database [if exists] 数据库;
> 10. 查看警告信息 show warnings;
> 11. 退出 quit/exit

2:表操作

> 1.查看当前数据库中有哪些表 show tables> 2.创建一张新表 create table [if not exists] 表名 (列/字段名 数据类型[,列/字段名 数据类型]);
> 3.查看表结构 desc 表名;
> 4.查看创表语句 show create table 表名;
> 5.修改表 alter table 表名 {add | modify| dorp |rename} 列;
> 6.删除表 dorp table [if exists] 表名;

3: CRUD 增删改查

> 1.新增-插入 insert into 表名 [列名[,列名]] values ([,]);
> 指定了多少列名,就需要指定多少值,值与列名一一对应,不指定列名,值的顺序与个数和表中定义列的顺序一一对应
2.查询操作
>a.全列查询 select * from 表名;//不加限制的查询会把表中所有的数据都查出来.
>b.指定列查询 select[,...]from 表名;//推荐使用指定列查询
>c.列为表达式查询 列名/表达式 from 表名;
>d.去重查询 select distinct 列名[,列名] from 表名 //如果查询列表中有多个列,每个列的值都相等才会判定为重复
>e.别名查询 select 列名/表达式 [as ] '别名' from 表名 //别名中如果包含空格,需要用单引号引用
> f.排序 select 列名[,列名...] from 表名 order by 列名 asc | desc[,列名 asc |desc]; asc升序,desc降序
> g.条件查询select * from 表名 where 列名/表达式 比较/逻辑运算符;//多个条件可以用and和or 连接
> h.区间查询 select * from 表名 where 列名 between 开始条件 and 结束条件;//开始条件<=列的值<=结束条件
> i.模糊查询 select * from 表名 where 列名 like '%值_';//%匹配任意字符,_匹配单个字符
> j.分页查询   select *from 表名 where 条件 order by 列名 asc|desc limit num;//查询前num 条记录
>  select *from 表名 where 条件 order by 列名 asc|desc limit start,num;//从strat 条开始向后查num条记录
>  select *from 表名 where 条件 order by 列名 asc|desc limit num offset start;//
>  从strat 条开始向后查num条记录
3.更新
update 表名 set=where 条件 order by 子句 limit num;
//如果不指定条件和limit的数据就会更新整张表的数据
4.删除
delect from 表名 where 条件 order by 子句 limit num;//如果不指定条件和limit的数据就会删除整表数据
5.截断表
truncate 表名;//把表的状态重置为初始状态,表中的数据也会被清空

4:数据库约束

1.非空约束: NOT NULL 标记一个字段是否可以为空,指定这个约束,字段的值就不能为空
2.唯一约: UNIQUE 标记一个字段的内容在当前表中唯一,不能重复,但是可以为NULL 
3.主键约束: PRIMARY KEY 在校验的方式上相当于NOT NULLUNIQUE 的组合,建议为每张表中定义自增主键
4.外键约束:FOREIGN KEY 一个表中的字段与另一个表中的主键或者唯一键建立关联关系,当对表中的数据进行增删改查的时候数据库会帮助我们进行检查
5.默认约束:DEFAULT 当一个字没有制定时,就会用默认值去填充该列,当手动指定列的值位NULL,默认就不会生效
6.检查约束:CHECK 对当前列的值合法性的进行检查,8.0中才生效,5.7版本允许定义但是不生效

5:表的设计

三大范式

第一范式:要求表中的每一列都是不可再分,用SQL语言中提供的简单数据类型可以描述字段即可,不满足第一范式的数据库就不能成为关系型数据库
第二范式:在第一范式的基础上,能消除部分函数依赖,只能出现有在复合主键的表中(多个候选键),如果有一个字段只能依赖与符合主键中的一个列,那么就需要把这个关系剔除掉,重新建表.
第三范式:在第二范式的基础上,消息传递依赖,为不同的实体单独建表

关系模型

一对一关系:为每个实体单独建表,其中一张表中加一个字段完成对另一张表的引用(建立关系)
一对多关系:为每个实体单独建表,在一这一方设置一个主键.在多这一方加一个字段,两表建立引用关系
多对多关系:为每个实体单独建表,另外新加一张关系表

6:聚合函数

1.COUNT(*)统计结果条数
2.SUM()求和
3.AVG()求平均数
4.MAX()求最大值
5.MIN()求最小值

7:GROUP BY分组查询和HAVING子句

GROUP BY:对某一个字段进行分组操作,分组后可以结合聚合函数进行一些运算.
HAVING 对GROUP BY的结果进行过滤

8:联合查询(表连接查询)

1.内连接
select * from table 1,table 2...where table 1.xxx=table 2.xxx;
select * from table 1 join table 2 on  table 1.xxx=table 2.xxx where 条件;
select * from table 1 inner join table 2 on  table 1.xxx=table 2.xxx where 条件;

表连接的执行过程
1.先计算参与表连接的笛卡尔积
2.通过连接条件过滤无效的数据
3.加入查询条件得到想要的结果行
4.精减列名得到最终想要的查询结果集

2.外连接,分为左连接和右连接
select * from table1 left join table2 on table1.xxx=table2.xxx;
select * from table1 right join table2 on table1.xxx=table2.xxx;

左外连接以 left join 左边的表为基表,左表中的数据全部显示,右表中没有对应的记录则用NULL填充 右外连接以right join
右边的表为基表,右表中的数据全部显示,左表中没有对应的记录则用NULL填充 主要应用在两张表数据不一致的场景里

3.自连接
select * from table t1,table t2 where t1.xxx=t2.xxx;
把行转换为列,在查询的时候可以使用where 条件进行过滤,实行了行与行之间的比较
4.子查询
单行子查询: select *from table1 where id=(select id from table 2 wherer clo=xxx);
多行子查询: select * from table1 where id [NOT]   IN(select id from table2 where clo=xxx);
多列查询:select * from table1 where (1,列2,列3...) IN (select1,2,3 from table2 where clo=xxx);

内层查询的结果作为外层查询的条件,把多条语句合并为一条执行
子查询可以无限嵌套,层数过多时会严重影响效率。

5.合并查询
select * from table1 union select * from table2//过滤掉重复的行
select * from table1 union all select * from table2;//不会过滤重复行,显示所有的查询结果作用把多个查询结果合并成一个返回给客户端

注意:合并查询时多个查询的列表一定匹配,mysql不对结果做校验,写的时候无比必要注意

6.一条SQL语句中各部分执行顺序
自己构造一条SQL,不一定执行成功,但是包含相关的关键字
select distinct id,name,avg(age) from student join class on student.class_id where class_id=1 group by student.id having avg(age)>0 order by student.id asc limit 100;
顺序:from __ join on __ where __ group by __ having __ select __ distinct __ order by __ limit 

http://www.ppmy.cn/devtools/128423.html

相关文章

深入解析MySQL数据库:从基础到进阶的全面剖析

MySQL&#xff0c;作为开源关系型数据库管理系统&#xff08;RDBMS&#xff09;的佼佼者&#xff0c;自诞生以来便以其高性能、稳定性和易用性赢得了广泛的认可与应用。无论是小型个人项目还是大型企业级应用&#xff0c;MySQL都能提供强有力的数据支持。本文将带您深入探索MyS…

【网络安全】从2FA绕过到账户接管

未经许可,不得转载。 文章目录 前言漏洞1:创建属于其他用户的账户漏洞2:绕过2FA账户接管前言 redacted.com是一个管理物联网项目、云解决方案、设备等的平台,其允许在一个用户账户下创建多个账户,并在知道其它用户电子邮件地址的情况下邀请他们加入项目。该网站支持灵活的…

基于SpringBoot+Vue+uniapp的C语言在线评测系统的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

智能合约开发中的LP分红系统

在去中心化金融&#xff08;DeFi&#xff09;领域&#xff0c;流动性提供者&#xff08;LP&#xff09;是维持市场流动性的关键角色。为了激励用户提供流动性&#xff0c;许多平台采用了LP分红系统。本文将探讨智能合约开发中的LP分红机制&#xff0c;包括其工作原理、开发步骤…

使用SearXNG-搭建个人搜索引擎(附国内可用Docker镜像源)

介绍 SearXNG是聚合了七十多种搜索服务的开源搜索工具。我们可以匿名浏览页面&#xff0c;不会被记录和追踪。作为开发者&#xff0c;SearXNG也提供了清晰的API接口以及完整的开发文档。 部署 我们可以很方便地使用Docker和Docker compose部署SearXNG。下面给出Docker部署Se…

React04 - react ajax、axios、路由和antd UI

文章目录 react与ajaxreact与axiosreact中跨域解决方法使用axios携带参数发送请求父子组件间的传值&#xff08;props&#xff09;根据请求结果展示不同的页面效果兄弟组件间通信&#xff08;消息订阅与发布&#xff09;fetch发送请求 路由前端路由和后端路由路由原理与基本使用…

MySQL--基本介绍

一.数据库前言 1.数据库的相关介绍 关系数据库管理系统&#xff08;Relational Database Management System&#xff1a;RDBMS&#xff09;是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库&#xff0c;并将数…

zookeeper的作用--有无zookeeper的区别

如果光了解zookeeper的作用可能有些抽象&#xff0c;本文从对比有无zookeeper的情况来更直观凸显其作用。 ZooKeeper在分布式系统中提供了多种关键功能&#xff0c;包括配置管理、命名服务、分布式锁、集群管理等。下面通过一些具体场景来对比有ZooKeeper和没有ZooKeeper的情况…