SQL简介
- Structured Query Language 结构化查询语言
- 定义操作所有关系型数据库的统一标准
- 对于同一个需求, 每一种数据库操作的方式可能会存在一些不一样的地方, 我们称为“方言”
SQL分类
类别 | 说明 | 功能 |
---|
DDL(Data Definition Language) | 数据定义语言 | 用来定义数据库对象:数据库,表,列等 |
DML(Data Manipulation Language) | 数据操作语言 | 用来对数据库中表的数据进行增删改 |
DQL(Data Query Language) | 数据查询语言 | 用来查询数据库中表的记录(数据) |
DCL(Data Control Language) | 数据控制语言 | 来定义数据库的访问权限和安全级别,及创建用户 |

DDL 操作数据库
1. 查询
SHOW DATABASES;
2. 创建数据库
CREATE DATABASE 数据库名称;
3. 创建数据库(判断,如果不存在则创建)
CREATE DATABASE IF NOT EXISTS 数据库名称;
4. 删除数据库
DROP DATABASE 数据库名称;
5. 删除数据库(判断,如果存在则删除)
DROP DATABASE IF EXISTS 数据库名称;
6. 使用数据库
USE 数据库名称;
7. 查看当前使用的数据库
SELECT DATABASE();
DDL 操作表

1. 查询当前数据库下所有表名称
SHOW TABLES;
2. 查询表结构
DESC 表名称;
3. 创建表
CREATE TABLE 表名 (
字段名1 数据类型1,
字段名2 数据类型2,
…
字段名n 数据类型n
);
4. 删除表
DROP TABLE 表名;
5. 删除表时判断表是否存在
DROP TABLE IF EXISTS 表名;
6. 修改表名
ALTER TABLE 表名 RENAME TO 新的表名;
7. 添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
8. 修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
9. 修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
10. 删除列
ALTER TABLE 表名 DROP 列名;
DML 操作表中数据
1. 给指定列添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
2. 给全部列添加数据
INSERT INTO 表名 VALUES(值1,值2,…);
3. 批量添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
4. 修改表数据
UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件];
5. 删除数据
DELETE FROM 表名 [WHERE 条件];
6. truncate删除表记录 属于DDL
TRUNCATE TABLE 表名;
- truncate和delete的区别:
- delete是将表中的数据一条一条删除
- truncate是将整个表摧毁, 重新创建一个新的表, 新的表结构和原来表结构一模一样
DQL 数据查询 数字代表执行顺序
SELECT 5
字段列表
FROM 1
表名列表
WHERE 2
条件列表
GROUP BY 3
分组字段
HAVING 4
分组后条件
ORDER BY 6
排序字段
LIMIT 7
分页限定
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名;
SELECT DISTINCT 字段名,字段名,.. FROM 表名;
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
AS: AS 也可以省略
比较运算符
> 大于
< 小于
<= 小于等于
>= 大于等于
= 等于
<>、!= 不等于
逻辑运算符
and(&&) 多个条件同时满足 一假即假
or(||) 多个条件其中一个满足 一真即真
not(!) 不满足 取反
in关键字
SELECT * FROM 表名 WHERE 字段 in (值1, 值2, 值3);
in里面的每个数据都会作为一次条件,只要满足条件的就会显示
范围
BETWEEN 值1 AND 值2 -- 表示从值1到值2范围,包头又包尾
比如:age BETWEEN 80 AND 100
相当于: age>=80 && age<=100
模糊查询like
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
%: 表示零个一个多个字符(任意多个字符)
_: 表示一个字符
SELECT 字段 FROM 表名 ORDER BY 排序的字段 [ASC|DESC];
ASC: 升序排序 默认 可省略
DESC: 降序排序
组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];
count:在根据指定的列统计的时候,如果这一列中有null的行,该行 不会被统计在其中。按照列去统计有多少行数据。
sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max: 计算指定列的最大值
min: 计算指定列的最小值
avg: 计算指定列的平均值
按照某一列或者某几列 把相同的数据, 进行合并输出
在sql语句中,如果分组之后,还需要一些条件,
可以使用having条件,表示分组之后的条件,在having后面可以书写聚合函数
having必须和group by一起使用,having和where的用法一模一样,where怎么使用having就怎么使用,
where不能使用的,having也可以使用,比如说where后面不可以使用聚合函数,
但是在having后面是可以使用聚合函数的。
ifnull(列名, 默认值)函数表示判断该列是否为null,如果为null,返回默认值,如果不为null,返回实际的值
ifnull(english,2) == english列的值是null,返回值是 2