文章目录
一、DDL:数据定义语言
-- 操作数据库、表等 CREATE\ALTER\DROP\RENAME\TRUNCATE
1. DDL——操作数据库
创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名称;
查看数据库
SHOW DATABASES;
使用数据库
USE 数据库名称;
删除数据库
DROP DATABASE [IF EXISTS] 数据库名称;
2 DDL——操作表
- 创建(Create)
- 查询(Retrieve)
- 修改(Update)
- 删除(Delete)
2.1 查询表
查询表结构
DESC 表名称;
查询所有表名称
SHOW TABLES;
2.2 创建表
基本语法:
CREATE TABLE 表名 (
字段名1 数据类型1,
字段名2 数据类型2,
…
字段名n 数据类型n
);
示例:
--学号, 姓名,登录密码 varchar(20),性别,出生日期(datetime),家庭住址,邮箱
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(20) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
) CHARSET=utf8
注意点:
- 括号要使用英文的(),表的名称和字段尽量使用反引号``括起来
- 括号内的所有语句都要加英文的逗号,除了最后一句
- primary key,主键,一般一张表只会有一个,最好写在最后面!
- default、comment后面都是使用单引号!
2.3 修改表
修改表名
alter table 原表名 rename to 新表名;
新增一列
alter table 数据表名
add 新字段名 字段类型 [after|before 字段名];
新增多列
alter table 数据表名
add (新字段名1 字段类型1 ,字段名2 数据类型2,...);
删除列
alter table 表名 drop 列名;
修改列数据类型
alter table 表名 modify 列名 新数据类型;
修改列名和数据类型
alter table 表名 change 列名 新列名 数据类型;
2.4 删除表
删除表
DROP TABLE IF EXISTS 表名;
清空表
--完全清空一个数据表,表的结构和索引约束不会变!
TRUNCATE TABLE student;
二、DML:数据操作语言(重点)
对表中的数据进行增删改
- insert
- update
- delete
1. 添加数据
给全部列添加数据
INSERT INTO 表名 VALUES(值1,值2,…);
给指定列添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
批量添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
2. 修改数据
UPDATE 表名
SET 列名1=值1,列名2=值2,…
[WHERE 条件];
3. 删除数据
DELETE FROM 表名
[WHERE 条件];
三、DQL:数据查询语言(最重点)
1.查询语法
SELECT (必须有)(顺序5)
字段列表
FROM (必须有)(顺序1)
表名列表
WHERE (可选)(顺序2)
条件列表
GROUP BY (可选)(顺序3)
分组字段
HAVING (可选)(顺序4)
分组后条件
ORDER BY (可选)(顺序6)
排序字段
LIMIT (可选)(顺序7)
分页限定
2. 基础查询
去重
SELECT DISTINCT 字段列表
FROM 表名;
起别名
-- 使用as关键字 as可以省略
select 字段名 as 别名
from 表名;
-- 也可以使用CONCAT函数来设置别名
SELECT CONCAT('出生于:',address) AS 出生地 FROM student
3. 条件查询
条件解释
符号 | 功能 |
---|---|
<> 或 != | 不等于 |
between…and… | 在某个范围之内(两头都包含) |
in(…) | 多选一 |
is null | 是null |
is not null | 不是null |
like | 模糊查询 |
模糊查询
%
: 填充符,它能表示任何长度的字符串,字符串的长度可以为0
_
: 占位符,它只能代表单个字符,字符的长度不能为0
SQL | 解释 |
---|---|
LIKE ‘AB%’ | 返回以 “AB” 开始的任意字符串 |
LIKE ‘%AB’ | 返回以 “AB” 结束的任意字符串 |
LIKE ‘%abc%’ | 返回包含 “abc” 的任意字符串 |
LIKE ‘_bc’ | 返回以 “bc” 结束的三个字符的任意字符 |
4. 排序查询
SELECT 字段列表 FROM 表名
ORDER BY 字段名1 [ASC|DESC],字段名2 [ASC|DESC]...
在上述语法中,ASC表示升序,DESC表示降序。ORDER BY默认值是降序。
5. 分组查询
聚合函数
SELECT 聚合函数名(列名) FROM 表;
函数名称 | 作用 |
---|---|
MAX | 查询指定列的最大值 |
MIN | 查询指定列的最小值 |
COUNT | 统计查询结果的行数 |
SUM | 求和,返回指定列的总和 |
AVG | 求平均值,返回指定列数据的平均值 |
null值不参与所有聚合函数运算
分组查询
SELECT 字段列表
FROM 表名
[WHERE 分组前条件限定]
GROUP BY 分组字段名
[HAVING 分组后条件过滤];
注意:
- 分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
- where 和 having 区别
- 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤
- 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以
- 执行顺序: where > 聚合函数 > having
6. 分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
计算公式:起始索引 = (当前页码-1) * 每页显示的条数,注意 ,起始索引从0开始。