1.SQL语句可以单行或多行书写,以分号结尾。
2.可以使用空格/缩进来增强语句的可读性。
3.SQL语句不区分大小写,关键字建议用大写
4.注释:
单行注释:--注释内容 或#注释内容
多行注释:/*注释内容*/
分类 | 全称 | 说明 |
DDL | Data definition language | 数据定义语言,用来定义数据库对象(数据库,表,这段) |
DML | Data manipulation language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data query language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data control language | 数据控制语言,用来创建数据库用户,控制数据库的访问权限 |
DDL语句:↓ | |
CREATE TABLE 表名 (字段1 类型1(字长),字段2 类型2(字长),字段3 类型3(字长)) | 创建数据表 |
SHOW DATABASES; | 查询所有数据库 |
SELECT DATABASE(); | 查询当前数据库 |
CREATE VIEW 视图名称 AS | 创建视图 |
CREATE DATABASE 数据库名 | 创建数据库 |
DROP DATABASE 数据库名; | 删除数据库 |
USE 数据库名; | 使用数据库 |
CREATE DATABASE [IF NOT EXISTS] 数据库名字 [DEFAULT CHARSET 字符集][COLLATE 排序规则]; | 创建数据库规定字符集和排序方式 |
DROP DATABASE [IF EXISTS] 数据库名; | 判断数据库是否存在存在则删除 |
DESC 表名; | 查看表结构 |
SHOW CREATE TABLE 表名; | 查看指定表的建表语句 |
ALTER TABLE 表名 ADD 字段名 类型[长度] | 对表添加字段 |
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度) INSERT 表名(字段1,字段2,字段3)VALUES(‘字段信息1’,’字段信息2’,’字段信息3’) | 修改字段数据类型 添加字段数据信息 |
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) | 修改字段名及数据类型 |
ALTER TABLE 表名 DROP 字段名; | 删除字段 |
ALTER TABLE 表名 RENAME TO 新表名; | 修改表名 |
DROP TABLE 表名; | 删除表 |
DROP TABALE [IF EXISTS] 表名; | 如果此表存在则删除 |
TRUNCATE TABLE 表名; | 删除该表并重新创建该表结构保留 |
-----------------------------------------------------语句-------------------------------------------------------------- | -----------------------------------------------------含义-------------------------------------------------------------- |
DML语句:↓ | |
-----------------------------------------------------语句-------------------------------------------------------------- | -----------------------------------------------------含义-------------------------------------------------------------- |
INSERT INTO 表名(字段名1,字段名2,……) VALUSE(值1,值2),(值1,值2),(值1,值2); | 为指定的字段批量添加数据 |
INSERT INTO 表名 VALUSE(值1,值2,……),(值1,值2,……),(值1,值2,……),(值1,值2,……); | 按顺序为全部字段添加数据从第一个字段开始 |
INSERT 添加数据 UPDATE 修改数据 DELETE 删除数据 | 数据操作语句 |
UPDATE 表名 SET 字段名1=值1,字段名2=值2,….WHERE [条件];例如id=1;或者id>=1; | 修改数据,更新 |
DELETE FROM 表名 WHERE[条件] | 删除数据 |
DQL语句:↓ | |
-----------------------------------------------------含义-------------------------------------------------------------- | |
SELECT | 字段列表 |
FROM | 表名列表 |
WHERE | 条件列表 |
GROLP BY | 分组字段列表 |
HAVING | 分组后条件列表还可用于聚合函数 |
ORDER BY | 排序字段列表 |
LIMIT | 分页参数 |
DQL-基本查询: | |
1.查询多个字段 SELECT 字段1,字段2,字段3….FROM 表名; SELCT * FROM 表名; | 指定查询多个字段 查询返回所有字段 |
SELECT DISTINCT 字段列表 FROM 表名 | 去除重复记录 |
SELECT * FROM 表名 WHERE 条件;
| 条件查询语句 //条件可以是一个也可以是多个,可以用比较运算符和逻辑运算符 |
DQL—聚合函数 | |
介绍 | |
将一列数据作为一个整体,进行纵向计算。 | |
2.常见函数 | |
函数 | 功能 |
COUNT(字段 *) | 统计数量 |
MAX(字段) | 最大值 |
MiN(字段) | 最小值 |
AVG(字段) | 平均值 |
SUM(字段) | 求 和 |
语法 | |
SELECT 聚合函数(字段列表) FROM 表名; | null不参与所有的聚合函数运算 |
SELECT 聚合函数(字段) FROM 表名 WHERE 条件值; | 条件聚合求某个字段的值用聚合函数返回但是需要满足条件 |
分组查询 | |
1.语法 | GROUP BY |
SELECT 字段,聚合函数 FROM 表名 GROUP BY 字段名; | 查询某个字段名 |
SELECT 字段 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件]; | 中括号的内容可省略,写语句是不屑中括号 //GROUP BY 分组字段名表示需要根据那个字段进行分组 //HAVING分组过后再进行过滤 查询某个字段但是要满足条件,查询完毕过后对其中某个字段进行分组 |
2.WHERE与HAVING区别
| |
注意:
| |
排序查询 | |
1.语法 | |
SELECT 字段名 FROM 表名 OPDEP BY 字段1 排序方式1,字段2 排序方式2; (*)可用星号 | 支持多字段排序 |
2.排序方式 | |
ASC | 升序(默认排序方式) |
DESC | 降序 |
ORDER BY CAST(字段 AS UNSIGNED) ASC | 按照这段值大小 |
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。 | 以此类推 |
1.分页查询 | |
语法 | |
SELECT 字段名 FROM 表名 LIMIT 起始索引,查询记录数; | 分页查询 |
注意: | |
| |
例如 SELECT * FROM 表名 LIMIT 0,10; | 查询第一页的十条记录 |
DCL-管理用户 | |
USE MYSQL SELECT * FROM USER; | 查询用户 |
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; | 创建用户 |
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'; | 修改用户密码 |
DROP USER'用户名'@'主机名'; | 删除用户 |
注意: | |
主机名可以使用%通配。 这类SQL开发人员操作的比较少,主要是DBA(Database Administrator 数据库管理员)使用。 | |
权限控制 | |
用户管理 | |
CREATE USER '用户名' @ '主机名' IDENTIFIED BY '密码'; | 创建用户 |
ALTER USER '用户名' @ '主机名' IDENTIFIED WTH MYSQL_NATIVE_PASSWORD BY '密码'; | 修改用户没密码 |
DROP USER '用户名'@'主机名' | 删除用户 |
权限 | 说明 |
ALL,ALL PRIVLEGES | 所有权限 |
SELECT | 查询数量 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |
REPLACE(字段名,) | |
SHOW GRANTS FOR '用户名' @ '主机名'; | 查询权限 |
GRANT 权限列表 ON 数据库名,表名 TO '用户名' @ '主机名'; | 授予权限(给某一个用户授予某个数据库的某一张表的某一种权限) |
REVOKE 权限列表 ON 数据库名,表名 FROM '用户名' @ '主机名'; | 撤销权限;(撤销权限列表,从某个用户上撤销某个数据库某个表的权限) |
注意: | |
多个权限之间,使用逗号分隔; | |
授权时,数据库名和表名可以使用 * 进行匹配,代表所有。 | |
函数: | |
介绍:函数是指一段可以直接被另一段程序调用的程序或代码。 | |
1.字符串函数 | |
2.数值函数
|
约束概述: 2.目的:保证数据库中数据的正确,有效和完整性。 | ||
约束 | 描述 | 关键字 |
非空约束 | 限制该字段的数据不能为空 | NOT NULL |
唯一约束 | 保证该字段的所有数据都是唯一不重复的 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | DEFAULT |
检查约束 | 保证字段值满足某一个条件 | CHECK |
外键约束 | 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 | FOREIGN KEY |
拓展 | 别名 |
用: | AS |
或 | 不写 |
别名不允许在WHERE中使用 |
函数
平均值:AVG(字段) |
总价:sum(字段) |
总类数量:count(字段) |
分组:group by(字段) |
排序:ORDER BY 字段 |
降序:DESC LTMIT 开始位数,结束位数 |
升序:ASC 开始位数,结束位数 |
四舍五入:ROUND(字段,位数) 重复值:DISTINCT |
不在:not in(子查询) |
包含一个或者多个值:in |
转换:CONVERT (字段) |
获取:LIMIT 开始位置,获取多少位 |
截取:LEFT(字段,第几位) |
之间:BETWEEN |
年龄:age |
描述:desc |
向上取整:CEIL() |
向下取整:FLOOR() |
获取月份:DATE-FORMAT(“2021-08-04”,“%Y-%m-%d”) |
判断:CASE 字段 |
等于:WHEN |
输出:THEN 字段 |
否则:ELSE 0 |
结束:END |
获取当前日期:CURRENT |
DATE |
获取当前时间:CURRENT |
TIME |
获取系统时间:当前日期+当前时间 |
年:YEAR,月:MONTH,日:DAY |
小时:HOUR,分钟:MINUTE,秒:SECOND |
替换:REPLACE(字段,“字段关键字”,“替换内容”) 为空:Is null 不为空:not null |