一.SQL分类
二.DDL(数据定义语言)
1.DDL------数据库操作
① 查询
查询所有数据库 SHOW DATABASES
查询当前所处数据库 SELECT DATABASE()
② 创建
CREATE DATABASE [IF NOT EXISTS] 数据库名(通常以db结尾) [DEFAULT CHARSET 字符集] [COLLATE 排序规则]
③ 删除
DROP DATABASE [IF EXISTS] 数据库名
④ 使用
USE 数据库名
2.DDL------表操作------查询
① 查询当前数据库所有表
SHOW TABLES
前提:通过USE指令,使用该数据库
② 查询表结构
DESC 表名
③ 查询指定表的建表语句
SHOW CREATE TABLE 表名
3.DDL------表操作------创建
CREATE TABLE 表名(
列名1 数据类型 [约束] [默认值] [注释] ...,
列名2 数据类型 [约束] [默认值] [注释] ...,
列名3 数据类型 [约束] [默认值] [注释] ...
...
) [COMMENT 表注释]
注:[...]为可选参数,最后一个字段后面没有逗号。
4.DDL------表操作------数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
(1) 数值类型
① 整数
② 浮点
FLOAT、DOUBLE、DECIMAL(依赖于M(精度)和D(标度)的值)
DECIMAL(M,D)
M:精度,数据的总长度
D:标度,小数点后面的长度
(2) 字符串类型
CHAR(n) 长度为n的定长字符串,最大长度为255个字符
VARCHAR(n) 最大长度为n的可变字符串
(3) 日期时间类型
5.DDL------表操作------修改
(1) 添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [约束] [默认值] [注释]
(2) 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型
(3) 修改字段名和数据类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [约束] [注释]
(4) 删除字段
ALTER TABLE 表名 DROP 字段名
(5) 修改表名
ALTER TABLE 表名 RENAME TO 新字段名
6.DDL------表操作------删除
① 删除表
DROP TABLE [IF EXISTS] 表名
② 删除指定表,并重新创建该表
TRUNCATE TABLE 表名
三.DML(数据操作语言)
用来对数据库中的数据记录进行增删改操作。
- 添加数据(insert)
- 修改数据(updata)
- 删除数据(delete)
1.DML------添加数据
(1)给指定字段添加数据
INSERT INTO 表名(字段1,字段2,...) VALUES (值1,值2,...)
(2)给全部字段添加数据
INSERT INTO 表名 VALUES (值1,值2,...)
(3) 批量添加数据
INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,...)(值1,值2,...)
INSERT INTO 表名 VALUES (值1,值2,...)(值1,值2,...)
注:
- 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
- 若插入的数据是字符串或日期型数据应该包含在引号中。
- 插入数据的大小,应该在字段的规定的范围内。
2.DML------修改数据
UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[WHERE 条件]
注:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
eg: update student set name = 'gty' where id = 2
3.DML------删除数据
DELETE FROM 表名 [WHERE 条件]
注:
- DELETE的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
- DELETE语句不能删除某一个字段的值(可以使用UPDATE(将该字段的值置为NULL))
补充:
TRUNCATE TABLE 表名 ------- 清空整张表
四.DQL(数据查询语言)
用来查询数据库中的数据。
查询关键字:SELECT
- DQL------语法
- 基本查询
- 条件查询(WHERE)
- 聚合函数(count、max、min、avg、sum)
- 分组查询(GROUP BY)
- 排序查询(ORDER BY)
- 分页查询(LIMIT)
1.DQL------基本查询
(1) 查询多个字段
SELECT 字段1,字段2,字段3 ... FROM 表名
SELECT * FROM 表名
(2) 设置别名(增加可读性,不是必须的,设置别名时AS可以省略)
SELECT 字段1 AS 别名1,字段2 AS 别名2 ... FROM 表名
(3) 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名
eg : select distinct subject from student
2.DQL------条件查询
(1) 语法
SELECT 字段列表 FROM 表名 WHERE 条件列表
(2) 条件
eg: select * from student where name like '_ _' 查询名字为两个字的学生
select * from student where phoneNum like '%6' 查询手机号最后一位为6的学生
3.DQL------聚合函数
(1) 介绍
将一列数据作为一个整体,进行纵向计算。
(2) 常见聚合函数
(3) 语法
SELECT 聚合函数(字段列表) FROM 表名
注:NULL值不参与所有聚合函数运算
eg:① select count(*) from student / select count(id) from student 统计学生人数
② select avg(age) from student 计算学生的平均年龄
③ select max(age) from student 计算学生的最大年龄
④ select min(age) from student 计算学生的最小年龄
4.DQL------分组查询
(1) 语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组过滤条件]
(2) where与having的区别
① 执行时机不同:where是分组前进行过滤,不满足where条件,不参与分组;而having是分组后对结果进行过滤。
② 判断条件不同:where不能对聚合函数进行判断,而having可以。
注:
- 执行顺序:where > 聚合函数 > having
- 分组之后,查询的字段一般为聚合函数,查询其他字段无意义
eg: select gebder, count(*) from student group by gender
根据性别分组,统计男同学和女同学的数量
select gender, avg(age) from student group by gender
根据性别分组,统计男同学和女同学的平均年龄
select homeAddress, count(*) from student where age < 20 group by homeAddress having count(*) >= 3
查询年龄小于20的学生,并根据家庭地址分类,获取学生数量大于等于3的家庭地址
5.DQL------排序查询
(1) 语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方法2
(支持多字段排序)
(2) 排序方式
- ASC:升序(默认值)
- DESC:降序
注:
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 。
eg: select * from student order by age asc
根据年龄升序排序
select * from student order by age asc, intime desc
根据年龄升序排序,年龄相同,根据入学时间进行降序排序
6.DQL------分页查询
(1) 语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数
注:
- 起始索引从0开始,起始索引=(查询页码 - 1) * 每页显示记录数。
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10 。
eg: select * from student linit 0,10 查询第一页学生数据,展示10条数据
select * from student linit 10 ------>上一行的简写形式
- DQL------执行顺序
五.DCL(数据控制语言)
用来管理数据库用户,控制数据库的访问权限。
1.DCL------管理用户
(1) 查询用户
USE mysql
SELECT * FROM user
(2) 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'
(3) 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'
(4) 删除用户
DROP USER '用户名'@'主机名'
注:
- 主机名可以用%通配。
- 这类SQL开发人员操作的比较少,主要是DBA(DataBase ADministrator 数据库管理人员)使用。
2.DCL------权限控制
MySQL中定义了很多种权限,但是常用的就一下几种:
(1) 查询权限
SHOW GRANTS FOR '用户名'@'主机名'
(2) 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'
(3) 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名'
注:
- 多个权限之间,使用逗号分隔。
- 授权时,数据库名和表名可以使用 * 进行通配,代表所有。