数据库管理系统的层次
\(数据库\rightarrow表\rightarrow行列\)
DDL
DDL是data definition language的缩写数据定义语言,而其作用是在于对数据库和数据库中的表的创建的基本操作
这里的增删改查实际上是对于数据库,数据表本身的性质的一的增删改查
所以DDL是数据的数据库表和结构上的一种语言
数据库
数据库的创建
create database 数据库名;
数据库的查询
这里的查询是查询该环境的数据库名称有哪些
show databases;
数据库的删除
dorp database 数据库名字;
数据库的使用
use 数据库名;
可以查看当前使用的数据库名
select database();
数据表
创建数据表
create table 表名{
列名1 数据类型 限制条件,
列名2 数据类型 限制条件,
....
列名n 数据类型 限制条件
};
查看数据表
查看数据表可以是查看该数据库中所有表的名称,可以是表的结构
--查看该数据库中所有表的名称
show tables;
--查看表的结构
desc 表的名称
删除表
dorp table 表的名称;
修改表
那实际上在表中的重要的要素有哪些?
表名,列(column),对应列数据类型,由于我们此处探讨是DDL语言,行是具体的数据的时候重要,DDL语言更多是对于表的框架的修改
-- 修改表名
alter table 表名 rename 新的表名
--添加列
alter table 表名 add 列名 数据类型
--修改列的数据类型
alter table 表名 modify 列名 新的数据类型
-- 修改列的名字和数据类型
alter table 表名 change 列名 新列名 新的数据类型;
--删除列
alter table 表名 dorp 列名
DML
DML是data manipulation language的简称,这是在表里的数据细节上进行处理的语言
由于在数据细节上的查询有后面的专门的DQL语言进行,那么DML就只有对数据的增删改
对数据的增加
既然是增加那么就首先是在新的一行进行添加数据
--在新的一行的某几个列添加值
insert into 表名 (列1,列2,...) values(值1,值2,...);
--给该行全部列添加数据
insert into 表名 values(值1,值2,...);
--批量添加数据
insert into表名(列名1,列名2,...) values(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
inert into表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
修改数据
由于我们在一个很大的数据表里面去修改很少数据量,我们肯定要通过对一些关键字的条定位到该行,而列的定位就可以通过列名就好。
update 表名 set 列名1=值1,列名2=值2,... where 定位行的条件;
删除数据
既然要删除不可能是对某一行的小数据进行删除,那必然是一行一行的删除,所以我们要一些条件去定位行
delete from 表名 where 定位行的条件
我们要注意在DML的修改和删除操作其实是很危险的操作,如果没有定位行的条件会对所有行进行操作
DQL
DQL是data query language 的缩写,而我们为什么要将数据查询语句进行一个单独划分,那么我们在对对于数据查询时候,我们往往要为了想达到我们想要的效果我们实际上就对我们的数据进行了简单的数据分析,这就增加了很多的板块来进行数据查询,而且除了对应一张表的分析和查询有的时候我们需要对多表进行查询
DQL的单一简单查询
基础查询
我们如果没有特别的要求或者只对列有要求,那么实际上我们是最好处理
--查询需要的字段1方式
select 列名1,列名2,...form 表名;
--全部的查询方式
select * from 表名
//实际上我们对于全部1查询我们喜欢把所有的列名列出,这更有利于我们的业务操作
--去除重复记录
select distinct 字段列表 from 表名
--起别名
as
条件查询
我们在查询时候,有的时候需要进行一些逻辑运算
那么我们此处就只用介绍一些不同于主流编程语言的一些判断语句
\(
\begin{aligned}
!= \Leftrightarrow <> \\
and \Leftrightarrow \&\& \\
or \Leftrightarrow ||
\end{aligned}
\)
betwen ... and... 可以是一个范围之间
in(10,20,30)相当于是对所需要的进行了列举
对于NULL 必须使用is 或者 not is
like 则涉及到了模糊查询
语法
select 查询字段 from 表名 where 条件列表
模糊查询的like关键子占位
- _占位一个字符
- %占位任意字符
排序查询
要使用到order by
ASE 升序排序 默认排序规则是ASE
DESC 降序排序
select 字段列表 from 表名 order by 字段1 排序方式,字段2 排序方式,...;
聚合函数排序
就是使用一些函数对于查询的列进行一些条件限制处理
select 聚合函数(列) from 表;
NULL值是不会参与聚合函数的运算的;
分组查询
比如我想查询某一个类的,某一个聚合属性我就可以使用 group by;
selcet 类字段,聚合函数(属性字段) from 表 where 条件 group by 类字段 having 显示条件
where和 having 的区别
where是在分组前进行限定,不满足条件就不参与分组,having则是在分组后进行筛选不满足条件就不显示
约束
多关系查询的前置
关系的分类
查询方式
合并查询
这实际上是一种关系代数将两个表相同的列进行合并
--去重合并
select * from 表1 union select * from 表2;
--不去重合并
select * from 表1 union all select * from 表2;
连接查询
连接查询是将两个表进行笛卡尔积操作,可以理解是将两个表的每一列进行排列组合。
select * from 表1,表2;
内连接查询
可以理解为在进行连接查询同是,通过对内外键的取并去除一些不需要的重复列,实际上最后需要的条件就是这个操作
-- 隐式内连接
select * from 表1,表2.... where 从表.外键=主表.主键;
--显式外连接
select * from 表1 inner jion 表2 on 条件