✨前言✨
文章目录
数据库约束的类型
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 右外连接
此时查询出来的我们就是以右边的表为主,集合形式也就是如下: