SQL语句
DDL-数据定义语言
数据库操作
查询
查询所有数据库
SHOW DATABASES;
查询当前所在数据库
SELECT DATABASE();
创建
CREATE DATABASE [IF NO EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [排序规则];
删除
DROP DATABASE [IF EXISTS] 数据库名;
使用
USE 数据库名;
表操作
查询
查询当前数据库所有表
SHOW TABLES;
查询表结构
DESC 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名;
创建

修改
添加字段
ALTER TABLE 表名 ADD 字段名 类型 [COMMENT 注释][约束];
修改字段的数据类型
ALTER TABLE 表名 MODIFY 字段名 新类型;
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 [COMMENT 注释][约束];
删除字段
ALTER TABLE 表名 DROP 字段名;
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
删除
删除表
DROP TABLE [IF EXISTS] 表名;
删除表,并重新创建该表
TRUNCATE TABLE 表名;
DML-数据操作语言
添加数据
给指定字段添加数据
INSERT INTO 表名(字段名1,字段名2) VALUES(值1,值2);
给全部字段添加数据
INSERT INTO 表名 VALUES(值1,值2,,,);
批量添加数据
INSERT INTO 表名(字段名1,字段名2) VALUES(值1,值2),(值1,值2);
INSERT INTO 表名 VALUES(值1,值2,,,),(值1,值2,,,);
删除数据
DELETE FROM 表名 [WHERE 条件]
修改数据
UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2 [WHERE 条件];
DQL-数据查询语言
基础查询
查询多个字段
SELECT 字段1,字段2,字段3 ... FROM 表名;
SELECT * FROM 表名
设置别名
SELECT 字段1 [AS 别名1],字段2 [AS 别名2] FROM 表名;
去除重复记录
SELECT DISTINCT 字段1,字段2,字段3 ... FROM 表名;
SELECT DISTINCT * FROM 表名;
SELECT DISTINCT 字段1 [AS 别名1],字段2 [AS 别名2] FROM 表名;
条件查询
语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件


例子
假设在emp表中
1. 查询年龄大于20
SELECT * FROM emp WHERE age > 20;
2. 查询没有身份号码的员工信息
SELECT * FROM emp WHERE idcard IS NULL;
3. 查询有身份号码的员工信息
SELECT * FROM emp WHERE idcard IS NOT NULL;
4. 查询年龄不等于88
SELECT * FROM emp WHERE age != 88;
SELECT * FROM emp WHERE age <> 88;
5. 查询年龄在15-20之间
SELECT * FROM emp WHERE age > 15 AND age < 20;
SELECT * FROM emp WHERE age > 15 && age <20;
SELECT * FROM emp WHERE age BETWEEN 15 AND 20;
6. 查询性别男且年龄小于25
SELECT * FROM emp WHERE gender = '男' AND age < 25;
7. 查询年龄为16、13、20
SELECT * FROM emp WHERE age = 16 OR age = 13 OR age = 20;
SELECT * FROM emp WHERE age IN(16,13,20);
8. 查询名字2个字
SELECT * FROM emp WHERE name LIKE '__';
9. 查询名字3个字
SELECT * FROM emp WHERE name LIKE '___';
10. 查询名字 张 开头,其他随便
SELECT * FROM emp WHERE name LIKE '张%';
11. 查询名字 张 结尾,其他随便
SELECT * FROM emp WHERE name LIKE '%张';聚合函数
介绍
将一列数据作为一个整体,进行纵向计算。
常见聚合函数

语法
SELECT 聚合函数(字段列表) FROM 表名;
例子
假设在emp表中
1. 统计emp的员工数量
SELECT COUNT(*) FROM emp;
2. 统计员工的平均年龄
SELECT AVG(age) FROM emp;
3. 统计员工的最小年龄
SELECT MIN(age) FROM emp;
4. 统计员工的年龄之和
SELECT SUM(age) FROM emp;
注意
null值不参与聚合函数的计算。
分组查询
语法
SELECT 字段列表 FROM 表名 [ WHERE 条件] GROUP BY 分组字段名 [ HAVING 分组后条件] ;
WHERE与HAVING区别

例子
1. 根据性别分组,统计男性员工与女性员工的数量
SELECT gender,COUNT(gender) FROM emp GROUP BY gender;
==
SELECT gender,COUNT(*) FROM emp GROUP BY gender;
2. 根据性别分组,统计男性员工与女性员工的平均年龄
SELECT gender,AVG(age) AS '平均年龄' FROM emp GROUP BY gender;
3. 查询年龄小于45的员工,并根据部门分组,获取员工数量大于3的部门
SELECT department,COUNT(*) FROM emp WHERE age < 45 GROUP BY department HAVING COUNT(*) > 3;注意

排序查询
语法
SELECT 字段列表 FROM 表名 ORDER BY 字段名1 排序方式1,字段名2 排序方式2;
排序方式
ASC : 升序(默认)
DESC : 降序
例子
1. 根据年龄对员工进行升序排序
SELECT * FROM emp ORDER BY age ASC;
SELECT * FROM emp ORDER BY age;
2. 根据年龄对员工进行升序排序,年龄相同,再按照时间进行降序排序
SELECT * FROM emp ORDER BY age ASC,hire_date DESC;注意
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
分页查询
语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
例子
1. 查询第1页员工数据,每页显示5条数据(1~5)
SELECT * FROM emp LIMIT 0,5;
=
SELECT * FROM emp LIMIT 5;
2. 查询第2页员工数据,每页显示5条数据(6~10)
SELECT * FROM emp LIMIT 5,5;
3. 查询第3页员工数据,每页显示5条数据(11~15)
SELECT * FROM emp LIMIT 10,5;注意

DQL 顺序
编写顺序

执行顺序

DCL-数据控制语言
管理用户
查询用户
USE mysql;
SELECT * FROM user;
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
删除用户
DROP USER '用户名'@'主机名';
权限控制
权限列表

查询权限
SHOW GRANTS FOR '用户名'@'主机名';
授予权限
GRANT 权限列表 ON 数据库.表名 TO '用户名'@'主机名';
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
注意
多个权限之间,用
.分隔。授权时,数据库名和表名可以使用
*进行通配代表所有。