一、SQL通用语法
1、SQL语句可以单行或多行书写,以分号结尾。
2、注释:
(1)单行注释:
--注释内容
或
#注释内容
(2)多行注释:
/*注释内容*/
二、SQL分类
1、数据类型
(1)数值类型
注意:
decimal的使用:例如123.45,M(精度是5)、D(标度是2),所以是decimal(5,2) 。decimal(5,2)unsigned表示的范围0~999.99,signed表示的范围-999.99~999.99。
举例:
①年龄:大于0的整数,而且范围不会超过100太多
age TINYINT UNSIGNED
② 分数:大于0的小数,可能出现值的范围0.0~100.0
score DOUBLE(4,1) UNSIGNED
(2)字符串类型
注意:
定长字符串和变长字符串的区别:
①定长字符串,例如使用CHAR(10),如果只存储了一个字符,它会占用10个字符,剩余的空间也会使用空格填充。性能好。
②变长字符串,例如使用VARCHAR(10),如果只存储了一个字符,它就只会占用一个字符。它会根据你存储的字符,计算占用的空间是多少。需要计算,所以性能较差。
(3)日期时间类型
2、DDL-数据库操作
(1)查询
①查询所有数据库
show databases;
注意:
不要漏了“databases”的“s”
②查询当前数据库
select database();
③创建
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则]
④删除
drop database [if exists] 数据库名;
⑤ 使用
use 数据库名;
3、DDL-表操作
(1)查询
①查询当前数据库所有表
show tables;
②查询表结构
desc 表名;
③查询指定表的建表语句
show create table 表名;
(2)创建
create table 表名{
字段1 字段1类型 [COMMENT 字段1注释];
字段2 字段2类型 [COMMENT 字段2注释];
字段3 字段3类型 [COMMENT 字段3注释];
...
字段n 字段n类型 [COMMENT 字段n注释];
} [COMMENT 表注释];
注意:
此处“COMMENT”必须全部大写。(使用的MySQL版本为8.0.33,使用小写的comment不行,使用大写的COMMENT才可以。视频中使用小写的comment却没有问题。)
CREATE TABLE test_user (
id INT COMMENT '编号',
name VARCHAR(50) COMMENT '姓名',
age INT COMMENT '年龄',
gender VARCHAR(1) COMMENT '性别'
) COMMENT '用户表';
(3)修改 (alter)
①添加字段
alter table 表名 add 字段名 类型(长度) [COMMENT 注释] [约束];
②修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
③修改字段名和字段类型
alter table 表名 change 旧字段名 类型(长度) [COMMENT 注释] [约束];
④删除字段
alter table 表名 drop 字段名;
⑤修改表名
alter table 表名 rename to 新表名;
(4)删除(drop、truncate)
①删除表
drop table [if exists] 表名;
② 删除指定表,并重新创建该表(全新的表,没有数据)
truncate table 表名;
4、DML
(1)添加数据(insert)
①给指定字段添加数据
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,...),...;
(2)修改数据(update)
update 表名 set 字段名1 = 值1,字段名2 = 值2,...[where 条件];
注意:
修改语句如果没有条件,则会修改整张表的所有数据。
(3)删除数据(delete)
delete from 表名 [where 条件];
注意:
- 删除语句如果没有条件,则会修改整张表的所有数据。
- 删除语句不能删除某一个字段的值(可以使用update)
5、DQL
编写顺序
select
字段列表
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件列表
order by
排序字段列表
limit
分页参数
(1)基本查询
①查询多个字段
select 字段1,字段2,... from 表名
select * from 表名
②设置别名
select 字段1 [as 别名1],字段2 [as 别名2],... from 表名
③去除重复记录(distinct)
select distinct 字段列表 from 表名;
(2)条件查询(where)
select 字段1,字段2,... from 表名 where 条件列表;
- 无、不存在:is null
- 有、存在:is not null
- between 最小值 and 最大值
- 查询最后一位为X:like '%X'
(3)聚合函数(count、max、min、avg、sum)
常见聚合函数
select 聚合函数(字段列表) from 表名;
注意:
所有的聚合函数在计算过程中不计入“Null”值
(4)分组查询(group by)
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]
where与having区别:
- 执行时机不同:where是分组之前进行;having是分组之后。
- 判断条件不同:where不能使用聚合函数;having可以。
注意:
- 执行顺序:from > where > 聚合函数 > group by >having
![b站笔记-作者“追追追追忆”](https://i-blog.csdnimg.cn/blog_migrate/bea89eb8822240d704abb60591f5b4d5.png)
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
举例:
查询表emp中年龄小于45的员工,并根据工作地址(workaddress)分组,获取员工数量大于等于3的工作地址(workaddress)
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) >=3;
(5)排序查询(order by)
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;
排序方式:
- asc:升序(默认值)
- desc:降序
注意:
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
(6)分页查询(limit)
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:
- 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数
- 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10
(7)总结
6、DCL
用来管理数据库用户、控制数据库的访问权限
(1)管理用户
①查询用户
use mysql;
select * from user;
②创建用户
create user '用户名'@'主机名' identified by '密码';
主机名:
- localhost:当前主机
- %:任意主机
③修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
④删除用户
drop user '用户名'@'主机名';
(2)权限控制
①查询权限
show grants for '用户名'@'主机名';
②授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
常用权限列表:
③撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
注意:
- 多个权限之间使用逗号分隔
- 数据库名和表名都可以使用 * ,代表所有