DDL:
- DDL(Data Definition Language)数据定义语言
- 用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
DML语句操作 | 关键字 |
---|---|
添加 | INSERT INTO 表名 (字段名) VALUES (值); |
修改 | UPDATE 表名 SET 字段名=新的值; |
删除 | DELETE FROM 表名; |
查询 | SELECT * FROM 表名; |
含义 | SQL语句 |
---|---|
查询所有的数据库 | SHOW DATABASES; |
查询当前正在使用的数据库 | SELECT DATABASE(); |
使用数据库 | USE 数据库名 ; |
查询某个数据库的定义信息 | SHOW CREATE DATABASE 数据库名 ; |
创建数据库 | CREATE DATABASE 数据库名 ; |
判断是否存在并创建数据库 | CREATE DATABASE IF NOT EXISTS 数据库名 ; |
创建数据库并指定字符集(编码表) | CREATE DATABASE 数据库名 DEFAULT CHARACTER SET 编码 ; |
判断数据库不存在再创建数据库并指定字符集 | CREATE DATABASE IF NOT EXISTS 数据库名 CHARACTER SET 编码; |
修改数据库字符集 | ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 新字符集 ; |
删除数据库 | DROP DATABASE 数据库名 ; |
如果数据库存在再删除数据库 | DROP DATABASE IF EXISTS 数据库名 ; |
演示:
-- 查询所有的数据库
SHOW DATABASES;-- 查询当前正在使用的数据库
SELECT DATABASE();-- 使用数据库
USE db1;-- 查询某个数据库的定义信息
SHOW CREATE DATABASE db1;-- 创建数据库
CREATE DATABASE db2;-- 判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS db2;-- -- 创建数据库并指定字符集(不指定的话默认的是UTF-8)
CREATE DATABASE db4 CHARACTER SET utf8;-- 判断数据库不存在再创建数据库并指定字符集
CREATE DATABASE IF NOT EXISTS db3 CHARACTER SET utf8;-- 修改数据库字符集
ALTER DATABASE db1 CHARACTER SET utf8;-- 删除数据库
DROP DATABASE db3;-- 如果数据库存在再删除数据库
DROP DATABASE IF EXISTS db3;
含义 | SQL语句 |
---|---|
查看数据库中的所有的表 | SHOW TABLES; |
查看表结构 | DESC 表名 ; |
查看创建表的SQL语句 | SHOW CREATE TABLE 表名 ; |
查看数据表信息 | SHOW TABLE STATUS FROM 数据库 LIKE 表名 ; |
创建表 | CREATE TABLE 表名 (列名 数据类型 约束 ,列名 数据类型 约束 ); |
快速创建一个表结构相同的表 | CREATE TABLE 表名 LIKE 其他表 ; |
直接删除表 | DROP TABLE 表名 ; |
判断表是否存在并删除表 | DROP TABLE IF EXISTS 表名 ; |
添加表一列 | ALTER TABLE 表名 ADD 字段名 字段类型 ; |
修改列类型 | ALTER TABLE 表名 MODIFY 字段名 新类型 ; |
修改列名 | ALTER TABLE 表名 CHANGE 老字段名 新字段名 类型 ; |
删除列 | ALTER TABLE 表名 DROP 字段名 ; |
修改表名 | RENAME TABLE 表名 TO 新表名 ; |
修改表名 | ALTER TABLE 表名 RENAME TO 新表名 ; |
修改表的字符集 | ALTER TABLE 表名 DEFAULT CHARACTER SET 新字符集 ; |
演示:
-- 查询表
SHOW TABLES;-- 查询表结构
DESC student;-- 查看创建表的SQL语句
SHOW CREATE TABLE student;-- 查看数据表信息
SHOW TABLE STATUS FROM db1 LIKE 'student';-- 创建数据表
CREATE TABLE student2(
id INT,
name VARCHAR(20),
age TINYINT,
address VARCHAR(100)
);-- 判断是否存在并创建数据表
CREATE TABLE IF NOT EXISTS student2(
id INT,
name VARCHAR(20),
age TINYINT,
address VARCHAR(100)
);-- 快速创建一个表结构相同的表
CREATE TABLE student3 LIKE student;-- 显示表的相关信息
SHOW TABLE STATUS FROM db1 LIKE 'student';-- 删除数据表
DROP TABLE student2;-- 判断表是否存在并删除表
DROP TABLE IF EXISTS student2;-- 添加表中的列
ALTER TABLE student ADD Test VARCHAR(20);-- 修改列的类型
ALTER TABLE student MODIFY Test INT;-- 修改列名
ALTER TABLE student CHANGE Test Test2 VARCHAR(20);-- 删除列
ALTER TABLE student DROP Test2;-- 修改表名
RENAME TABLE student TO student2;-- 修改表的字符集
ALTER TABLE student2 DEFAULT CHARACTER SET utf8;
DML:
- DML(Data Manipulation Language)数据操作语言
- 用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
含义 | SQL语句 |
---|---|
给全部列添加数据 | INSERT INTO表名 VALUES (值1, 值2, 值3, …); |
给指定列添加数据 | INSERT INTO 表名 (字段名1, 字段名2, 字段名3, …) VALUES (值1, 值2, 值3, …); |
不带条件修改数据 | UPDATE 表名 SET 字段名 =值 ; |
带条件修改数据 | UPDATE 表名 SET 字段名 =值 WHERE 字段名 =值 ; |
不带条件删除数据 | DELETE FROM 表名 ; |
带条件删除数据 | DELETE FROM 表名 WHERE 字段名 =值 ; |
truncate删除表记录 | TRUNCATE TABLE 表名 ; |
演示:
- 列名和值的数量以及数据类型要对应,除了数字类其他数据类型的数据都需要加单引号
- 修改语句中必须加条件,如果不加条件会把所有的数据都修改/删除
-- 默认给全部列添加数据 INSERT INTO表名 VALUES (值1, 值2, 值3,…);
INSERT INTO student VALUES (1, '李白', 100, '王者峡谷');-- 给指定列添加数据 INSERT INTO 表名(列名1,列名2...)VALUES(值1,值2...);
INSERT INTO student (id, name, age, address) VALUES (2, '韩信', 90, '王者峡谷');
INSERT INTO student (id, name) VALUES (3, '露娜');-- 批量添加数据 INSERT INTO 表名 VALUES (值1,值2,...),(值1,值2,...);
INSERT INTO student VALUES (4, '宫本', 80, '王者峡谷'), (5, '猴子', 70, '王者峡谷'), (6, '阿珂', 60, '王者峡谷');-- 不带条件修改数据 修改表中所有adress=王者峡谷的数据
UPDATE student SET address = '野区';-- 带条件修改数据 UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
UPDATE student SET age = 99 WHERE id = 1;
UPDATE student SET name = '韩信', age = 99, address = '王者峡谷' WHERE id = 2;-- 不带条件删除数据 删除表中所有数据
DELETE FROM student;-- 带条件删除数据 DELETE FROM 表名 WHERE条件;
DELETE FROM student WHERE name = '李白';
DELETE FROM student WHERE id = '2';
DQL:
- (Data Query Language)数据查询语言
- 用来查询数据库中表的记录(数据)。关键字:select, where 等
单表数据查询语法:
- SELECT 字段列表
- FROM 表名列表
- WHERE 条件列表
- GROUP BY 分组字段
- HAVING 分组后的过滤条件
- ORDER BY 排序
- LIMIT 分页
查询全部:
含义 | SQL语句 |
---|---|
查询全部表数据 | SELECT * FROM 表名 ; |
查询指定字段的表数据 | SELECT 列名1 ,列名2 ,…FROM 表名 ; |
去除重复查询 | SELECT DISTINCT 列名1 ,列名2 ,…FROM 表名 ; |
计算列的值(四则运算) | SELECT 列名1 运算符(+ — * /) 列名2 FROM 表名 ; |
查询时进行null的判断 | SELECT IFNULL 列名 (要替换的列 ,要替换的值 )FROM 表名 ; |
起别名查询 | SELECT 列名 AS 别名 FROM 表名 ; |
演示:
-- 查询全部表数据 SELECT * FROM 表名;
SELECT * FROM student;-- 查询指定字段的表数据 SELECT 列名1,列名2,...FROM 表名;
SELECT id, name, age FROM student;-- 去除重复查询 SELECT DISTINCT 列名1,列名2,...FROM 表名;
SELECT DISTINCT address FROM student;-- 计算列的值(四则运算) SELECT 列名1 运算符(+ — * /)列名2 FROM 表名;
SELECT age + 100 FROM student;
SELECT age + 100 FROM student WHERE id = 5;-- 查询时候进行null的判断,用SELECT ifnull 列名(要替换的列,要替换的值)FROM 表名;
SELECT name, IFNULL(age, 0) + 10 FROM student;-- 起别名查询 as可写可不写,不写要空格 SELECT 列名 AS 别名 FROM 表名;
SELECT age AS "年龄" FROM student;
条件查询:
查询语法:
SELECT 列名列表 FROM 表名 WHERE 条件;
符号 | 功能 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN … AND … | 在某个范围之内(都包含) |
IN(…) | 多选一 |
LIKE 占位符 | 模糊查询 _单个任意字符 %多个任意字符 |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
AND 或 && | 并且 |
OR 或 || | 或者 |
NOT 或 ! 非 | 不是 |
演示:
-- 查询语法 SELECT 列名列表 FROM 表名 WHERE 条件;
-- 查询年龄大于80的用户信息
SELECT * FROM student WHERE age > 80;-- 查询姓名是韩信的用户信息
SELECT * FROM student WHERE age > 80 AND name = '韩信';-- 查询年龄在60和80之间的用户信息
SELECT * FROM student WHERE age >= 80 AND age <= 100;
SELECT * FROM student WHERE age BETWEEN 80 AND 100;-- 查询id是1,2,3的用户
SELECT * FROM student WHERE id = 1 OR id = 2 OR id = 3;
SELECT * FROM student WHERE id IN (1, 2, 3);-- 查询姓名是null的用户
SELECT * FROM student WHERE name IS NULL;-- 查询姓名不是null的用户
SELECT * FROM student WHERE name IS NOT NULL;-- 模糊查询
-- 查询姓韩的用户 %:多个任意字符
SELECT * FROM student WHERE name LIKE '韩%';-- 查询姓名带虎的用户 _:一个任意字符
SELECT * FROM student WHERE name LIKE '_虎%';-- 查询名字是两个的用户
SELECT * FROM student WHERE name LIKE '__';-- 查询名字带猴的
SELECT * FROM student WHERE name LIKE '%猴%';
聚合函数查询:
聚合函数:将一列数据作为一个整体,进行纵向的计算
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
-- 计算总记录条数
SELECT COUNT(*) FROM student;-- 获取最大年龄
SELECT MAX(age) FROM student;-- 获取最小年龄
SELECT MIN(age) FROM student;-- 获取所有年龄和
SELECT SUM(age) FROM student;-- 获取地址为王者峡谷用户年龄和
SELECT SUM(age) FROM student WHERE address = '王者峡谷';-- 获取地址为王者峡谷用户平均年龄
SELECT AVG(age) FROM student WHERE address = '王者峡谷';
排序查询:
- 排序查询:多个排序条件,当前边的条件值一样时,才会判断第二条件
排序方式:
- ASC:升序
- DESC:降序
含义 | SQL语句 |
---|---|
排序查询 | SELECT 列名 FROM 表名 WHERE 条件 ORDER BY 列名1 排序方式1 ,列名2 排序方式2 ; |
-- 根据年龄升序排序
SELECT * FROM student ORDER BY age ASC;-- 根据年龄降序排序
SELECT * FROM student ORDER BY age DESC;-- 查询手机中的带信的用户,根据年龄升序排序
SELECT * FROM student WHERE name LIKE '%信%' ORDER BY age DESC;-- 按照年龄升序,如果年龄相同,按照id排序
SELECT * FROM student ORDER BY age ASC, id DESC;
排序查询:
含义 | SQL语句 |
---|---|
排序 | SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组列名 HAVING 分组后条件过滤 ORDER BY 排序列名 排序方式 |
演示:
-- 按照地址分组,获取每组的年龄和
SELECT address ,SUM(age) FROM student GROUP BY address;-- 年龄大于60的进行分组,按照地区分组,获取每组的年龄和
SELECT address, SUM(age) FROM student WHERE age > 60 GROUP BY address;-- 年龄大于60的进行分组,按照地区分组,获取每组的总年龄,只显示总年龄大于200的
SELECT address, SUM(age) AS getSum FROM student WHERE age > 60 GROUP BY address HAVING getSum > 200;-- 年龄大于60的进行分组,按照地区分组,获取每组的总年龄,只显示总年龄大于200的,并按照总年龄降序排序
SELECT address, SUM(age) AS getSum FROM student WHERE age > 60 GROUP BY address HAVING getSum > 200 ORDER BY getSum DESC;
分页查询:
数据多的时候使用,就像百度去搜东西一样分页显示
LIMIT 当前页数,每页显示的条数
含义 | SQL语句 |
---|---|
分页查询 | SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组列名 HAVING 分组后条件过滤 ORDER BY 排序列名 排序方式 LIMIT 开始索引 ,查询条数 ; |
语法 | LIMIT 当前页数 ,每页显示的条数 |
-- 当前页 = (当前页数-1) * 每页显示的条数
-- 第一页显示3条数据
SELECT * FROM student LIMIT 0,3;-- 第二页显示3条数据
SELECT * FROM student LIMIT 3,3;-- 第三页显示3条数据
SELECT * FROM student LIMIT 6,3;