SQL语言
SQL的通用语法
- SQL语句可以单行或者多行书写,以分号结尾。
- SQL语句可以用空格,缩进增加可读性。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 注释:
- 单行注释:–注释内容 或者 # 注释内容**(MySQL的特有)**
- 多行注释**/* 注释内容*/**
SQL的分类
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库 |
DML | Data Mainpulation Language | 数据操作语言,对于数据库进行增删改查 |
DQL | Data Query Language | 数据查询语言,用来查询数据库里的数据 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户,控制权限 |
DDL-数据库操作
- 查询
- 查询所有数据库: SHOW DATABASES;
- 查询当前的数据库: SELECT DATABASE();
- 查询当前数据库的所有表:SHOW TABLES;
- 查询表结构:DESC 表名;
- 查询指定表的建表语句:SHOW CREATE TABLE 表名;
- 创建
- 数据库的创建:CREATE DATABASE [IF ONT EXISTS] 数据库名称 [DEFAULT CHARSET 字符集][COLLATE 排列规则]
- 表的创建:CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1的注解],
字段2 字段2类型[COMMENT 字段2的注解],
字段3 字段3类型[COMMENT 字段3的注解],
…
字段n 字段n类型[COMMENT 字段n的注解]
)[COMMENT 表的注释];
- 删除
- 删除数据库:DROP DATABASE [IF EXISTS] 数据库名称;
- 删除字段:ALTER TABLE 表名 DROP 字段名;
- 删除表名:DROP TABLE 表名;
- 删除指定的表,并且重新创建:TRUNCATE TABLE 表名;
- 使用
- USE 数据库名称;
- 修改
- 修改数据类型:ALTER TABLE 表名 MODIFY 字段名 新的数据类型;
- 修改字段名和字段类型:ALTER TABLE 表名 CHANGE 旧的 新的字段名 新的数据类型 注解;
- 修改表名:ALTER TABLE 表名RENAME TO 新的名称;
DML
- 添加数据
- 给指定的字段添加数据:INSERT INTO 表名()VALUES();
- 给全部字段添加数据:INSERT INTO 表名 VALUES ();
- 批量添加数据:INSERT INTO 表名()VALUES(),(),()
- INSERT INTO 表名 VALUES (),(),();
- 修改数据
- 修改指定的数据:UPDATE 表名 SET 字段名1 = 值1,…[WHERE 条件];
- 删除
- 删除数据:DELETE FROM 表名[WHERE 条件];
DQL
- 基本查询
- 查询多个字段:SELECT 字段1,字段2… FROM 表名;
- 设置别名:SELECT 字段1[AS 别名1]…FROM 表名;
- 去除重复记录:SELECT DISTINCT 字段列表FROM 表名;
- 条件查询:SELECT 字段列表 FROM 表名 WHERE 条件列表;
- 聚合函数:SELECT 聚合函数(字段列表) FROM 表名;
- 分组查询:SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分段字段名 [HAVING 分组后过滤条件];
- 排序排序:SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2,排序方式2;(ASC:升序,DECS:降序)
- 分页查询:SELECT 字段列表 FROM 表名 LIMIT 起始索引,每页的页数;
外键
语法
- 添加外键
- ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键名称) REFERENCE 主表(主表列名);
- 删除外键
- alter table emp drop foreign key fk_emp_dept_id;
- 删除/更新行为
行为 | 说明 |
---|---|
NO ACTION | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 RESTRICT 一致) 默认行为 |
CASCADE | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。 |
SET NULL | 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)。 |
SET DEFAULT | 父表有变更时,子表将外键列设置成一个默认的值 |
具体语法 | ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE; |
多表查询
内连接
- 隐式内连接
- SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 … ;
- 显示内连接
- SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 … ;
外连接
- 左外连接
- SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 … ;
- 右外链接
- SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 … ;
自连接
- SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 … ;
联合查询
- select * from emp where salary < 5000
- union [all]
- select * from emp where age > 50;
当要去重时,需要去掉all关键字
子查询
- 按照子查询不同的返回结果,分为
- 标量子查询(子查询结果为单个值)
- 列子查询(子查询结果为一列)
- 行子查询(子查询结果为一行)
- 表子查询(子查询结果为多行多列)
- 根据查询位置,分为
- WHERE之后
- FROM之后
- SELECT之后
标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。
常用的操作符:= <> > >= < <=
列子查询
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
常用的操作符:IN 、NOT IN 、 ANY 、SOME 、 ALL
操作符 | 描述 |
---|---|
IN | 在指定的集合范围之内,多选一 |
NOT IN | 不在指定的集合范围之内 |
ANY/SOME | 子查询返回列表中,有任意一个满足即可 |
ALL | 子查询返回列表的所有值都必须满足 |
行子查询
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:= 、<> 、IN 、NOT IN
表子查询
子查询返回的结果是多行多列,这种子查询称为表子查询。
常用的操作符:IN