【数据库-CRUD进阶-约束,联合查询,内连接(详解)】

news/2024/9/18 7:59:06/ 标签: 数据库, python, 开发语言

在这里插入图片描述

🌈个人主页:努力学编程’
个人推荐
c语言从初阶到进阶
JavaEE详解
数据结构
学好数据结构,刷题刻不容缓:点击一起刷题
🌙心灵鸡汤总有人要赢,为什么不能是我呢
在这里插入图片描述

🐒🐒🐒联合查询

我们上面所说的这些查询,都是在同一张表中进行操作的,但是在实际开发的时候,我们往往利用多张表进行操作的,这里我们称为联合查询,多表查询是对多张表数据的笛卡尔积.

在这里插入图片描述
注意: 关联查询可以对关联表使用别名

初始化测试数据:

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','黑旋风李逵','xuanfeng@qq.com',1),
('00835','菩提老祖',null,1),
('00391','白素贞',null,1),
('00031','许仙','xuxian@qq.com',1),
('00054','不想毕业',null,1),
('51234','好好说话','say@qq.com',2),
('83223','tellme',null,2),
('09527','老外学中文','foreigner@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),
-- tellme
(80, 7, 2),(92, 7, 6);

🙉🙉🙉内连接

语法:

select 字段 from1 别名1 [inner] join2 别名2 on 连接条件 and 其他条件;
select 字段 from1 别名1,2 别名2 where 连接条件 and 其他条件;

案例:

(1) 查询许仙同学的成绩:

select sco.score from student stu inner join score sco on stu.id=sco.student_id
and stu.name='许仙';
-- 或者
select sco.score from student stu, score sco where stu.id=sco.student_id and
stu.name='许仙';

(2) 查询所有同学的总成绩,及同学的个人信息:

-- 成绩表对学生表是多对1关系,查询总成绩是根据成绩表的同学id来进行分组的
SELECTstu.sn,stu.NAME,stu.qq_mail,sum( sco.score ) 
FROMstudent stuJOIN score sco ON stu.id = sco.student_id
GROUP BYsco.student_id;

(3) 查询所有同学的成绩,即同学的个人信息:

-- 查询出来的都是有成绩的同学,“老外学中文”同学 没有显示
select * from student stu join score sco on stu.id=sco.student_id;
-- 学生表、成绩表、课程表3张表关联查询
SELECTstu.id,stu.sn,stu.NAME,stu.qq_mail,sco.score,sco.course_id,cou.NAME
FROMstudent stuJOIN score sco ON stu.id = sco.student_idJOIN course cou ON sco.course_id = cou.id
ORDER BYstu.id;

🐒🐒🐒自连接

自连接是指在同一张表连接自身进行查询

案例:
显示所有"计算机原理"成绩"java"成绩高的成绩信息

-- 先查询“计算机原理”和“Java”课程的id
select id,name from course where name='Java' or name='计算机原理';
-- 再查询成绩表中,“计算机原理”成绩比“Java”成绩 好的信息
SELECTs1.* 
FROMscore s1,score s2 
WHEREs1.student_id = s2.student_idAND s1.score < s2.scoreAND s1.course_id = 1AND s2.course_id = 3;-- 也可以使用join on 语句来进行自连接查询
SELECTs1.* 
FROMscore s1JOIN score s2 ON s1.student_id = s2.student_idAND s1.score < s2.scoreAND s1.course_id = 1AND s2.course_id = 3;

以上我们只显示了成绩信息,如果我们还想显示学生的信息即学生的成绩,并且在一条语句中显示:


```sql
SELECTstu.*,s1.score Java,s2.score 计算机原理
FROMscore s1JOIN score s2 ON s1.student_id = s2.student_idJOIN student stu ON s1.student_id = stu.idJOIN course c1 ON s1.course_id = c1.idJOIN course c2 ON s2.course_id = c2.idAND s1.score < s2.scoreAND c1.NAME = 'Java'AND c2.NAME = '计算机原理';

== 🙉🙉🙉子查询==

子查询的含义是在其他的sql语句中进行查询操作(select操作),也叫做嵌套查询

  • 单行子查询: 返回一行记录的子查询
    查询"不想毕业"同学的同班同学:
select * from student where classes_id=(select classes_id from student where
name='不想毕业');```
- 多行子查询:返回多行记录的子查询
- ==查询"语文"或者"英文"课程的成绩信息==```sql
-- 使用IN
select * from score where course_id in (select id from course where
name='语文' or name='英文');
-- 使用 NOT IN
select * from score where course_id not in (select id from course where 
name!='语文' and name!='英文');

🙉🙉🙉合并查询

对于有时我们有时需要将多个查询结果合并的情景,我们引入了合并查询,即将多个查询的结果进行合并,这里我们使用集合操作符: union,union all 完成合并.

查询id小于3,或者名字为"英文"的课程

select * from course where id<3
union
select * from course where name='英文'
--或者直接使用 or 进行查询
select * from course where id<3 or name='英文'

注意这里我们使用 union 合并数据的时候,如果出现重复的数据,是会进行去重的

使用union all 查询数据,并不会合并重复的数据
查询id<3或者名字为"java"的课程

select * from course where id<3
union all
select * from course where name='java'

🙉🙉🙉CRUD进阶练习题

设计一个考勤系统,考勤系统,包含员工表,考勤记录表

create table emp(
id int primary key,
name varchar(20)
);
create table info(
id int primary key,
emp_id int,
info_date timestamp,
foreign key(emp_id) references emp(id)
);

学校宿舍管理系统,要求包含宿舍信息,学生信息,每日的宿舍查房记录。

create table dormitory(id int primary key,number varchar(20)
);
create table student(id int primary key,name varchar(20),dormitory_id int,foreign key (dormitory_id) references dormitory(id)
);
create table info(id int primary key,dormitory_id int,status bit,info_date timestamp,foreign key (dormitory_id) references dormitory(id)
);

有一张员工表emp,字段:姓名name,性别sex,部门depart,工资salary。查询以下数据:

1、查询男女员工的平均工资
2、查询各部门的总薪水
3、查询总薪水排名第二的部门
4、查询姓名重复的员工信息
5、查询各部门薪水大于10000的男性员工的平均薪水

1select sex,avg(salary) from emp group by sex;
说明:平均值使用聚合函数avg,并且按照性别男女分组,group by 性别字段2select depart,sum(salary) from emp group by depart;
说明:总薪水使用聚合函数sum取薪水字段求和,并且按照部门字段分组,group by 部门字段3select depart,sum(salary) from emp group by depart order by sum(salary) desc limit 1,1;
说明:order by语句先按照总薪水排序,之后取第二条数据,可以使用分页,每一页1条数据,第二页就是该结果4select name from emp group by name having count(name)>1;
说明:名字重复,说明同一个名字有多条数据,可以先按照名字分组,分组之后再过滤行数大于1的,就表示同一个名字至少有2条记录,重复了5select depart,avg(salary) from emp where salary>10000 and sex='男' group by depart;
说明:这里需要注意题目要求是查询薪水大于10000的男性员工,这个是在按部门分组前就过滤,在过滤后的结果集中再查询各个部门的平均薪水

http://www.ppmy.cn/news/1524769.html

相关文章

​招​银​网​络​​大​疆​​元​象​一​面​

1. 请尽可能详细地说明&#xff0c;XHR、axios和fetch这三者的区别是什么&#xff1f;axios和fetch的底层实现是什么&#xff1f;axios拦截器是什么&#xff1f;axios提供了哪些配置或功能&#xff0c;是fetch和XHR中没有的&#xff1f;你的回答中不要写出示例代码。 XHR、axi…

flink中startNewChain() 的详解

在 Apache Flink 中&#xff0c;startNewChain() 是一个与算子链&#xff08;operator chaining&#xff09;相关的方法。与 disableChaining() 类似&#xff0c;它允许开发者控制算子链的创建方式&#xff0c;但 startNewChain() 的作用是从当前算子开始创建一个新的算子链&am…

全面解析性能测试中的瓶颈分析与优化策略!

在软件开发的生命周期中&#xff0c;性能测试是确保应用程序在不同负载下稳定运行的关键步骤。性能瓶颈是导致系统性能下降的主要原因&#xff0c;及时发现并解决这些瓶颈&#xff0c;能够显著提升系统的响应速度和用户体验。本文将深入探讨性能测试中的瓶颈分析方法与优化策略…

【设计模式】设计模式的八大原则

设计模式的八个原则&#xff1a; 依赖倒置原则&#xff1a; 高层次的代码&#xff08;稳定&#xff09;不应该依赖低层次的代码&#xff08;变化&#xff09;抽象的代码不应该依赖具体的代码。 开放封闭原则&#xff1a;类模块应该开放扩展的&#xff0c;而其原先的代码尽量封…

盘点2024年大家都在用的录屏工具

现在录屏工具的使用范围越来越广了。我的深切体验是有很多人愿意为知识付费了&#xff0c;但是到线下培训的话很多人时间不一定能协调的来&#xff0c;这就导致涌现了不少的录屏课程。这次我们来探讨下要怎么录屏才能呈现更好的效果。 1.福昕录屏大师 链接达达&#xff1a;ww…

GPT撰写开题报告教程——课题确定及文献调研

撰写开题报告是一项复杂而重要的任务&#xff0c;需要涵盖从主题选择到文献综述、研究方法等多个环节。借助AI&#xff0c;如ChatGPT&#xff0c;可以显著提高这一过程的效率以及内容的质量。本文将详细探讨如何一步步利用ChatGPT撰写开题报告。 一、开题报告内容 一个清晰的…

Docker Swarm 管理

案例一概述及前置知识点 概述&#xff1a; 创鑫公司给云计算工程师提出新的要求&#xff0c;可将集群中所有Docker Engine整合进一个虚拟的资源池&#xff0c;通过执行命令与单一的主Swarm进行沟通&#xff0c;而不必分别和DockerEngine沟通。在灵活的调度策略下&#xff0c;…

MongoDB基本语法

MongoDB 基本语法详解 MongoDB 是一种面向文档的 NoSQL 数据库&#xff0c;支持灵活的数据结构和高扩展性&#xff0c;广泛应用于现代应用程序开发。MongoDB 采用 BSON&#xff08;Binary JSON&#xff09;格式存储数据&#xff0c;使得其能够存储复杂嵌套的结构。 1. 数据库…

大数据安全之Kerberos

Kerberos 是一个网络身份验证协议&#xff0c;旨在提供强身份验证&#xff0c;尤其是在开放网络环境中。它最早由麻省理工学院&#xff08;MIT&#xff09;开发&#xff0c;用于在不安全的网络环境中安全地验证用户身份。Kerberos 协议的设计旨在防止窃听、重放攻击和网络中的其…

2024年9月12日(k8s环境及测试 常用命令)

一、环境准备及测试 1、报错处理&#xff1a; kube-system calico-node-5wvln 0/1 Init:0/3 0 16h kube-system calico-node-d7xfb 0/1 Init:0/3 0 16h ku…

mysql学习教程,从入门到精通,SQL AND OR 运算符(12)

1、SQL AND & OR 运算符 在本教程中&#xff0c;您将学习如何在子句中使用ASELECT column1_name, column2_name, columnN_nameFROM table_nameWHERE condition1 AND condition2;ND&#xff06;OR运算符&#xff0c;WHERE以根据多个条件过滤记录。 1.1、根据条件选择记录 …

专注LabVIEW 做好一件事

在一次LabVIEW的系统改造项目中&#xff0c;遇到一个设备&#xff0c;操作手册居然还是基于DOS系统的。不难看出&#xff0c;这套设备虽然年代久远&#xff0c;但背后的技术积淀极为深厚。事实证明&#xff0c;这套系统在业内享有很高的认可度&#xff0c;由国外团队开发&#…

asio中的异步accept分析

简介 主要分析linux平台下的&#xff0c;即reactive_socket_service_base和reactive_socket_service 发起 由basic_socket_acceptor调用async_accept&#xff0c;前提是需要调用open创建socket添加到reactor中。其定义为 template <typename SocketService, typename Ac…

高级 ECharts 技巧:自定义图表主题与样式

ECharts 是一个强大的数据可视化库&#xff0c;提供了多种内置主题和样式&#xff0c;但你也可以根据项目的设计需求&#xff0c;自定义图表的主题与样式。本文将介绍如何使用 ECharts 自定义图表主题&#xff0c;以提升数据可视化的吸引力和一致性。 1. 什么是 ECharts 主题&…

开源免费的工贸一体行业ERP管理系统

引言 在当今数字化浪潮汹涌澎湃的时代&#xff0c;中小企业面临着前所未有的挑战与机遇。如何实现数字化转型发展&#xff0c;成为了众多中小企业主心头的大事。 据相关数据显示&#xff0c;目前我国中小企业数量已经超过了 4000 万户&#xff0c;然而成功实现数字化转型的比例…

B2064 斐波那契数列

题目描述 斐波那契数列是指这样的数列&#xff1a;数列的第一个和第二个数都为 11&#xff0c;接下来每个数都等于前面 22 个数之和。 给出一个正整数 aa&#xff0c;要求斐波那契数列中第 aa 个数是多少。 输入格式 第 11 行是测试数据的组数 nn&#xff0c;后面跟着 nn 行…

C++20 协程:异步编程的新纪元

C20 引入了协程&#xff08;coroutines&#xff09;&#xff0c;这是一种全新的异步编程模型&#xff0c;使得编写异步代码变得更加简洁和直观。本文将详细介绍 C20 协程的概念、功能演变及其在实际项目中的应用。通过本文&#xff0c;你将了解到协程的基本原理、语法和如何利用…

阿里巴巴1688中国站商品搜索API返回值深度解析与实战应用

在电商数据分析和市场调研中&#xff0c;阿里巴巴中国站&#xff08;现常指1688.com&#xff09;的商品搜索API扮演着至关重要的角色。这些API提供了丰富的商品信息&#xff0c;为商家和开发者在商品定价、营销策略制定、市场调研等方面提供了强有力的数据支持。本文将深入探讨…

有关WSL和docker的介绍

目录标题 如何利用在windows上配置docker实现linux和windows容器修改WSL默认安装&#xff08;也就是linux子系统&#xff09;目录到其他盘 如何利用在windows上配置docker实现linux和windows容器 wsl的基本命令&#xff1a;参考网页 docker入门到实践&#xff1a;参考网页 官方…

PDF扫描版文字识别OCR

PDF扫描版文字识别OCR 最近需要有对PDF扫描版进行文字可识别的需求&#xff0c;这里介绍一款工具挺好用的 这是一款开源的OCR工具 github地址 https://github.com/hiroi-sora/Umi-OCR 主要功能及特点 免费&#xff1a;本项目所有代码开源&#xff0c;完全免费。方便&#…