SQL常用语句(DDL、DML、DQL)以及多表查询
一、DDL(Data Definition Language)
用来定义数据库对象:数据库、表、列等。
1、DDL操作数据库
①查询
SHOW DATABASES;
②创建
----a) 创建数据库
CREATE DATABASE 数据库名称;
----b) 创建数据库(判断,若不存在则创建)
CREATE DATABASE IF NOT EXISTS 数据库名称;
③删除
----a) 删除数据库
DROP DATABASE 数据库名称;
----b) 删除数据库(判断,若存在则删除)
DROP DATABASE IF EXISTS 数据库名称;
④使用数据库
----a) 查看当前使用的数据库
SELECT DATABASE();
----b) 使用数据库
USE 数据库名称;
2、DDL操作数据表
①查询
----a) 查看当前数据库下所有表名称
SHOW TABLES;
----b) 查询表结构
DESC 表名称;
②创建
CREATE TABLE 表名(
字段名1 数据类型1 [约束11 约束12 ...],
字段名2 数据类型2 [约束21 约束22 ...],
...
字段名n 数据类型n [约束n1 约束n2 ...]
);
SQL数据类型如图 SQL各约束如图
③修改
----a) 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
----b) 添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
----c) 修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
----d) 修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
----e) 删除列
ALTER TABLE 表名 DROP 列名;
④删除
----a) 删除表
DROP TABLE 表名;
----b) 删除表(判断,若存在则删除)
DROP TABLE IF EXISTS 表名;
⑤外键约束
外键用于让两个表的数据间建立链接,保证数据的一致性与完整性。
----a) 创建表时添加外键约束
CREATE TABLE 表名(
列名 数据类型
...
[CONSTRAINT 外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);
----b) 建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列名) REFERENCES 主表(主表列名);
----c) 删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
二、DML(Data Manipulation Language)
对表中数据进行增删改。
①添加数据
----a) 指定列添加数据
INSERT INTO 表名(列名1, 列名2, ...) VALUES(值1, 值2, ...);
----b) 全部列添加数据
INSERT INTO 表名 VALUES(值1, 值2, ...);
----c) 批量添加数据
# 以方式a批量添加
INSERT INTO 表名(列名1, 列名2, ...) VALUES(值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...)...;
# 以方式b批量添加
INSERT INTO 表名 VALUES(值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...)...;
②修改数据
UPDATE 表名 SET 列名1=值1, 列名2=值2,...[WHERE 条件];
③删除数据
DELETE FROM 表名 [WHERE 条件];
三、DQL(Data Query Language)
查询表中数据。
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定;
- 基础查询
- 条件查询(WHERE)
- 分组查询(GRUOP BY)
- 排序查询(ORDER BY)
- 分页查询(LIMIT)
①基础查询
----a) 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
----b) 起别名
# 字段名与别名间可使用 as 也可直接使用空格隔开
SELECT 字段1 as 别名1, 字段2 别名2, ... FROM 表名;
②条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
各条件符号功能如图所示
③排序查询
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1], 排序字段名2 [排序方式2] ...;
排序方式:
- ASC:升序排列(默认)
- DESC:降序排列
④分组查询
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名[HAVING 分组后条件过滤];
注意:分组之后,查询字段为聚合函数与分组字段,查询其他字段无意义
where 与 having 区别:
- 执行时机不同:where 是分组之前进行限定,不满足 where 条件,则不参与分组,而 having 是分组之后对结果进行过滤。
- 可判断条件不一样:where 不能对聚合函数进行判断,having 可以。
执行顺序: where > 聚合函数 > having
聚合函数
概念:将一列数据作为一个整体,进行纵向计算。
- 聚合函数语法
SELECT 聚合函数(列名) FROM 表名;
** null 值不参与所有聚合函数运算**
各聚合函数功能如图所示****
⑤分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数;
tips:
- 起始索引:从0开始
- 计算公式:起始索引 = (当前页码 - 1) * 每页显示条数
- limit 是Mysql 数据库方言,oracle 分页查询使用 rownumber,SQL Server 分页查询使用 top。
四、多表查询
- 笛卡尔积:取A,B集合所有组合情况
- 多表查询:从多张表中查询数据
①连接查询
----a) 内连接:相当于从A,B交集数据
# 隐式内连接
SELECT 字段列表 FROM 表1, 表2... WHERE 条件;
# 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
----b) 外连接:
··············左外连接:相当于查询 A 表所有数据和交集部分数据
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
··············右外连接:相当于查询 B 表所有数据和交集部分数据
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
②子查询
----a) 单行单列:作为条件值,使用=、!=、>、<等进行条件判断
SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);
----b) 多行单列:作为条件值,使用 in 关键字进行条件判断
SELECT 字段列表 FROM 表 WHERE 字段名 IN (子查询);
----c) 多行多列:作为虚拟表
SELECT 字段列表 FROM (子查询) WHERE 条件;