💡学习过程中,听说类比excel表格的相关操作效果更好哦。本文以MySQL语言为主,如有错误的地方,欢迎在评论区批评指正~
📚参考链接:
一、数据库的分类
- 关系型数据库
- 用表(行,列)这样的结构来存储;
- 以 SQL 语言为标准;
- 例:MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access;
- 非关系型数据库
- 一般通过文档这样的结构来存储的;
- 例:Redis、HBase、MongoDB;
二、SQL基础
- 关系型数据库管理系统RDBMS
- 表(tables)是数据库对象;
- 字段是表的一列;
- 记录是表的一行;
- SQL语句分类⭐
- DDL(定义)-
create、alter、drop
- 针对字段进行增、改、删;
- DQL(查询)-
select
- 针对具体数据查询;
- DML(操纵)-
insert、update、delete
(可能需commit才能提交)- 针对🔥具体数据进行增、改、删;
- DCL(数据控制)-
Grant、Revoke
授予权限、回收权限语句。 - DTL(事务控制)-
commit、rollback
回滚;
- DDL(定义)-
- SQL基本语法
SQL里大小写一样;
分号是分隔每条 SQL 语句的标准方法(不是必需);
一些重要命令⭐
DDL:
- CREATE DATABASE/INDEX/TABLE - 创建 数据库、索引、表
- ALTER DATABASE/TABLE - 修改 数据库、表
- DROP TABLE/INDEX - 删除 表、索引
DQL:
- SELECT - 从数据库中提取数据
DML:
- UPDATE - 更新数据库中的数据
- INSERT INTO - 向数据库中插入新数据
- DELETE - 从数据库中删除数据
三、数据查询DQL
关键字:select⭐
简单说:(注意编写顺序❗)
select 字段 as 别名
from 表名
where 条件
group by 分组的字段
having 筛选分组的条件
order by 排序字段 asc/dsc
limit 分页的记录数
3.1 普通查询
全表查询
select * from 表名
选择查询
select 列名, 列名 from 表名
别名⭐(as可省略)
select 列名 as❗ 别名 from 表名
select 列名 [别名] from 表名
常量及运算
3.2 条件查询where
操作符⭐ | 声明 |
---|---|
=、!=、><、>=、<= | 常见运算符 |
between A and B | 区间[A,B] |
is null/is not null | 空/不空 |
not | 取非 |
like/not like | 模糊查询 |
and/or | 与/或 |
字段 in(10,20) | 等于10或20 |
(1) where关键字⭐
select xx from xx where xxx order by xx;
(2) like模糊查询
like
/not like
关键字;- 通配符:
- 百分号(%):表示任意长度的任意字符序列。
- 下划线(_):表示任意单个字符。
- 例:
where name like '%张%'
,筛选包含“张”的。 - 例:
where name like '%张'
,筛选以“张”结尾的。
3.3 distinct去重⭐
含义:
选择该列的不同值;
语法:
select ❗distinct xx from xx
或distinct 字段1, 字段2, ...
(后者根据多个字段的组合来进行去重操作,确保多个字段的组合是唯一的。)示例:
3.4 分页查询
关键字
limit
,限制展示的记录数;select 字段列表 from student limit 起始索引n, 查询记录数; # 起始索引从0开始,从第n条(包含n)展示 = (查询页码 - 1)* 每页记录数。 # 如果查第一页,起始索引可省略。
3.5 排序
关键字
order by
,asc,desc;(从上到下越多/越少)语法:
# asc是默认值,可省略; select 字段 from 表名 order by 字段1 [asc/desc], 字段2 [asc/desc], ... # 若多个字段排序,当第一个字段的值相同,按第二个字段排序。
3.6 条件分支
关键字
case when
,可根据查询结果动态生成;例如查询顾客购买次数,对购买次数为1的用户进行标记,并生成新表;
语法:(条件要括号)
case when (条件1) then 结果1 when (条件2) then 结果2 else 结果3 end
3.7 分组查询⭐
关键字group by
,根据字段(或属性),对数据分类,并对分类进行计算/查询操作;
(1)字段(列)分组🔥
语法:
select xx from xx group by 字段1,字段2
;最后细分到字段2;
(2)筛选分组having
having与where区别
where
用于分组前,having
用于分组后,筛选特定分组。语法:
select xx from xx group by 字段 having 条件
。
3.8 联接查询join
cross join
,对多个表进行笛卡尔积语法:
select 表1.字段1, 表1.字段2, 表2.字段1
from 表1 (可加表的别名)
(cross) join 表2 (可加表的别名)
inner join
等值连接返回两个表中,满足关联条件的交集;
语法:
select 表1.字段1, 表1.字段2, 表2.字段1
from 表1 (可加表的别名)
(inner) join 表2 on 等值条件;
3.9 执行顺序
- from 表名
- where 条件
- group by 字段列表
- having 条件
- select 字段列表
- order by 字段列表 asc/desc
- limit 分页参数
四、数据定义DDL
关键字:create、alter、drop⭐
简单说:定义 数据库、表、字段
4.1 database
创建数据库
create database
🔥- 如果不存在
if not exists
,则创建。
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序 规则];
- 如果不存在
删除数据库
drop database
🔥drop database [ if exists ] 数据库名;
查看所有数据库
show databases;
选择当前数据库
select database();
切换数据库
use 数据库名;
4.2 table
创建表
create table
🔥CREATE TABLE 表名( 字段1 字段1类型 [COMMENT 字段1注释], 字段2 字段2类型 [COMMENT 字段2注释], name varchar(6) comment '姓名' ...... 字段n 字段n类型 [COMMENT 字段n注释] ) [COMMENT 表注释] ;
删除表
drop table
🔥drop table [ if exists ]表名;
修改表
alter table
🔥添加字段
add
ALTER TABLE 表名 ADD 字段名 类型 (长度) [COMMENT 注释] [约束]; alter table student add id varchar(20)
修改数据类型
modify
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度); # 修改字段名和字段类型 alter table 表名 change 旧字段名 新字段名 新类型 (长度) [COMMENT 注释] [约束];
删除字段
drop
ALTER TABLE 表名 DROP 字段名;
修改表名
alter table 表名 rename to 新表名;
查看当前库的所有表
show tables;
排序
desc/asc 表名;
查看建表语句
show create table 表名;
4.3 MySQL数据类型
三种主要类型:String(字符串)、Number(数字)和 Date/Time(日期/时间)类型。
常见数据类型:
数据类型 说明 char(size) 固定占用指定长度 ⭐varchar(size) 根据实际数据长度动态分配 int(size) 中等整数 float(size,d) 浮点数 DATE 日期,格式:YYYY-MM-DD time 时间,格式:hh:mm:ss
五、数据操纵DML
关键字:insert、update、delete⭐
简单说:增、删、改
5.1 insert into
给指定字段增加数据
insert into 表名(字段1,字段2,...) values(值1,值2,..) # 示例 insert into student(name,sex,id) values('林同学','女',202103103)
给全部字段增加数据
insert into 表名 values(值1,值2,...)
批量增加
insert into 表名(字段1,字段2,...) values(值1,值2,..),(值1,值2,..),(值1,值2,..); # 全部字段批量增加 insert into student values(值1,值2,..),(值1,值2,..),(值1,值2,..);
5.2 update
语法
update 表名 set 字段1 = 值1, 字段2 = 值2, 字段3 = 值3, ...[where 条件] # 示例 update student set name = '林同学', sex = '女' where id = 20210310; update employee set entrydate = '2008-01-01'
5.3 delete
语法
delete from 表名 [where 条件]
注:
- 有
from
- 不能删除某一个字段值(可用UPDATE,将值置为NULL即可)。
- 有
六、数据控制DCL
关键字:Grant、Revoke
简单说:授予权限、撤销权限,管理用户。
6.1 管理用户
查询用户
select * from mysql.user;
创建用户
create user '用户'@'主机名' identified by '密码';
修改用户密码
alter user '用户'@'主机名' identified with mysql_native_password by '新密码';
删除用户
drop user '用户'@'主机名';
注:
- MySQL通过用户名@主机名,唯一标识一个用户;
示例
- 创建用户heima,可在任意主机访问该数据库,密码123456;
- create user ‘heima’@‘%’ identified by ‘123456’;
6.2 权限控制
查询权限
show grants for '用户名'@'主机名';
授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
- 注
- 多个权限之间,使用逗号分隔。
附:SQL参考手册
还是以手册为准!
1. 时间函数
- date(“xxxx-xx-xx”) //日期
- datetime() //日期时间
- time(“xx:xx:xx”) //时间
- 注:若有参数,需按格式;
2. 字符串处理函数
- upper(string) //转换成大写
- lower(string) //转换成小写
- concat(S1,S2,S3) //字符串拼接,将S1,S2,S3拼接成一个字符串
- lpad(str,n,pad) //左填充,用字符串pad左填充str,达到n个字符长度,str可以是字段名。
- rpad(str,n,pad) //右填充,同理;
3. 聚合函数
通常配合group by
分组使用,对分组进行计算;
- count(列名) //统计数量(行数) 或 count(distinct 列名)
- sum() //求和
- avg() //计算平均值
- max()、min() //最大、最小
4. 数值函数
- rand() //返回0~1的随机数
- cell(x) //向上取整
- floor(x) //向下取整
5. 流程函数
函数 | 功能 |
---|---|
if(value, t, f) | 如果value为true,则返回t,否则返回 f |
case when [条件1] then [结果1] … ELSE [结果] END |