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
作者
木十一
发布于
2025年03月20日
许可协议