定义:
sql语句其实就是对数据库进行一系列操作的语言,全名为结构化查询语言。
通用语法及分类
DDL(数据定义语言)
定义:数据定义语言,用来定义数据库对象(数据库、表、字段)。
数据库操作
查询所有数据库:
SHOW DATABASES;
查询当前数据库:
SELECT DATABASE();
创建数据库:
CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [ COLLATE 排序规则];
删除数据库:
DROP DATABASE [ IF EXISTS] 数据库名;
使用数据库:
USE 数据库名;
注意事项:
- utf8编码可能占2个字节、3个字节、4个字节的字符,但mysql的utf8编码最多支持3字节的数据,而移动端的emoji表情数据是4个字节,无法存储,utf8mb4字符集可以解决这个问题。
表操作
查询当前数据库所有的表:
SHOW TAVLES;
查询表结构:
DESC 表明;
查询指定表的建表语句:
SHOW CREATE TABLE 表名;
创建表:
CREATE TABLE 表名(字段1 字段1类型 [COMMENT 字段1注释],字段2 字段2类型 [COMMENT 字段2注释],字段3 字段3类型 [COMMENT 字段3注释],...字段n 字段n类型 [COMMENT 字段n注释])[ COMMENT 表注释 ];
注意事项:
- 最后一个字段后面没有逗号。
修改表名:
ALTER TABLE 表名 RENAME TO 新表名;
删除表:
DROP TABLE [IF EXISTS] 表名;
删除表,并重新创建该表:
TRUNCATE TABLE 表名;
添加字段:
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
修改字段数据类型:
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
删除字段:
ALTER TABLE 表名 DROP 字段名;
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 条件 ];
DQL(数据查询语言)
定义:数据查询语言,用来查询数据库中表的记录。
语法:
SELECT
字段列表
FROM
表名字段
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后的条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
基础查询
查询多个字段 :
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名;
注意事项:
- 最后一个字段后不需要再加逗号
设置别名:
SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;
去除重复记录:
SELECT DISTINCT 字段列表 FROM 表名;
转义:
SELECT * FROM 表名 WHERE name LIKE '/_张三' ESCAPE '/'
条件查询
语法:
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件:

注意事项:
- between...add...包含最小值和最大值
聚合查询(聚合函数)
常见聚合函数:

语法:
SELECT 聚合函数(字段列表) FROM 表名;
分组查询:
语法:
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ];
where和having的区别:
- 执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。
注意事项:
- 执行顺序:where > 聚合函数 > having
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
排序查询
语法:
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
排序方式:
- ASC: 升序(默认)
- DESC: 降序
注意事项:
- 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
分页查询
语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
注意事项:
- 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
- 分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT
- 如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10
DQL执行顺序:
FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
综合案例:
# 查询年龄为20,21,22,23岁的员工信息
select * from emp where gender='女' and age in(20,21,22,23);
# 查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工
select * from emp where gender='男' and age between 20 and 40 and name like '___';
# 统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
select gender,count(*) from emp where age<60 group by gender;
# 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
select name,age from emp where age <= 35 order by age asc,entrydate desc;
# 查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序
本文详细介绍了SQL语言的基础操作,包括数据定义语言DDL(如创建、修改和删除数据库及表)、数据操作语言DML(添加、修改和删除数据)以及数据查询语言DQL(查询、排序和分页)。涵盖了创建表、修改表结构、基本和聚合查询,以及示例应用场景。
1648

被折叠的 条评论
为什么被折叠?



