SQL基础语法
一、SQL通用语法及分类
通用语法
- SQL语句可以单行或者多行书写,以分号结尾
- SQL语句可以使用空格/缩进来增强语句的可读性
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 注释:单行注释:-- 注释内容 或 # 注释内容
多行注释:/*注释内容*/
分类
DDL | 数据定义语言(Data Definition Language) | 用来定义数据库对象(数据库,表,字段) |
DML | 数据操作语言(Data Manipulation Language) | 用来对数据库表中的数据进行增删改 |
DQL | 数据查询语言(Data Query Language) | 用来查询数据库中的记录 |
DCL | 数据控制语言(Data Control Language) | 创建数据库用户,数据库控制访问权限 |
TCL | 事务控制语言(Transaction Control Language) | 用于管理数据库中的事务 |
二、DDL(数据定义语言)
2.1 数据库操作
#查询所有数据库
show databases
#查询当前数据库
select database()
#创建数据库
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则]
#使用数据库
use 数据库名
#删除数据库
drop [if exists]数据库名
2.2 表操作
查询表操作:
#查询当前数据库表
show tables;
#查询表结构
desc 表名;
#查询指定表的建表语句
show create table 表名;
创建表操作:
create table 表名(
字段1 字段1类型[comment '字段1注释'],
字段2 字段2类型[comment '字段2注释'],
.......
字段n 字段n类型[comment '字段n注释']
)[comment '表注释'];
注:[....]为可选参数,最后一个字段后面没有逗号
数据类型:
数据类型 | 大小(byte) | 描述 |
---|---|---|
tinyint | 1 | 小整数值 |
smallint | 2 | 大整数值 |
mediumint | 3 | 大整数值 |
int | 4 | 大整数值 |
bigint | 8 | 极大整数值 |
float | 4 | 单精度浮点数值 |
double | 8 | 双精度浮点数值 |
decimal | 小数值(精确定点数) |
double--指定两个参数,double(整体数值长度,保留小数位数)eg:100.1 double(4,1)
字符串类型:
- char():定长字符串
- varchar():变长字符串
- tinyblob:不超过255个字符的二进制数据
- blob:二进制形式的长文本数据
- mediumblob:二进制形式的中等长度文本数据
- longblob:二进制形式的极大文本数据
- tinytext:短文本字符串;text--长文本数据
- mediumtext:中等长度文本数据
- longtext:极大文本数据
日期时间类型:
类型 | 大小 | 格式 | 描述 |
---|---|---|---|
date | 3 | YYYY-MM-DD | 日期值 |
time | 3 | HH:MM:SS | 时间值或持续时间 |
year | 1 | YYYY | 年份值 |
datetime | 8 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
timestamp | 4 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
修改表操作:
#添加字段
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(数据操作语言)
3.1 添加数据
#给指定字段添加数据
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.....)
注意:
- 插入数据时,指定的字段顺序需要与值的顺序是一 一对应的
- 字符串和日期型数据都应该包含在单引号中
- 插入的数据大小,应该在字段的规定范围内
3.2 修改数据
update 表名 set 字段名1=值1,字段2=值2....[where 条件]
注意:修改语句条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据
3.3 删除数据
delete from 表名 [where 条件]
注意:
- delete 语句的条件可以有也可以没有,如果没有条件就删除整张表的所有数据
- delete 语句不能删除某一个字段的数据
四、DQL(数据查询语言)
数据查询语法:
select 字段列表
form 列表名
where 条件列表
group by 分组字段列表
having 分组后条件列表
order by 字段列表排序
limit 分页参数
4.1 select基本查询
#查询返回所有字段
slect * from 表名
#查询返回多个字段
select 字段1,字段2.... from 表名
#字段设置别名
select 字段1[as 别名1],字段2[as 别名2]...from 表名
#去除重复记录
select distinct 字段列表 from 表名
4.2 select条件查询(where)
- 比较符、不等于:<>或!=
- 在某个范围之间(包含最大值,最小值):between...and...
- 在in之后的列表中的值:in(......)
- 模糊匹配( '_' 匹配单个字符,'%'匹配任意个字符):like占位符(_/%)
- 是空:is null
- 并且(多个条件同时成立):and 或 &&
- 或者(多个条件任意成立一个):or 或 ||
- 非,不是:not 或 !
4.3 聚合查询函数
- count():统计数量
- max():最大值
- min():最小值
- avg():平均数
- sum():求和
select 聚合函数(字段列表)from 表名
#null值不参与聚合函数计算
4.4 select分组查询(group by)
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]
where 和 having区别:
- 1.执行时机不同:where是分组之前执行,不满足where条件不参与分组;having是分组之后对结果进行过滤
- 2.判断条件不同:where不能对聚合函数进行判断,而having可以
注意:
- 1.执行顺序:where > 聚合函数 > having
- 2.分组之后,查询字段一般为聚合函数和分组字段,查询其他字段无任何意义
4.5 排序查询(order by)
select 字段列表 from 表名 order by 字段1 排序方式1 [字段2 排序方式2];
#排序方式:1.asc 升序(默认)2.desc 降序
注意:
- 排序查询支持多字段排序
- 多字段排序,当第一个字段相同时,才能根据第二个字段排序
4.6 分页查询(limit)
select 字段列表 from 表名 limit(起始索引,查询记录数)
注意:
- 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
- 分页查询是数据库的方言,不同的数据库有不同的实现,mysql中是limit
- 如果查询的是第一页数据,起始索引可以省略,直接写limit 10
五、DCL(数据控制语言)
5.1 查询用户
#MySQL数据库所有用户都存储在默认生成的数据库mysql中的user表
use mysql;
select * from user;
5.2 创建用户
create user '用户名' @'主机名' identified by '密码';
#只能在本机访问数据库主机名为:localhost;可以在任意主机访问数据库主机名为:%(通配符)
5.3 删除用户
drop user '用户名' @'主机名'
注意:主机名可以用%通配,这类SQL开发人员使用较少,主要是数据库管理员使用。
5.4 修改用户密码
alter user '用户名' @'主机名' identified with mysql_native_password by '新密码';
5.5 权限控制
MySQL定义多种权限:
- 所有权限:all,all privileges
- 查询,插入,修改,删除数据,修改表,删除表/数据库/视图,创建数据库/表:select,insert,update,delete,alter,drop,create
#查询权限
show grants for '用户名' @'主机名'
#授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名'
#撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名' @'主机名'
SQL基础语法
https://elevenm.top//archives/sqlji-chu-yu-fa