一、处理函数
1.1 单行处理函数/数据处理函数
单行处理函数的特点:一个输入对应一个输出。和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)
常见单行处理函数
1、lower() 转换小写,将ename列所有名字转化为小写,(大写同理)
mysql> select lower(ename) from emp;
二、DDL基础操作
2.1 删除查询数据库
如果删除的数据库不存在会报错所以在后面加上一个判断条件if exists,就是如果存在就删除,不存在就不删除。
使用数据库后被使用的数据库会有加粗效果。
2.2 查询创建数据表
实例
2.3 修改和删除数据表(结构)
三、DML基础操作
3.1 新增表数据
实例
给全部列添加数据,表里面多少列,每组值也要对应且数据类型都要对应上。
3.2 修改和删除表数据
如下图如果不加红线条件将会把下面所有价格都变成3500.
四、DQL基本操作(详情见MySQL1)
4.1 DQL查询操作
4.1.1表数据的查询
示例
如果某一列数据为null,替换成0并参加运算。
4.1.2 聚合函数的查询
示例
输出结果为7,有七条记录。
4.1.3 分组查询
实例
按照品牌分组并获取每个品牌的名字以及总金额,输出结果为每个品牌的总金额。
下图having分组后条件过滤总金额>7000的,前面先给sum函数起别名getSum,后面再引用。
4.1.4 分页查询
示例
一共七条数据,显示出了前三条数据,因为横线第三页只有一个第七个数据所以就只显示一个。
五、约束
5.1 约束的概念
什么是约束?
对表中的数据进行限定,保证数据的正确性、有效性、完整性!
约束的分类
5.2 主键约束
5.2.1 主键约束的特点
主键约束默认包含非空和唯一两个功能。
- 一张表只能有一 个主键。
- 主键一般用于表中数据的唯一标识。
5.2.2 主键自增约束
加上自增约束auto-increment后,约束的主键id可以加上null作为值,且如果接下来加的都是null值,id可以1,2…一直自增,且当添加三个数据后删掉第三个又添加一个此时这个id为4.
5.2.3 唯一约束
age加上唯一约束后,添加两组数据的age都是23的话会报错。反之,如果表中,某列数据有重复同样不能添加唯一约束。
5.2.4 非空约束
添加数据时name的值张三不能改为null否则会报错,因为加了非空约束。
注意:如果本来有一列名字为null然后又添加了非空约束,此时并不会报错但是会警告,同时null一格变为空格。
5.3 外键约束
5.3.1 外键约束的概念
为什么要有外键约束?
当表与表之间的数据有相关联性的时候,如果没有相关的数据约束,则无法保证数据的准确性!像下图uid表示订单属于哪个用户的,1代表张三2代表李四,但是两个表没有外键约束所以没有关系
外键约束的作用
让表与表之间产生关联关系,从而保证数据的准确性!
5.3.2 操作外键
通过上操作创建有外键约束的两张表,uid的1和2分别代表用户表里的张三和李四。
因为李四有订单所以删除不了李四这个用户。
5.3.3 外键的级联更新和级联删除
什么是级联更新?
当我想把主表中的数据进行修改时,我期望从表中有关联的数据也会随之修改!(主表和从表概念如上节的用户表就为主表,订单表为从表),当主表中李四id更改为3时订单表的uid也变为3.
什么是级联删除?
当我想把主表中的数据进行删除时, 我期望从表中有关联的数据也会随之删除!即删除主表李四的个人信息时订单表中关于李四的订单也随之删除。
级联操作
5.4 多表操作
5.4.1 多表概念
说白了就是多张数据表,而表与表之间是可以有一定的关联关系,这种关联关系通过外键约束实现。
多表的分类
- 一对一
- 一对多
- 多对多.
一对一
适用场景
人和身份证。一个人只有一个身份证,一个身份证只能对应一个人。
建表原则
在任意一个表建立外键,关联另外一个表的主键。
一对多
适用场景
用户和订单。一个用户可以有多个订单。商品分类和商品。一个分类下可以有多个商品。
建表原则
在多的一方,建立外键约束,来关联一的一方主键。
多对多
适用场景
学生和课程。-个学生可以选择多个课程,一个课程也可以被多个学生选择。
建表原则
需要借助第三张中间表,中间表至少包含两个列。这两个列作为中间表的外键,分别关联两张表的主键。
下图意思是一号张三选了语文课程,和数学课程,二号李四选择了语文和数学。
示例
多对多示意图
5.5 多表查询
5.5.1 多表查询分类
多表查询分类
内连接查询
外连接查询
子查询
自关联查询
5.5.2 内连接查询
分为显式内连接和隐式内连接
用户表、订单表、分类表、商品表和一个中间表,他们的关系如上图所示。
内连接查询原理
内连接查询的是两张表有交集的部分数据(有主外键关联的数据)。用户表的4号赵六在订单表中没有相应的订单,而订单表中的七号也没有相应的用户,内连接查询就是查询交集的这部分,不包括赵六和七号订单。
示例(显式内连接)
关联条件就是,订单表的uid指向用户表的id所以条件就是他们相等。起别名后关联条件就能使用起的简短别名了。
示例(隐式内连接)
5.5.3 外连接查询
分为左外连接和右外连接。
左外连接查询原理
查询左表的全部数据,和左右两张表有交集部分的数据。例如上例子订单表和用户表,左表赵六没有相应的订单在右表中,但是也希望将赵六的信息搜索出来,以及两个表相互交集的地方。
赵六虽然没有订单,但是也被查询了出来。
右外连接查询原理
查询右表的全部数据,和左右两张表有交集部分的数据。例如上例子订单表和用户表,右表订单七没有相应的用户,但是也希望将七号订单查询出来,以及两张表相互交集的数据。
虽然七号订单没有所属的用户但是也被查询了出来。
5.5.4 子查询
情况1:查询结果是单行单列
执行顺序为先执行后面括号里的语句 然后再执行前面的语句,括号里语句执行结果为age=26,然后执行搜索年龄为26的姓名和年龄。
情况2:查询结果是多行单列
示例
第一句的括号1,2是第二局sql语句查询出来的,查询结果是多行单列的id结果,然后把这句替换掉第一句的1,2如第三句。
情况3:查询结果是多行多列
查询id>4订单信息,得到结果是一个表,以此为查询条件来查询所属用户信息。
5.5.5 自关联查询
自关联查询概念
在同一张表中数据有关联性, 我们可以把这张表当成多个表来查询。例如下表的mgr为上司,悟空、猪八戒、沙和尚、小白龙上司为唐僧,武松、李逵、林冲上司为宋江。
结果
查询结果
5.5.6 多表查询相关练习
练习1
分析查询的数据分别属于哪张表,然后再找出两张表的关联条件(查询条件),多表查询的查询条件一定要有两个表的关联条件。最后开始查询(内连接查询)。
练习2
练习3
因为要查询右表的全部信息和左右表交集信息,所以右外连接。