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

相关推荐
jiunian_cn14 小时前
【Redis】hash数据类型相关指令
数据库·redis·哈希算法
冉冰学姐14 小时前
SSM在线影评网站平台82ap4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm框架·在线影评平台·影片分类
Exquisite.15 小时前
企业高性能web服务器(4)
运维·服务器·前端·网络·mysql
知识分享小能手15 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
踩坑小念16 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶17 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok18 小时前
MySQL的常用数据类型
数据库·mysql
曹牧18 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty18 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存
m0_7066532318 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python