MySQL--CRUD
CRUD:即增加(create),查询(retrieve),更新(update),删除(delete)
注释:-- 加空格 加解释或 # 加解释
一.新增
作用:
在表中插入一条数据
语法:
insert [into] 表名 [(列名][,列名.....)] values (值,[值]);
使用:
二.查询
语法:
使用:
别名:
去重:distinct
排序:ORDER BY
注意:
当数据有NULL时且进行排序时,NULL比任意值都小
使用表达式排序
使用多个字段进行排序,优先级为书写顺序
条件查询:WHERE
其中会涉及到运算符的知识,大部分与Java中的运算符相同,但也增加了一些新的
新增比较运算符:
<=> : 代表等于,与普通的等于区别在于NULL安全,即当为NULL=NULL时返回的是NULL,当为NULL<=>NULL时为TRUE(1)
<> : 代表不等于,和普通的没区别
between a0 and a1 : 范围匹配,代表 [ a0 , a1] ,符合区间返回TRUE(1)
IN(option) : 代表操作数是否在在option这个集合中
IS NULL : 看是否为NULL
IS NOT NULL : 看是否不为NULL
LIKE : 模糊匹配,% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符
新增逻辑运算符:
注意:
分页查询:LIMIT
语法:
1. SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
代表从0条数据开始,往后面读取n条数据
2. SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
3. SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
代表从s条数据开始,往后面读取n条数据
补充:插入集合
三.更新
语法:
案例:
四.删除
语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
案例:
注意:
在更新数据或删除数据时得使用条件过滤,不然会更新或删除整个表
五.数据库约束
1.NOT NULL :NULL约束
指示某列不能插入空值
2.unique :唯一值约束
代表某列的数据在表中不能重复
3.default :默认约束
设置默认值
4.primary key :主键约束(重点)
NOT NULL和 unique 的结合体
注意:
一个表中不能有多个主键,因为系统不知道以哪个列为标准作为唯一值约束,但可以设置复合主键,只有符合主键的所有列的值都相等才能判定为相等
5.foreign:外键约束
语法:
foreign (字段) references 主表(字段)
作用:
可以保证数据的完整性和关系的正确性,因为有了主外键关系,子表的外键必须与主表的主键有联系,插入数据时如果没有联系就会报错
注意:
1. 删除表的时候,如果子表与主表已建立联系,这不能删除主表相关的值,得删除子表与之有联系的值才能删除主表的值
2. 在主外键联系的表中由于约束如果插入数据失败,自增的列还会增加1
六.表的设计
范式:数据库的范式即规则,在设计关系型数据库时,遵顼不同的规范要求,设计出合理的关系型数据库,主要学三大范式
1.第一范式1NF
定义:数据库的列不能再分,即不能是集合等非原子数据,不满足第一范式就不是关系型数据库
特点:表里的字段不可再分,不能被数据类型关键字修饰
反例:如学校不能被可以分为学校名
2.第二范式2NF
定义:在第一范式的基础下,不存在非主键字段对任意非候选键(主键或外键)的部分依赖
反例与正例及其缺点:
特点:当主键只有一列时,该表天然满足第二范式
3.第三范式
定义:在第二范式的基础上,消除了传递依赖
反例:
七.查询进阶
1.聚合查询
聚合函数
GROUP BY子句
语法:
HAVING关键字
GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用 HAVING
2.联合查询
联合查询即是联合多个表进行查询
原因:在设计表时为了消除部分依赖和传递性依赖,导致一条SQL语句不能查出完整的信息,得使用多条SQL语句
2.1内连接
语法:
联合查询的使用过程
1.取多张表的笛卡尔积(多张表的排列组合)
2.根据连接条件过滤数据
3.通过指定列精简表
练习:
2.2 外连接
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完 全显示我们就说是右外连接。
语法:
使用:
练习:
2.3 自连接
自连接是指在同一张表连接自身进行查询。
原因:在比较数据的大小时,只能一行数据列与列的比较,不能行与行的比较,这时通过自连接
将每俩行的数据放在一行之中,间接比较行与行的大小
练习:
2.4 子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询,分为单行子查询和多行子查询,运用了 [NO] IN 和 [NO] EXIST 俩关键字
[NO] IN 关键字
[NO] EXIST
八.临时表
这些查询出来的表都是临时表,可以和其他表联合查询或查询临时表中的类容
九.合并查询
在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION 和UNION ALL时,前后查询的结果集中,字段需要一致。但MySQL不会处理,得人为处理
union:合并表并自动去重
union all:合并表但不去重
使用好处:在查询单个表时可以or和 union ALL 可以达到相同的效果,但合并多个表时就不能用or只能用union
十.SQL的执行顺序
十一.视图
定义:它是基于⼀个或多个基本表或其他视图的查询结果集(重点),是一个虚拟表,但可以和普通表一样持续存在,除非drop 显示删除
语法:
使用:
不使用使用指定列:
使用指定列:
更新数据
无论修改那个数据,俩个表会相互影响