8.DML:
- 添加数据:insert
- 给制定的字段添加数据:insert into 表名(字段名1,字段名2,…)values(值1,值2,…);
- 值1对应字段名1,值2对应字段名2
- 给制定字段添加数据:insert into 表名 values(值1,值2,…);
- 值1对应字段名1,值2对应字段名2
- 与column的字段顺序一一对应
- 批量添加数据:insert into 表名(字段名1,字段名2,…)values(值1,值2,…),(值1,值2,…),(值1,值2,…);
- 注:1.插入数据时,指定的字段顺序需要与值的顺序一一对应
- 2.如果插入的是字符串或日期,应包含在单引号中
- 插入的数据大小应该在字段的规定范围内
- 给制定的字段添加数据:insert into 表名(字段名1,字段名2,…)values(值1,值2,…);
- 修改数据:update
- update 表名 set 字段名1=值1,字段名2=值2,… where 条件
- where条件:修改的是符合这个条件的记录。可有可无
- 没有where条件则修改全表
- update 表名 set 字段名1=值1,字段名2=值2,… where 条件
- 删除数据:delete
- delete from 表名 where 条件
- delete不能删除某一个字段的值(要删除用update变成none即可)
- delete from 表名 where 条件
9.DQL:关键:select【正常业务中查询远高于增删改】
- 语法(编写顺序):
-
select
字段列表 from 表名列表 where 列表条件 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数
-
基本查询:
- 查询多个字段:1.select 字段1,字段2,… from 表名;
-
- select * from 表名; 查询所有
- 能不用*就不用,想全部输出就把所有的字段名复制粘贴一次;(不直观/效率低)
- 设置别名(非必须):select 字段1 as 别名1,字段2 as 别名2… from 表名;(as可省略)
- 去除重复记录: select distinct 字段列表 from 表名;
-
条件查询:select 字段列表 from 表名 where 条件列表;
-
- 条件构建形式
eg:非空 用: is not null
注意:1.between后面跟着的是最小值;and后面跟着的是最大值
- in前要写字段名称,选项间用,连接
- like 后面的占位符用’’括住,各个符号间直接链接不用,分开_代表一个字符,%代表一个或多个
- 聚合函数 (作用于表中的某一列)
- select 聚合函数(字段列表)from 表名; (后面可用where条件做限定)
- 注:null不参与计算
- 注:null不参与计算
- select 聚合函数(字段列表)from 表名; (后面可用where条件做限定)
- 分组查询
- select 字段列表 from 表名 where 条件 group by 分组字段名 having 分组后过滤条件;
- where条件和having条件可省略
- where和having的不同:(1)where在分组前//having在分组后
- (2)判断条件:where不能对聚合函数进行判断,而having可以
- 执行顺序:where>聚合函数>having
- 分组之后,查询字段一般为聚合函数和分组字段,查询其他字段无任何意义
- select 字段列表 from 表名 where 条件 group by 分组字段名 having 分组后过滤条件;
- 排序查询
- select 字段列表 from 表名 order by 字段1 排序方式,字段2 排序方式2;(支持多字段排序)
- 排序方式:asc: 升序 (默认) desc : 降序
- 多字段排序:当第一个字段值相同时,才会根据第二个字段进行排序
- select 字段列表 from 表名 order by 字段1 排序方式,字段2 排序方式2;(支持多字段排序)
- 分页查询
- select 字段列表 from 表名 limit 起始索引,查询记录数;
- 注:(1)起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数;
- (2)分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是Limit
- (3)若查询的是第一页数据,起始索引可省略,直接简写成limit 10
- 执行顺序
- from—>where—>group by… having —>select—>order by—>limit
9.DCL: 管理数据库用户,控制数据库访问权限
- 管理用户
-
查询用户:use mysql
select * from user;
-
host:主机;同时定位主机名和用户名才能完整的定位一个用户名
- localhost:只能在本机访问不能远程访问
-
创建用户:create user ‘用户名’ @ ‘主机名’ identified by ‘密码’;
-
修改用户密码:alter user ‘用户名’@‘主机名’ identified with mysql_native_password by ‘新密码’;
-
删除用户:drop user ‘用户名’@’主机名’;
-
注:创建用户可以使用%通配
- 主要是数据库管理员使用
-
- 权限控制
- 查询权限:show grants for ‘用户名’@’主机名’;
- grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;
- revoke 权限列表 on 数据库名.表名 from ‘用户名’@’主机名’;
- 查询权限:show grants for ‘用户名’@’主机名’;
10.函数:一段可以直接被另一段程序调用的代码或程序
- 字符串函数:select 函数;
- 对于substring函数:索引从1开始
- 对于substring函数:索引从1开始
- 数值函数(函数可以做嵌套)
- 日期函数
- datediff: 第一个时间-第二个时间
- datediff: 第一个时间-第二个时间
- 流程函数:实现条件筛选,从而提高语句效率
- case函数中 when x1 then r1可以多个并列
11.约束
- 概述:作用于表中字段上的规则,用于限制存储在表中的数据
- 目的:保证表中数据的正确性,完整性和有效性
- 分类:注:作用于表中字段,可在创建表/修改表的时候添加约束
-
注:多个约束条件放在一起,中间不用加,直接 就行
- check(),括号里写要检查的条件
- default后面要跟设定的默认值(字符串用单引号括住)
-
外键约束:用来让两张表建立连接,从而保证数据的一致性和完整性
-
语法:
添加成功:表格上的字段名会出现蓝色🔑(內键为黄色🔑)
- 删除外键:alter table 表名 drop foreign key 外键名称;
- 删除/更新行为:
- 语法:alter table 表名 add constraint 外键名称 foreign (外键字段)references 主表名(主表字段名) on update cascade on delete cascade; bn
-
12.多表查询:
- 多表关系:项目开发时,在进行数据库表结构设计时,会根据业务需求和模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系:一对多(多对一),多对多,一对一
- 一对多(多对一):在多的一方建立外键,一个员工对应一个部门
- 多对多:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
- 一对一:多用于单表的拆分,将一张表的基础字段放在一张表中,其他详情放在另一张表中,以提升操作效率
- 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique)
- 多表查询:
- 笛卡尔积:数学中两个集合A,B所有组合情况(多表查询中需要消除无效的笛卡尔积)
- 消除无效笛卡尔积:where a=b;
- 分类:(1)连接查询
- 内连接:相当于查询A和B的交集部分数据
- 隐式内连接:select 字段列表 from 表1,表2 where 条件…;
- 显式内连接:select 字段列表 from 表1 [inner] join 表2 on 连接条件…;
- 注:为表起了别名后不能再用表原名搜索
- 外连接:左外连接:查询左表(表1)所有数据,以及两张表的交集部分数据
- select 字段列表 from 表1 left [outer] join 表2 on 条件
- 右外连接:查询右表(表2)所有数据,以及两张表交集部分数据
- select 字段列表 from 表1 right [outer] join 表2 on 条件;
- 自连接:当前表与自身的连接查询,自连接必须使用表别名
- select 字段列表 from 表A 别名A join 表A 别名B on 条件…;
- 可以是内连接,也可以是外连接
- 把一张表看成2张表,分别命名成A和B
- 联合查询:union,union all
- 把多次查询的结果合并起来,形成一个新的查询结果表
- select 字段列表 from 表A…
- union[All]
- select 字段列表 from 表B…;
- 去掉all→查重
- 多张表的列数必须保持一致,字段类型也要保持一致
- 内连接:相当于查询A和B的交集部分数据
- (2)子查询:在SQL语句中嵌套select语句,称为嵌套查询,又称子查询
-
select * from t1 where column1=(select column 1 from t2);
-
子查询外部的语句可以是insert/update/delet/select的任何一个
-
分类1(根据结果不同):
- 标量子查询:子查询结果为单个值(数字/字符串/日期/…)
- 常见操作符:= <> > >= <=
- 列子查询:子查询结果为一列(可以是多行)
- 行子查询:子查询结果为一行(可多列)
- 常用操作符:=,<>,in,not in
- 表子查询:子查询结果为多行多列
- 常用操作符:in
- 标量子查询:子查询结果为单个值(数字/字符串/日期/…)
-
分类2:(根据查询位置)
- where 之后
- from 之后
- select之 后
-
- 笛卡尔积:数学中两个集合A,B所有组合情况(多表查询中需要消除无效的笛卡尔积)