SQL的语法
SQL的语法
-
SQL通用语法
-
SQL语句可以单行或多行书写,以分号(“;”)结尾。
-
SQL语句可以使用空格或缩进增强可读性。
-
MySQL数据库的SQL语句不区分大小写(建议关键字大写)。
-
注释
单行注释:
-- 内容
# 内容(MySQL特有)
多行注释:
/* 内容 */
-
-
SQL语句分类
分类 全称 说明 DDL Data Definition Language 数据定义语言,用于定于数据库对象(数据库、表、字段) DML Data Manipulation Language 数据操作语言,用来对数据库表中数据进行增加、删除、修改 DQL Data Query Language 数据查询语言,用于查询数据库表中的记录 DCL Data Control Language 数据控制语言,用于创建数据库、操控数据库的访问权限
数据定义语言
-
数据库操作 —— 数据定义(DDL)
-
查询:
查询所有数据库:
show databases;
查询当前数据库:
select database();
-
创建:
create database [if not exists] 数据库名称 [default charset 字符集] [collate 排序规则];
(PS:方括号("[]")内的为可选项;字符集推荐使用utf8mb4;)
(意义:[if not exists]意义为若数据库内已存在该名称的数据库则不执行;)
-
删除:
drop database [if exists] 数据库名称;
(PS:方括号("[]")内的为可选项;)
(意义:[if exists]意义为若数据库存在则执行删除;)
-
使用:
use 数据库名称;
-
-
数据库操作 —— 数据定义(DDL)- 查询
-
查询当前数据库所以的表:
show table;
-
查询表结构:
desc 表名;
-
查询指定表的建表语句:
show create table 表名;
-
-
数数据库操作 —— 数据定义(DDL)- 创建
<数据库操作(DDL)- 创建 - 数据库:tb_user>
create table 表名( 字段1 字段1的类型 [comment 字段1注释], 字段2 字段2的类型 [comment 字段2注释], 字段3 字段3的类型 [comment 字段3注释] ) [comment 表注释]
(PS:方括号("[]")内的为可选项;)
-
数据库操作 —— 数据定义(DDL)- 数据类型
<数据库操作(DDL)- 数据类型 - 案例:08案例.txt>
MySQL主要数据库类型:
-
数值类型:
(PS:DOUBLE需要设置精度、标度;)
(意义:精度意义为数值总长度;标度意义为小数点位数;)
(案例:[字段名 TINYINT UNSIGNED] 意义为当前使用的TINYINT数据类型使用的是无符号的;)
-
字符串类型:
(PS:带BLOB的为二进制存储数据类型;CHAR类型若存储没有达到设定的长度则会用空格填充;VARCHARA类型为所占用的长度则为所占用的空间;)
(案例:[char(10)] 意义为最大长度为10的字符;)
-
日期时间类型:
-
-
数据库操作 —— 数据定义(DDL)- 修改
-
添加字段:
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束]
(PS:方括号("[]")内的为可选项;)
-
修改数据类型:
alter table 表名 modify 字段名 新数据类型(长度);
-
修改字段名和字段类型:
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
(PS:方括号("[]")内的为可选项;)
-
删除字段:
alter table 表名 drop 字段名;
-
修改表名:
alter table 表名 rename to 新表名;
-
-
数据库操作 —— 数据定义(DDL)- 删除
-
删除表:
drop table [if exists] 表名;
(PS:方括号("[]")内的为可选项;)
(意义:[if exists]意义为若数据库存在则执行删除;)
-
删除指定表,并重新创建该表:
truncate table 表名;
-
数据操作语言
-
数据库操作 —— 数据操作(DML)- 添加数据
-
给指定字段添加数据:
insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);
-
给全部字段添加数据:
insert into 表名 values(值1,值2,值3);
-
批量给指定字段添加数据:
insert into 表名(字段1,字段2) values(值1,值2),(值1,值2);
-
批量给全部字段添加数据:
insert into 表名 values(值1,值2),(值1,值2),(值1,值2);
(PS:添加的数据类型为字符串、日期应该包含在引号('')中;添加的字符串类型大小应该在字段规定的范围内;)
-
-
数据库操作 —— 数据操作(DML)- 修改数据
-
修改表的数据:
update 表名 set 字段名1 = 值1,字段名2 = 值2,字段名3 = 值3 [where 条件];
(PS:方括号("[]")内的为可选项;)
-
-
数据库操作 —— 数据操作(DML)- 删除数据
-
删除表的数据:
delete from 表名 [where 条件];
(PS:方括号("[]")内的为可选项;)
-
数据查询语言
-
数据库操作 —— 数据查询(DQL)
语法:
语法: 解释: select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数 -
数据库操作 —— 数据查询(DQL)- 基本查询
-
查询多个字段:
select 字段1,字段2,字段3 from 表名;
-
查询所有字段:
select * from 表名;
(PS:在开发中建议不要使用星号“※”;)
-
设置别名:
select 字段1 as 别名1,字段2 as 别名2 from 表名;
-
去除重复记录:
select distinct 字段列表 from 表名;
-
-
数据库操作 —— 数据查询(DQL)- 条件查询(where)
-
语法:
select 字段列表 from 表名 where 条件列表;
-
条件:
比较运算符 功能 > 大于 >= 大于等于 < 小于 <= 小于等于 = 等于 <> 或 != 不等于 detween ... and ... 在某个范围之内(最小值、最大值) in(...) 在in之后的列表中的值,多选一 like 占位符 模糊匹配(“_”匹配单个字符,“%”匹配任意个字符) is null 是null 逻辑运算符 功能 and 或 && 并且(多个条件同时成立) or 或 || 或者(多个条件任意一个成立) not 或 ! 非、不是
-
-
数据库操作 —— 数据查询(DQL)- 聚合函数(count、max、min、avg、sum)
-
介绍:
将一列数据作为一个整体,进行纵向运算。
-
常见的聚合函数:
函数 功能 count 统计数量 max 最大值 min 最小值 avg 平均值 sum 求和 -
语法:
select 聚合函数(字段列表) from 表名;
(PS:null值不参与聚合函数运算;)
-
-
数据库操作 —— 数据查询(DQL)- 分组查询(group by)
-
语法:
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
(PS:方括号("[]")内的为可选项;)
-
where与having的区别:
执行时间不同:where是分组之前进行过滤(不满足条件的不参与分组),而having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
-
-
数据库操作 —— 数据查询(DQL)- 排序查询(order by)
-
语法:
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
-
排序方式:
ASC:升序排序(默认值)。
DESC:降序排序。
(PS:若是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序;)
-
-
数据库操作 —— 数据查询(DQL)- 分页查询(limit)
-
语法:
select 字段列表 from 表名 limit 起始索引,查询记录数;
(PS:起始索引从0开始;起始索引=(查询页面 - 1) * 每页显示记录数;分页查询是数据库的方言(limit是MySQL的);)
-
-
数据库操作 —— 数据查询(DQL)- 执行顺序
-
执行顺序:
执行顺序: 语法: 解释: 4 select 字段列表 1 from 表名列表 2 where 条件列表 3 group by 分组字段列表 5 having 分组后条件列表 5 order by 排序字段列表 6 limit 分页参数
-
数据控制语言
-
数据库操作 —— 数据控制(DCL)- 管理用户
-
查询用户:
use mysql;
select * from user;
-
创建用户:
create user '用户名'@'主机名' identified by '密码';
-
修改用户密码:
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
-
删除用户:
drop user '用户名'@'主机名';
(PS:主机名可以使用百分号"%"通配符,来表示任意主机都可以访问;)
-
-
数据库操作 —— 数据控制(DCL)- 权限控制
-
常用的权限控制:
权限: 说明; all、all privileges 所有权限 select 查询数据 insert 插入数据 update 修改数据 delete 删除数据 alter 修改表 drop 删除数据库、表、视图 create 创建数据库、表 -
查询权限:
show grants for '用户名'@'主机名';
-
授予权限:
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
-
撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
(PS:多个权限之间要使用逗号(",")分隔;)
-