0
点赞
收藏
分享

微信扫一扫

MySQL数据库的约束+进阶版新增与查询

蛇发女妖 2022-03-21 阅读 57

✨前言✨

文章目录

数据库约束的类型

NOT NULL型

在这里插入图片描述
下面插入数据:

在这里插入图片描述

UNIQUE 型

在这里插入图片描述
测试用例:
在这里插入图片描述

DEFAULT:默认值约束

在这里插入图片描述
下面设置默认值:
在这里插入图片描述

PRIMARY KEY:主键约束

在这里插入图片描述

下面我们在深入的了解一下,自增主键,这个一般适用于序号的增加
在这里插入图片描述
测试用例:
在这里插入图片描述

FOREIGN KEY:外键约束

在这里插入图片描述

在这里插入图片描述

create table student(id int primary key auto_increment,name varchar(20),classid int ,foreign key (classid) references class(id));

在这里插入图片描述
注意:
1 外键约束是两张表之间的关联,所以子表中的记录(classid)要在父表中存在(id)
2 对子表插入(修改),其范围都必须在父表之内(本例中,班级表中的id总共有3个,那么在给子表classid输入值的时候,只能在1到3之间)
3 对于父表,如果子表引用了其中的属性(id),那就不可以删除和更改,除非子表是没有对那个属性引用(如果父表中现在有个id为4的,子表没有引用这个id),那么才可以操作!

外键约束的工作原理

新增操作

先创建如下的三个表:
在这里插入图片描述
开始测试:
在这里插入图片描述

聚合查询

聚合函数

关于聚合查询是不同于我们之前学过的增删查改正对于列而言,这里是针对于行与行的运算

以count为例:
在这里插入图片描述
表示chinese数据有7行
sum函数:
在这里插入图片描述
这里的聚合函数搭配了条件语句,计算总分但是是语文成绩大于70分的人的总分

group by子句

测试用例:

create table display(
id int primary key auto_increment,
name varchar(20) not null,
role varchar(20) not null,
salary numeric(11,2)
);
insert into display(name, role, salary) values
('张三','服务员', 1000.20),
('李四','游戏陪玩', 2000.99),
('孙悟空','游戏角色', 999.11),
('猪八戒','游戏角色', 333.5),
('小乔','游戏角色', 700.33),
('王五','董事长', 12000.66);

在这里插入图片描述

结合聚合函数对group by进行使用

在这里插入图片描述

having使用

在这里插入图片描述
在这里插入图片描述
与where区别

联合查询(多表查询)

笛卡尔积

在这里插入图片描述

多表查询(内连接)

示例导入

drop table if exists classes;
drop table if exists student;
drop table if exists course;
drop table if exists score;

create table classes (id int primary key auto_increment, name varchar(20), `desc` varchar(100));

create table student (id int primary key auto_increment, sn varchar(20),  name varchar(20), qq_mail varchar(20) ,
        classes_id int);

create table course(id int primary key auto_increment, name varchar(20));

create table score(score decimal(3, 1), student_id int, course_id int);

insert into classes(name, `desc`) values 
('计算机系2019级1班', '学习了计算机原理、C和Java语言、数据结构和算法'),
('中文系2019级3班','学习了中国传统文学'),
('自动化2019级5班','学习了机械自动化');

insert into student(sn, name, qq_mail, classes_id) values
('09982','如来','rulai@qq.com',1),
('00835','孙悟空',null,1),
('00391','唐僧',null,1),
('00031','猪八戒','bajie@qq.com',1),
('00054','沙和尚',null,1),
('51234','牛魔王','niumowang@qq.com',2),
('83223','铁扇公主',null,2),
('09527','白龙马','bailongma@qq.com',2);

insert into course(name) values
('Java'),('中国传统文化'),('计算机原理'),('语文'),('高阶数学'),('英文');

insert into score(score, student_id, course_id) values
-- 如来
(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),
-- 孙悟空
(60, 2, 1),(59.5, 2, 5),
-- 唐僧
(33, 3, 1),(68, 3, 3),(99, 3, 5),
-- 猪八戒
(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),
-- 沙和尚
(81, 5, 1),(37, 5, 5),
-- 牛魔王
(56, 6, 2),(43, 6, 4),(79, 6, 6),
-- 铁扇公主
(80, 7, 2),(92, 7, 6);

进入SQL中查询四张表
学生表:
在这里插入图片描述
班级表:
在这里插入图片描述
分数表:
在这里插入图片描述
课程表:
在这里插入图片描述

查询

语法

一 查询孙悟空同学的成绩

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
查询思路:

二 查询所有同学的总成绩

这个步骤就是在第一个步骤增加聚合查询
在这里插入图片描述
我们在进行聚合查询,进行分组求和
在这里插入图片描述
三 查询所有同学的成绩和课程以及个人信息

在这里插入图片描述

在这里插入图片描述
最终查询:

在这里插入图片描述

多表查询(外连接 join on关键字)

连接示例:

在这里插入图片描述

join on 内连接

在这里插入图片描述

所以可以看出,内连接其实就是两个表的交集
在这里插入图片描述

join on 左外连接

在这里插入图片描述
此时我们查询的内容就以左边这张表为主,把左边这张表的内容要全部查出
在这里插入图片描述

join on 右外连接

在这里插入图片描述

此时查询出来的我们就是以右边的表为主,集合形式也就是如下:
在这里插入图片描述

总结

举报

相关推荐

0 条评论