目录
1.通用语法
- 以分号结尾
- 注释:单行注释 -- 注释内容 /*注释内容*/
- 不区分大小写
2.SQL分类
DDL:操作数据库、表等 create\drop\alter
DML:对表中的数据进行增删改 insert\update\delete
DQL:对表中的数据进行查询 select
DCL:对数据库进行权限控制 grant
3.DDL
3.1数据库相关
查询:
show databases;-- 查询所有的数据库
创建数据库:
create database 数据库名 (set character xxx);
create database if not exists 数据库名;
删除数据库:
drop database 数据库名;
drop database if exists 数据库名;
使用数据库:
use 数据库名;
查看当前使用的数据库:select database();
3.2表相关
进入数据库:use 数据库名;
查看当前数据库下所有表名称:show tables;
查询表结构:desc 表名;
创建
create table 表名(
字段名1 数据类型1,
... ...
-- 最后一个不加逗号
);
数据类型
double: double(总长度,小数点后保留的位数)
date:包含年月日 datetime:年月日时分秒
查询
修改
修改表的前提:表为空
修改表名:alter table 表名 rename to 新的表名;
添加一列:alter table 表名 add 列名 数据类型;
修改数据类型:alter table 表名 modify 列名 新数据类型;
修改列名和数据类型:alter table 表名 change 列名 新列明 新数据类型;
删除列:alter table 表名 drop 列名;
修改数据:update 表名 set 列名1=值1,列名2=值2,...[where 条件]
如果update语句没有加where条件,则会将表中所有的数据全部修改
删除
删除表:drop table 表名;
删除表时判断表是否存在:drop table if exists 表名;
delete from 表名 【where 条件】;
4.DML
添加
给指定列添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);-- 列名的列表可以省略
给全部列添加数据:
INSERT INTO 表名 VALUES(值1,值2,…);
批量添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
修改
UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件] ;
删除
DELETE FROM 表名 [WHERE 条件] ;
5.DQL
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定
查询
/*查询多个字段*/
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名; -- 查询所有数据
SELECT DISTINCT 字段列表 FROM 表名;-- 去除重复记录
AS: AS 也可以省略 -- 起别名
/*条件查询*/
SELECT 字段列表 FROM 表名 WHERE 条件列表;
在WHERE
或HAVING
(作为GROUP BY
一部分)使用IN
运算符将所选行限制为列表中的“ IN”项。
在某个范围之内(都包含):between...and...
多选一:in(...)
模糊查询:_单个任意字符 %多个任意字符 like
排序
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
ASC:升序排列(默认值)
DESC:降序排序
聚合函数
将一列数据作为一个整体,进行纵向计算
分类:
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
语法:
SELECT 聚合函数名(列名) FROM 表;
null值不参与所有聚合函数运算
分组查询
SELECT 字段列表
FROM 表名
[WHERE 分组前条件限定]
GROUP BY 分组字段名
[HAVING 分组后条件过滤];
分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where和having的区别:
执行时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组;而having是分组之后对结果进行过滤。
可判断的条件不一样:where不能对聚合函数进行判断,having可以
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
起始索引是从0开始,起始索引 = (当前页码 - 1) * 每页显示的条数