数据库排名:
Oracle(关系型)
MySQL(关系型)
SQLServer(关系型)
PostgreSQL(关系型)
MongoDB(非关系数据库)
DB2(关系型)
Redis(非关系数据库)
ElasticSearch(非关系数据库)
SQL语句(结构化查询语言)
DDL(数据定义语言):create / drop / alter
DML(数据操作语言):insert / delete / update / select
DCL(数据控制语言):grant / revoke
<font size="4">前言:SQL中大小写不敏感(大写和小写是一样的); 每条SQL语句必须以分号结束</font>
一、DDL(数据定义语言)
主要提供数据库和表的创建、删除和修改
1. 创建数据库
| 语法 |
功能 |
| create database 数据库名; |
直接创建指定数据库 |
| create database if not exists 数据库; |
当指定数据库不存在的时候才创建数据库 |
| create database if not exists 数据库 default charset utf8; |
创建数据库时设置字符集编码方式为utf8,让数据库支持中文数据存储 |
2.删除数据库
| 语法 |
功能 |
| drop database 数据库; |
直接删除指定数据库 |
| drop database if exists 数据库; |
如果指定的数据库存在就删除数据库 |
3. 使用/切换数据库
| 语法 |
功能 |
| use 数据库; |
使用/切换指定数据库 |
4. 新建表
| 语法 |
功能 |
| create table if not exists 表(字段1 类型1, 字段2 类型2,...); |
新建表,表名一般加前缀't'或'tb',字段名不能是关键字 |
| create table if not exists 表(字段1 类型1 约束1, 字段2 类型2 约束2,...); |
新建表并且添加约束 |
5. 删除表
| 语法 |
功能 |
| drop table if exists 表; |
删除指定表 |
| truncate table 表; |
清空指定表 |
6. 修改表
| 语法 |
功能 |
| alter table 表 add column 字段 类型 约束; |
添加列 |
| alter table 表 drop column 字段; |
删除列 |
二、DML(数据操作语言)
主要针对数据库中数据的增、删、改、查
1. 增
| 语法 |
功能 |
| insert into 表 values(值1, 值2, 值3,...); |
插入数据,依次给指定表中的字段赋值 |
| insert into 表(字段1, 字段2,...) values(值1, 值2,...); |
插入数据,以指定顺序给指定字段赋值,可一次插入多条数据,用逗号分开 |
(注)时间函数:now() - 当前时间;date(now()) - 当前日期;year(now()) - 当前年;month(now()) - 当前月
2. 删
| 语法 |
功能 |
| delete from 表; |
删除指定表中所有记录 |
| delete from 表 where 条件语句; |
删除满足条件的记录 |
3. 改
| 语法 |
功能 |
| update 表 set 字段1=新值1, 字段2=新值2,...; |
将指定表中所有行的指定列/字段的值赋值为新值 |
| update 表 set 字段1=新值1, 字段2=新值2,... where 条件语句; |
将表中满足条件的行中指定列/字段的值赋值为新值 |
4. 查
| 语法 |
功能 |
| select * from 表; |
获取指定表中所有行和所有的列(所有数据) |
| select 字段1,字段2,... from 表; |
获取指定表中所有行指定的列 |
| select * from 表 where 条件; |
获取指定表中所有满足条件的行所有列的数据 |
| select 字段1 as 新字段1, 字段2 as 新字段2,... from 表; |
列重命名(as可以省略) |
| select if(字段,值1,值2) from 表; |
(MySQL写法)查询指定字段,字段真则结果为值1,假则结果为值2 |
| select case 字段 when 值 then 新值1 else 新值2 end; |
(通用写法)查询指定字段并将结果重新赋值 |
| select concat(字段1,字段2,...) from 表; |
对列进行合并,数字和字符串数据可合并,bit类型数据不可合并 |
|
排序:(先按之前的任何语法进行查询再排序) |
| select * from 表 order by 字段; |
对查询结果按照指定字段的值进行升序排序 |
| select * from 表 order by 字段 asc; |
对查询结果按照指定字段的值进行升序排序 |
| select * from 表 order by 字段 desc; |
对查询结果按照指定字段的值进行降序排序 |
| 注:多个字段排序,写在前面的优先级高 |
| 限制: |
| select * from 表 limit N; |
获取查询结果的前N条记录 |
| select * from 表 limit M offset N; |
对查询结果跳过前N条数据,取M条数据出来 |
| 去重: |
| select distinct 字段 from 表; |
查询结果去重 |
5. 条件语句
在SQL中可以通过 where 条件语句,来对操作对象进行筛选
条件语句:
| 语法 |
功能 |
| = |
等于 |
| <> |
不等于 |
| > |
大于 |
| < |
小于 |
| >= |
大于等于 |
| <= |
小于等于 |
| is/is not |
判断是否等于null空时使用 |
| and |
逻辑与运算 |
| or |
逻辑或运算 |
| not |
逻辑非 |
| in |
集合中是否包含 |
| like |
模糊查询 |
| % |
表示0个或多个的任意字符 |
| _ |
表示一个任意字符 |
| between 值1 and 值2 |
筛选指定字段的值在值1和值2之间 |
6. 数据类型
| 名称 |
功能 |
| int/tinyint(-128~127) |
整数 |
| float(size,d)/double(size,d) |
浮点数,这儿的size和d的值都有约束效果 |
| char(size) |
定长字符 |
| varchar(size) |
不定长字符串,size决定的是最大长度 |
| text |
不限长度(最大是255个字符) |
| bit |
布尔,只有0和1两个值 |
| date/datetime/time |
值可以是时间函数的结果,也可以是时间字符串;计算或者是比较的时候内部是按时间处理的 |
7. 约束
创建表的时候可以添加约束
约束索引:
| 语法 |
功能 |
| alter table 表 add constraint 索引 约束(字段); |
添加约束,索引(自己命名),约束(支持唯一约束、主键约束和外键约束) |
| alter table 表 drop index 约束索引; |
删除约束 |
常见约束:
| 语法 |
功能 |
| not null |
不为空 |
| default 值 |
设置默认值 |
| unique |
值唯一 |
| primary key(字段) |
主键约束(唯一记录) |
| auto_increment |
主键自动增长 |
8. 外键
添加外键:
| 语法 |
功能 |
| alter table 表1 add constraint 索引 foreign key (字段1) references 表2 (字段2); |
将表1中字段1设为外键,让其参照表2中字段2 |
删除外键:
| 语法 |
功能 |
| alter table 表 drop foreign key 外键索引; |
先,删除外键约束 |
| alter table 表 drop index 外键索引; |
后,删除约束的索引 |
9. 聚合
max() min() sum() avg() count()
| 语法 |
功能 |
| select 聚合函数(字段) from 表 [where 条件]; |
[按条件]查询后将结果做相应的聚合运算 |
10. 分组
| 语法 |
| select 字段操作 from 表 [where 条件] group by(字段); |
先筛选在分组 |
| select 字段操作 from 表 group by(字段) [having 条件]; |
先分组在筛选 |
where和having可同时使用
功能:将表中[满足条件]的记录按照字段分组, 再将每个分组作为整体做聚合操作,字段操作的位置除了分组字段不用聚合,其他字段都必须聚合
11. 子查询
将一个查询操作的结果作为另外一个查询的数据源
12. 连接查询
| 语法 |
功能 |
| select * from 表1,表2,...where 表1表2连接条件...; |
普通连接 |
| select * from 表1 inner join 表2 on 表1表2连接条件 inner join 表3 on 表1表3连接条件...; |
内连接 |
| select * from 表1 left join 表2 on 表1表2连接条件...[where 条件]; |
左外连接,右表值不存在则为null |
| select * from 表1 right join 表2 on 表1表2连接条件...[where 条件]; |
右外连接,左表值不存在则为null |
13. 字段索引
字段索引相当于目录,作用为快速对此字段进行查找
只针对某个查询很频繁的字段,建议添加对应索引
| 语法 |
功能 |
| create index 索引 on 表 (字段); |
添加索引 |
| alter table 表 drop index 索引; |
删除索引 |
三、DCL(数据控制语言)
1. 创建用户
create user '用户名'@'登录地址' identified by '密码';
| 登录地址 |
作用 |
| localhost |
数据库本机 |
| ip地址 |
指定地址 |
| % |
任何位置 |
2. 删除用户
drop user 用户名;
3. 授权
| 语法 |
功能 |
| grant 权限类型 on 数据库.对象 to '用户'; |
为指定用户添加指定数据库指定对象的指定权限 |
| grant 权限类型 on 数据库.对象 to '用户' with grant option; |
添加权限,并且可以将自己的权限再授权给别人 |
| revoke 权限类型 on 数据库.对象 from 用户名; |
撤销/召回权限 |
| 权限类型 |
功能 |
| select |
查看 |
| insert |
添加 |
| delete |
删除 |
| update |
更新 |
| create |
创建 |
| drop |
删除 |
| alter |
更改 |
| all privileges |
所有权限 |
4. 事务
| 语法 |
功能 |
| begin; |
开启事务环境 |
| commit; |
事务提交 |
| rollback; |
事务回滚 |
只有begin;到commit;之间的所有的sql都执行成功,才会执行commit;否则执行rollback;