1.基本组成
DDL、DML、DQL、DCL
2.各部分组成的简介
(1)DDL(修改语句)
1.ALTER TABLE 表名 ADD 字段名 类型(长度)[comment];
eg:为名为emp的表格增加新字段,昵称为nickname
ALTER TABLE emp ADD nickname varchar(20) comment ' 昵称';
2.修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
eg:将名为emp 的表格中nickname 的数据类型改为 varchar(30)
ALTER TABLE emp MODIFY nickname varchar(30);
3.修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)[comment];
ALTER TABLE emp CHANGE nickname username varchar(30);
4.修改表名
ALTER TABLE 表名 RENAME TO 新表名;
5.删除字段和删除表
ALTER TABLE 表名 DROP 字段名;
DROP TABLE [IF EXISTS] 表名;
(2)DML(Data Monipulation Language表名数据的增、删、改)
1.增添
给指定字段添加数据:
INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,...);
给所有字段添加数据:
INSERT INTO 表名 VALUES (值1,值2,...);
批量添加数据:
INSERT INTO 表名 (字段名1,字段名2,...)VALUES (值1,值2,...),(值1,值2,...),...;
注:插入数据时要注意数据的顺序;
字符串、日期型数据应包含在引号中;
插入数据的大小应该在规定数据范围内。
2.删除
删除数据:
DELETE FROM 表名 [where 条件];
注:DELETE不能删除某个字段的值,可以使用UPDATE把字段的值设置为空(NULL)。
3.修改
修改数据:
UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,...[where 条件];
注:此处的where条件语句可有可无,没有表示修改整张表中的数据。
(3)DQL(Data Query Language数据查询语言,查询数据库中表的记录)
1.基本查询(select)
查询多个字段:
SELECT 字段1,字段2,字段3...FROM 表名;
查询所有字段:
SELECT * FROM 表名;
查询时设置别名:
SELECT 字段1[AS 别名1],字段2[AS 别名2]...FROM 表名;
查询时去除重复记录:
SELECT DISTINCT 字段列表 FROM 表名;
2.条件查询(where)
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件构成:数据加运算符,其中运算符包括比较运算符和逻辑运算符
比较运算符:
>, >=, <, <= , = , <> 或 != |
BETWEEN ... AND ...(在某个范围之内,包含边界) |
IN(...)在IN之后的列表中的值,多选一 |
LIKE 占位符(匹配单个字符,%匹配任意个字符) |
is NULL (是空) |
逻辑运算符:
AND 或 &&(且,和),OR 或 ||(或),NOT 或 !(非,不是)
3.聚合函数(count,max,min,avg,sum)
解释:将一列数据作为一个整体进行纵向运算
函数名 | 作用 |
count | 统计数量 |
max | 求最大值 |
min | 求最小值 |
avg | 求平均值 |
sum | 求和 |
注:null 值不参与运算
用法:SELECT 聚合函数(字段列表) FROM 表名;
eg: SELECT sum(grade) FROM student;//求student表中grade的和
SELECT count(id) FROM emp;//求emp 表中 id的个数
4.分组查询(group by)
SELECT 字段列表 FROM 表名 [where 条件] GROUP BY 分组 字段名 [HAVING 分组后过滤条件];
where和having 的区别:
(1)执行时机不同:where是分组前进行过滤,不满足where条件将不参与分组;having 是分组后对结果进行过滤;
(2)判断条件不同:where 不能对聚合函数进行判断,having 是可以的。
5.排序查询(order by)
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排列方式1,字段2 排列方式2;
其中的排列方式:ASC(升序) 和 DESC(降序),在没有指定排列方式的情况下默认排列方式是升序。
注:若是多字段排序,当第一个字段值相同时才会根据第二个字段排序。
eg:根据年龄对员工升序排序,若年龄相同再按照入职时间降序排序。
SELECT * FROM emp ORDER BY age ASC,entrydate DEAC;
6.分页查询(limit)
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
注:起始索引从0开始,计算方法:(查询页码 - 1)* 每页显示记录数;
分页查询数据库的方言,不同数据库有不同的实现,MySQL中运用LIMIT;
若查询的是第一页数据,起始索引可以省略,直接写成limit10;
eg:SELECT * FROM emp limit10;//查询第一页员工数据,每页展示10条数据;
上述语句可以写成 SELECT * FROM emp limit 0,10;
SELECT * FROM emp limit 10,10;//查询emp中第二页员工数据,(10 = (2 - 1)* 10)每页展示10条数据
补:DQL语句中的执行顺序
- FROM + 表名列表
- WHERE + 条件列表
- GROUP BY + 分组字段列表
- Having + 分组后的条件列表
- SELECT + 字段列表
- LIMIT + 分页参数
(4)DCL(Data Control Language数据控制语言,控制数据库的访问权限)
1.用户管理
查询用户:
USE mysql;--用户权限信息在mysql中,以MySQL为例
SELECT * FROM user;
创建用户:
CREATE USER '用户名'@'主机名' IDEDTIFIED BY '密码';
eg:CREATE USER 'root1'@'localhost' IDEDTIFIED BY '123456'; -- 创建名为root1的用户,密码为123456,只能在当前主机访问。(此时还未分配权限)
修改用户密码:
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
删除用户:
DROP USER '用户名' @ '主机名';
2.权限控制
查询权限:
SHOW GRANTS FOR '用户名'@'主机名';
授予权限:
GRANTS 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
撤销权限:
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
SQL 中常见小细节:
1.通配符:
“%” 或者 “_”,前者可以代表任意长度的字符串,后者代表任意单个字符。
2.取消执行的指令为 “\c”.
3.MySQL 中对大小写要求不严格,所以书写命令时的关键字大小写不做要求。
写在最后:本篇文章用于自己总结复习,数据来源哔哩哔哩黑马程序员。欢迎大家一同讨论或是指出错误。