MySQL基础(语句)知识复习 (除索引和视图)

1.客户端和数据库操作

1.登录客户端界面:mysql -uroot -p

2.查看当前的数据库版本:select version();

3.显示所有数据库:show databases;,

4.创建数据库:create [IF NOT EXISTS] database 库名 character set 字符集编码 collate 排序规则;

5.选择数据库:use 库名;

6.查看当前选择了哪个数据库:select database();

7.删除数据库:drop [IF EXISTS] database 库名; #非常危险

8.查看警告:show warnings;

9.退出:quite/exit

2.表操作

1.查看当前数据库有哪些数据表:show tables;

2.创建表:create table 表名(列名/字段名 数据类型,....);

3.查看表结构:desc 表名;

4.删除表:drop 表名;#非常危险

3.CRUD增删查改

3.1新增

语法:insert into 表名 (列名,...)values (值,...);

注释:指定了多少列名,后面的values的值就得一一对应

不指定列名,值的顺序就必须与表中列的数据相同!

3.2查询操作

a.全列查询:select * from 表名;//不加限制条件就会把所有的数据查询出来,磁盘开销会很大!

b.指定列查询:select 指定列,... from 表名;//推荐使用

c.表达式查询:select 表达式 from 表名;

d.别名查询:select 列名/表达式 as '别名' from 表名;

e.去重查询:select distinct 列名,... from 表名;#如果列名指定多个,则指定列的对应行数据必须完全相同才会去重!

f.排序**:select 列名,... from 表名 order by 列名 asc|desc; #asc是升序,desc是降序**

g.条件查询:select 列名,... from 表名 where 列名/表达式 比较运算符/逻辑运算符 order by 列名 asc|desc;

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; #从第start条开始到num条结束

③select * from 表名 where 条件 order by 列名 asc|desc limit num offset start; #从第start条开始到num条结束

注释:start=(当前页数-1)* ( 当前页查询的条数)

3.3更新

update 表名 set 列名 =值 where 条件 order by ... limit num;****#如果不指定列名和limit数量,就会更新表中的所有数据!

3.4删除

delete from 表名 where 条件 order by ... limit num; #如果不指定列名和limit数量,就会把表中的数据全部删除!

4.数据库约束

1.非空约束:NOT NULL 标记一个字段是否可以为空,指定了这个约束,该字段就不能为空(NULL)

2.唯一约束:UNIQUE 标记一个字段的内容在当前列中不唯一,不能重复,但是也不能为null

3.主键约束:PRIMARY KEY 非空且唯一 ,约束方式相当于:NOT NULL+UNIQUE

主键一般与auto_increment(自增)使用!

4.默认方式:DEFAULT 当一个字段没有指定值时(为NULL),不指定列的值时,就用默认值去填充该字段。

注释:若指定了默认值,但是我们手动输入null值,还显示的是null,并非指定默认值!是因为手动输入值的优先级大于默认值!

5.外键约束:FOREIGN KEY 一个表中的字段与另一个表中的主键建立关系,对当前表的数据增删查改是数据库会自动给我们检验!

5.表的设计

1.第一范式:要求表中的每一个列不可再分

2.第二范式:在第一范式基础上,消除部分函数依赖,只存在在有复合主键的表中!

不满足第二范式的影响:数据冗余,更新异常,删除异常,新增异常!

3.第三范式:在第一,二范式基础上,消除传递依赖

6.关系模型

1.一对一

2.一对多

3.多对多

7.聚合函数

1.COUNT(列|*); 统计结果的条数

2.SUM(列); 求和

3.AVG(列); 求平均值

4.MAX(列);求最大值

5.MIN(列);求最小值

8.GROUP BY分组查询

语法:select 分组列,聚合函数 from 表名 group by 分组列 order by 列名;

HAVING 子句

对group by的结果进行条件过过滤

9.联合查询

9.1内连接

select * from 表名1,表名2 where 表名1.xxx=表名2.xxx(连接条件);

select * from 表名1 join 表名2 on 表名1.xxx=表名2.xxx(连接条件);

select * from 表名1 inner join 表名2 on 表名1.xxx=表名2.xxx(连接条件);

表连接的执行过程:

1.先计算参与表连接的笛卡尔积

2.通过连接条件进行过滤错误信息

3.加入查询条件

4.精减列名

9.2外连接,左外连接,右外连接

select * from 表名1 left join 表名2 on 表名1.xxx=表名2.xxx(连接条件);

select * from 表名1 right join 表名2 on 表名1.xxx=表名2.xxx(连接条件);

左外连接以左表为基准,左边的表中所有的数据全部显示,右表中没有对应的数据用NULL值填充

右外连接以右表为基准,右边的表中所有的数据全部显示,左表中没有对应的数据用NULL值填充

9.3自连接

select * from 表名 别名1,表名 别名2 where 别名1.xxx=别名2.xxx(连接条件);

把行转换成列,在查询的时候可以使用where语句条件进行过滤,实现行与行之间比较

9.4子查询

单行子查询:select * from 表名1 where 指定列=(select 指定列 from 表名2 where 条件);

多行子查询:select * from 表名1 where 指定列 IN (select 指定列 from 表名2 where 条件);

内层查询的结果作为外层的过滤条件,把多条语句合并为一句

子查询可以无限嵌套,层数过多会影响效率

9.5合并查询

select * form 表名1 union(union all )select * from 表名2;

union去重,union all不去重

作用是把两个结果集中合并成一个返回

注意:合并查询时多个查询的查询列表必须匹配!

SQL语句的执行顺序

FROM --> JOIN ON --> WHERE --> GROUP BY --> HAVING --> SELECT --> DISTINCT --> ORDER BY --> ORDER BY --> LIMIT

相关推荐
代码骑士8 分钟前
第四章 基于本地部署的大语言模型OLlama&Neo4j图数据库的知识图谱搭建
数据库·语言模型·neo4j
山海青风2 小时前
OpenAI 实战进阶教程 - 第七节: 与数据库集成 - 生成 SQL 查询与优化
数据库·人工智能·python·sql
_李白_2 小时前
深入解析 Redis AOF 机制:持久化原理、重写优化与 COW 影响
数据库·redis·缓存
pedestrian_h2 小时前
mysql操作语句与事务
数据库·mysql
AquaPluto3 小时前
MySQL锁详解
数据库·mysql·
lizhixiong23 小时前
使用C#开发一款通用数据库管理工具
数据库
NPE~3 小时前
[漏洞篇]SQL注入漏洞详解
数据库·安全·渗透测试·教程·漏洞·sql注入
玥轩_5214 小时前
《Linux服务与安全管理》| 数据库服务器安装和配置
linux·运维·服务器·数据库·安全·网络安全·redhat
遗落凡尘的萤火-生信小白4 小时前
【单细胞第二节:单细胞示例数据分析-GSE218208】
数据库·mysql·数据分析
ningmengjing_5 小时前
数据完整性-03
数据库