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 分钟前
MySQL如何区分幻读和不可重复读
数据库·mysql
不爱学习的啊Biao8 分钟前
【08】MySQL复杂查询:子查询语句详解与示例
数据库·mysql·子查询
st_3315 分钟前
Junit5 单元测试入门
数据库·单元测试·log4j
s***g54016 分钟前
MySQL-操作数据库备份与恢复
数据库·mysql
CQU_JIAKE38 分钟前
11.5【算法】6-1 表彰优秀学生(多态)
数据库
Elastic 中国社区官方博客2 小时前
使用数据层进行数据生命周期管理
大数据·数据库·elasticsearch·搜索引擎·全文检索·时序数据库
我爱李星璇2 小时前
Spring Boot项目的创建
java·数据库·spring boot
锵锵锵锵~蒋2 小时前
实时数据开发|Flink异步IO--提升性能和吞吐量
jvm·数据库·flink·实时数据开发
小麦项目管理指南3 小时前
工程企业需要什么样的财务软件?
大数据·数据库·信息可视化·项目管理
涛思数据(TDengine)3 小时前
解密时序数据库的未来:TDengine Open Day技术沙龙精彩回顾
数据库·时序数据库·tdengine