SQL1
1 SQL通用语法
- SQL语句可以单行或多行书写,以
;
j结尾 - SQL语句可以使用 空格、 缩进 来增强语句的可读性
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 注释
- 单行注释:
-- 注释内容
或# 注释内容
(MySQL特有) - 多行注释:
/* 注释内容 */
- 单行注释:
2 SQL分类
分类 | 说明 |
---|---|
Data Definition Language DDL | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
Data Manipulation Language DML | 数据操作语言,用来对数据库表中的数据进行 增删改 |
Data Query Language DQL | 数据查询语言,用来查询数据库中表的记录 |
Data Control Language DCL | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
3 DDL
3.1. 数据库操作
查询
查询所有数据库
SHOW DATABASES;
查询当前数据库
SELECT DATABASES();
创建
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
删除
DROP DATABASE [IF EXISTS] 数据库名;
使用
USE 数据库名;
3.2. 表操作
查询
查询当前数据库的所有表
SHOW TABLES;
查询表结构
DESC 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名;
创建
注意:CREATE TABLE 表名( 字段1 字段1类型[ COMMENT 字段1注释], 字段2 字段1类型[ COMMENT 字段2注释], 字段3 字段1类型[ COMMENT 字段3注释], ... 字段n 字段n类型[ COMMENT 字段n注释] )[ COMMENT 表注释];
...
为可选字段,最后一个字段后面没,
数据类型
MySQL中的数据类型有很多,主要分为三大类:数值类型、字符串类型、日期时间类型。
数值类型
age TINYINT UNSIGNED
score DOUBLE(4,1) -- 4是总长度 1是小数点后的位数
字符串类型
char(10)
最长不超过 10,未达到字符长度用 空格 补齐
性能较好
varchar(10)
最长不超过 10, 动态长度
性能较差
日期时间类型
其他类型
修改
添加字段
ALTER 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
删除字段
ALTER TABLE 表名 DROP 字段名;
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
删除表
DROP TABLE [IF EXISTS] 表名; -- 表中数据会被删除
删除指定表,并重新创建新表
TRUNCATE TABLE 表名; -- 表中数据会被删除
MySQL图形化界面
4 DML
Data Manipulation Language (数据库操作语言),用来对数据库中表的数据记录进行增删改操作
4.1. 添加数据(INSERT)
给指定字段添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...);
给全部字段添加数据
INSERT INTO 表名 VALUES(值1,值2,...);
批量添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
- **注意**
- 插入数据时,指定的字段顺序需要与值得顺序是一一 对应的
- 字符串和日期型的数据应该包含在引号中
- 插入的数据大小,应该在字段的规定范围内
4.2. 修改数据(UPDATE)
修改数据
UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[ WHERE 条件];
- 注意:
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所以数据
4.3. 删除数据(DELETE)
删除数据
DELETE FROM 表名 [ WHERE 条件];
- **注意**
- DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所以数据
- DELETE语句不能删除某一个字段的值(可以使用 UPDATE)
5 DQL
Data Query Language(数据查询语言),用来查询数据库中表的记录
关键字:`select`
5.1. 语法
SELECT 字段列表
FROM 表名列表
WHERE 条件列表
GROUP BY 分组字段列表
HAVING 分组后条件列表
ORDER BY 排序字段列表
LIMIT 分页参数
5.2. 基本查询
查询多个字段
SELECT 字段1,字段2,字段3,... FROM 表名;
注意:SELECT * FROM 表名; -- 不推荐
避免写
*
影响效率,字段名不直观设置别名
注意:SELECT 字段1 [ AS 别名1],字段2 [ AS 别名2],... FROM 表名;
AS
可省略去重复记录
SELECT DISTINCT 字段列表 FROM 表名;
5.3. 条件查询(WHERE)
语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
比较运算符
逻辑运算符
特殊示例
IS NULL; IS NOT NULL; age != 88; age <> 88; age >=15 AND age <=20; age BETWEEN 15 AND 20; -- 最小值在前 age IN(15,20); age = 15 OR age =20; name LIKE '__'; -- 查询名字为两个字符的数据,1个下划线 代表一个字符 idcard LIKE '%X'; idcard LIKE '_________________X';
5.4. 聚合函数(COUNT、MAX、MIN、AVG 、SUM)
介绍
将一列数据作为一个整体,进行纵向计算
常见聚合函数
语法
SELECT 聚合函数(字段列表) FROM 表名;
- **注意:**
NULL
不参与所有聚合函数运算
5.5. 分组查询(GROUP BY)
语法
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件];
- `WHERW` 与 `HAVING`
的区别
- 执行时机不同:WHERE 是分组之前进行过滤,不满足WHERE条件,不参与分组;而 HAVING 是分组之后对结果进行过滤
- 判断条件不同:WHERE不能对聚合函数进行判断,而HAVING可以
- **注意**
- 执行顺序:WHERE > 聚合函数 > HAVING
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
特殊示例
-- 查询年龄小于45,且根据工作分组,并且员工数量大于3的工作城市 SELECT workaddress,COUNT(*) address_count FROM emp WHERE age<45 GROUP BY workaddress HAVING address_count > 3;
5.6. 排序查询(ORDER BY)
语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2,... ;
排序方式
ASC
- 升序(默认值)DESC
- 降序
- 注意:
多字段排序,当第一字段值相同时才会根据第二字段进行排序
5.7. 分页查询(LIMIT)
语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
- 注意
- 起始索引 从 0 开始 起始索引 = (查询页码 - 1)* 每页显示记录数
- 如果查询的是第一页数据,起始索引可省略
- 分页查询是数据库的方言,不同数据库有不同的实现, MySQL中是
LIMIT
5.8. 执行顺序
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
6 DCL
Data Control Language(数据控制语言),用来管理数据库 用户、控制数据库访问权限。
6.1. 用户管理
查询用户
USE mysql; SELECT * FROM user;
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
删除用户
DROP USER '用户名'@'主机名';
- **注意**
- 主机名可以使用
&
通配 - 这些操作SQL开发人员操作较少,主要是DBA(Database Administrator 数据库管理员)使用
- 主机名可以使用
6.2. 权限控制
权限类型
查询权限
SHOW GRANTS FOR '用户名'@'主机名';
授予权限
GRANTS 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
- **注意**
- 多个权限之间,使用
,
分隔 - 授权时,数据库名和表名可以使用
*
进行通配
- 多个权限之间,使用