数据库查询之内连接,左连接,右连接

article/2025/9/15 3:55:18

数据库查询之内连接,左连接,右连接

连接查询

当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回

等值连接查询:查询的结果为两个表匹配到的数据


左连接查询:查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null填充

 

 

右连接查询:查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null填充



等值连接

方式一

select * from 表1,表2 where 表1.列=表2.列

方式二(又称内连接)

select * from 表1 inner join 表2 on 表1.列=表2.列

例1:查询学生信息及学生的成绩

select *  from
    students stu,
    scores sc
where
    stu.studentNo = sc.studentNo

select * from
    students stu
inner join scores sc on stu.studentNo = sc.studentNo

例2:查询课程信息及课程的成绩

select * from
    courses cs,
    scores sc
where
    cs.courseNo = sc.courseNo

select * from
    courses cs
inner join scores sc on cs.courseNo = sc.courseNo

例3:查询学生信息及学生的课程对应的成绩

select * from
    students stu,
    courses cs,
    scores sc
where
    stu.studentNo = sc.studentno
    and cs.courseNo = sc.courseNo

select * from
    students stu
inner join scores sc on stu.studentNo = sc.studentNo
inner join courses cs on cs.courseNo = sc.courseNo

例4:查询王昭君的成绩,要求显示姓名、课程号、成绩

select
    stu.name,
    sc.courseNo,
    sc.score
from
    students stu,
    scores sc
where
    stu.studentNo = sc.studentNo
    and stu.name = '王昭君'

select
    stu.name,
    sc.courseNo,
    sc.score
from
    students stu
inner join scores sc on stu.studentNo = sc.studentNo
where
    stu.name = '王昭君'

例5:查询王昭君的数据库成绩,要求显示姓名、课程名、成绩

select
    stu.name,
    cs.name,
    sc.score
from
    students stu,
    scores sc,
    courses cs
where
    stu.studentNo = sc.studentNo
    and sc.courseNo = cs.courseNo
    and stu.name = '王昭君'
    and cs.name = '数据库'

select
    stu.name,
    cs.name,
    sc.score
from
    students stu
inner join scores sc on stu.studentNo = sc.studentNo
inner join courses cs on sc.courseNo = cs.courseNo
where
    stu.name = '王昭君' and cs.name = '数据库'

例6:查询所有学生的数据库成绩,要求显示姓名、课程名、成绩

select
    stu.name,
    cs.name,
    sc.score    
from
    students stu,
    scores sc,
    courses cs
where
    stu.studentNo = sc.studentNo
    and sc.courseNo = cs.courseNo
    and cs.name = '数据库'

select
    stu.name,
    cs.name,
    sc.score
from
    students stu
inner join scores sc on stu.studentNo = sc.studentNo
inner join courses cs on sc.courseNo = cs.courseNo
where
    cs.name = '数据库'

例7:查询男生中最高成绩,要求显示姓名、课程名、成绩

select
    stu.name,
    cs.name,
    sc.score
from
    students stu,
    scores sc,
    courses cs
where
    stu.studentNo = sc.studentNo
    and sc.courseNo = cs.courseNo
    and stu.sex = '男'
order by
    sc.score desc
limit 1

select
    stu.name,
    cs.name,
    sc.score
from
    students stu
inner join scores sc on stu.studentNo = sc.studentNo
inner join courses cs on sc.courseNo = cs.courseNo
where
    stu.sex = '男'
order by
    sc.score desc
limit 1

左连接

select * from 表1 left join 表2 on 表1.列=表2.列

例1:查询所有学生的成绩,包括没有成绩的学生

select * from
    students stu
left join scores sc on stu.studentNo = sc.studentNo

例2:查询所有学生的成绩,包括没有成绩的学生,需要显示课程名

select * from
    students stu
left join scores sc on stu.studentNo = sc.studentNo
left join courses cs on cs.courseNo = sc.courseNo

右连接

select * from 表1 right join 表2 on 表1.列=表2.列

例1:查询所有课程的成绩,包括没有成绩的课程

select * from
    scores sc
right join courses cs on cs.courseNo = sc.courseNo

例2:查询所有课程的成绩,包括没有成绩的课程

注意:第一次右连接是为了显示所有的cources数据,然后用左连接,可以把前面两张表看成合成了一张表,并且为左边的表,为了显示左边的courses数据,所以用 left join来保证courses所有数据可以显示

select * from
    scores sc
right join courses cs on cs.courseNo = sc.courseNo
left join students stu on stu.studentNo = sc.studentNo


http://chatgpt.dhexx.cn/article/mwI9o52L.shtml

相关文章

数据库中外连接的三种形式(左连接,右连接,全连接)

外连接 左外连接语法格式 Select a.班级信息,a.班级信息, b.姓名, b.联系方式 From班级信息 a left outer** (可省略)join 辅导员信息 b on a.辅导员b.辅导员编号 分析: 右连接 Select a.班级信息,a.班级信息, b.姓名, b.联系方式 From 班…

【Mysql数据库】终于搞懂了左连接、右连接、内连接、全连接

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想…

数据库的内连接、左连接和右连接

今天在CSDN上看到一个非常浅显易懂的左右连接和内连接的例子,简直秒啊,记录一下 具体演示前提: 创建两个表: 用两个表(a_table 和 b_table),关联字段 a_table.a_id 和 b_table.b_id 来演示一下…

MySQL数据库的内连接、左连接、右连接、全连接/联合查询

目录 1 概念 2 内连接 3 左连接 4 右连接 5 全连接/联合查询 1 概念 内连接 inner join:只返回两个表中连接字段相等的记录。左连接 left join:返回包括左表中的所有记录和右表中连接字段相等的记录。右表中没有则以null显示.右连接 right join&…

数据库中左连接和等值连接

数据库中左连接和等值连接 inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 例如: 我们先创建两个表&am…

数据库左连接、右连接、内连接、全连接笔记

原英文文章链接:https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins 准备 表A: -- auto-generated definition CREATE TABLE table_a (PK INT(10) NOT NULLPRIMARY KEY,Value VARCHAR(25) NULL )COMMENT 表A;表B&#xff1a…

Spring Boot整合Mybatis及事务处理

MyBatis为了方便与Spring Boot集成,专门提供了一个符合其规范的starter项目mybatis-spring-boot-starter。因此,我们只需在pom.xml添加相关依赖即可轻松集成。下面介绍了Spring Boot整合Mybatis的具体步骤以及事务使用(包含解决事务失效的坑&…

Mybatis-事务管理,事务配置

事务的特征– 1.原子性 事务是数据库的逻辑工作单位,事务中包括的所有操作,要么全做,要么全部做 2.一致性 事务执行的结果必须是使数据库从一个一致性状态飙到另一个一致性状态,一致性与原子性是密切相关 3.隔离性 一个事务的执行…

springboot+mybatis整合配置事务详解(^_^)

springboot集成mybatis有三种方式: 一、最简单的方式就是使用MyBatis官方提供的 mybatis-spring-boot-starter。 二、另一种使用spring-mybatis包的xml配置方式,这样需要自己写一些代码,但可以更灵活的控制mybatis的各项配置。 三、使用引…

第08篇:Mybatis事务处理

一、Jdk底层实现 Java JDK中提供了标准接口Connection,不同的数据库驱动负责具体的实现。后面无论是Spring还是Mybatis对事务的处理,无论怎么的封装,最终究其到底都是由Connection来提供的能力。 public interface Connection extends Wrapper, AutoCloseable { …

Mybatis中的事务提交

数据表不支持事务,mybatis会直接提交数据,即增删改不需要commit(MyISAM引擎不支持事务); 数据表支持事务,默认mybatis需要手动提交事务,也可以设置为自动提交,如下 (设…

Mybatis 的事务控制

事务:访问并可能更新数据库中各种数据项的一个程序执行单元(unit) 事务的四个特性:原子性、一致性、隔离性、持久性 不考虑隔离性的三个问题:丢失修改、不可重复读,读脏数据 解决办法:四种隔离级别文章目录 一、Mybati…

Mybatis深入之事务管理

Mybatis之事务管理 简介 Mybatis的事务管理分为两种JdbcTransaction,ManagedTransaction。其中JdbcTransaction仅仅是对数据库连接Connection的一个包装、内部管理数据库事务还是调用Connection的提交、回滚等事务操作方法。ManagedTransaction更直接、什么也没有…

事务-2 Spring与Mybatis事务实现原理

背景: 本文承接事务-1 事务隔离级别和Spring事务传播机制,是事务专题的第二篇;主题内容是Mybatis和Spring事务原理,结合源码和案例进行介绍。 本文主题内容为事务原理, 尤重Spring事务原理; 会结合源码讲解整体流程, 但不会拘限于…

什么是事务?Mysql事务怎么用?Mybatis怎么操作事务的?Spring呢?快进来看看

目录 一、计算机中的事务 1. 概念 2.事务的ACID特性 3.事务类型 1)手动事务 2)自动事务 4.为什么需要事务? 5.优点 二、MySQL事务 1.语法格式: 2.关闭自动提交,开启新事务 3.开启自动提交,关闭事务控制 三、Mybatis事务 Mybatis开关事务控…

SpringBoot Mybatis事物管理

本文主要讲述springboot提供的声明式的事务管理机制。 一、一些概念 声明式的事务管理是基于AOP的,在springboot中可以通过Transactional注解的方式获得支持,这种方式的优点是: 1)非侵入式,业务逻辑不受事务管理代码…

spring boot配置mybatis和事务管理

spring boot配置mybatis和事务管理 一、spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下&#xff1a; <!-- Spring Boot 启动父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>s…

《深入理解mybatis原理》 MyBatis事务管理机制

MyBatis作为Java语言的数据库框架&#xff0c;对数据库的事务管理是其非常重要的一个方面。本文将讲述MyBatis的事务管理的实现机制。首先介绍MyBatis的事务Transaction的接口设计以及其不同实现JdbcTransaction 和 ManagedTransaction&#xff1b;接着&#xff0c;从MyBatis的…

MyBatis事务管理

一、概述 事务管理对于企业应用来说是至关重要的&#xff0c;即使出现异常情况&#xff0c;它也可以保证数据的一致性。 Spring Framework对事务管理提供了一致的抽象&#xff0c;其特点如下&#xff1a; 为不同的事务API提供一致的编程模型&#xff0c;比如JTA(Java Transac…

深入浅出Mybatis系列(五)Mybatis事务篇

在学习Mysql事务开始,分为两步。一.先看下Mysql的事务级别都有什么,然后看Mysql的事务级别设置命令。及常见问题。二.JDK是如何处理数据库操作的呢? Mybatis是如何实现JDK定义的事务级别操作。 一.Mysql的事务级别及常见概念 MySQL事务隔离级别 事务隔离级别脏读不可重复读幻…