多表连接查询和子查询

一、连接查询

连接查询是SQL语言最强大的功能之一,它可以执行查询时动态的将表连接起来,然后从中查询数据。

1.1、连接两表的方法

在SQL中连接两表可以有两种方法,一种是无连接规则连接,另一种是有连接规则连接。

  1. 无连接规则连接

无连接规则连接后得到的结果是两个表中的每一行都互相连接,即结果为笛卡尔积(笛卡尔积(Cartesian Product)是数据库和集合论中的一个概念。它是指将两个集合中的每一个元素进行配对,形成一个新的集合。在数据库的上下文中,笛卡尔积是指在 SQL 查询中将两个表的所有可能的行组合在一起,生成所有可能的行对组合)。

SELECT *(或字段列表)

FROM  表名1,表名2;

FROM子句中的表名1和表名2是要连接的两个表的名称,用逗号(,)将其隔开;如果SELECT子句中使用星号(*),则查询结果中显示两个表的所有字段。

SELECT * FROM t1,t2;

运行结果显示了t1表的所有记录与t2表的所有记录进行了连接,即得到了笛卡尔积;但实际上,这并不是用户想要的结果,因为用户需要需要的是正确的连接,而并不是每行都连接起来,所以应该给连接设定连接规则。

多表无连接规则连接和两表无连接规则连接基本相同,只是在FROM子句中需要列出更多的表名,表名之间用逗号隔开,连接得到的结果同样也是笛卡尔积。

  1. 有连接规则连接

有连接规则连接其实就是在无连接规则的基础上,加上WHERE子句指定连接规则的连接方法。

SELECT *(或字段列表)

FROM  表名1,表名2

WHERE  连接规则;

  • 示例:

SELECT * FROM t1,t2 WHERE t1.职工号=t2.职工号;

其中,连接规则是:t1.职工号=t2.职工号

这种使用等于号组成的连接,实际上叫等值连接;只有两表有共同的字段时才可以使用等值连接,例如,t1和t2表有共同的字段—职工号,只有这样才可以使用等值连接的方法连接两表。

在上面的连接规则表达式中,字段名前加上了数据表的名称,并用英文中的句号(.)将其隔开,这是因为两个表中有相同的字段名,如果不加以修饰说明,DBMS将无法辩认是哪个表的字段;所以在多表连接时,如果使用表中相同名称的字段,则应当在其前面加上表名。

Tips:在多表连接时,即使不要求在表独有的字段前加表名,但建议还是加上表名;因为这样会很清楚地表示哪个字段属于哪个表,这将对以后的维护起到很好的作用。

1.2、使用笛卡尔积解决录入难题

  • 示例:使用stu_info表和stu_course表的笛卡尔积,生成一个必修课成绩表(bxk_score)的内容,要求是每个学生都应该选择所有的必修课。
  1. 如果SQL运行环境为MySQL或Oracle,则其查询语句如下

CREATE TABLE bxk_score AS SELECT stu_info.id as 学号,stu_info.name AS 姓名,stu_course.ID AS 课号,stu_course.course AS 课名

FROM stu_info,stu_course WHERE stu_course.type='必修' ORDER BY 学号,课号;

CREATE TABLE bxk_score AS这里的 AS 关键字表示“使用以下 SELECT 语句的结果作为新表的数据来源”。

  1. 如果SQL 运行环境为SQL Server,则其查询语句如下:

SELECT stu_info.id as 学号,stu_info.name AS 姓名,stu_course.ID AS 课号,stu_course.course AS 课名

INTO bxk_score

FROM stu_info,stu_course WHERE stu_course.type='必修' ORDER BY stu_info.id,stu_course.ID;

SELECT

    s.id AS 学号,

    s.name AS 姓名,

    c.ID AS 课号,

    c.course AS 课名

INTO bxk_score

FROM

    stu_info s,

    stu_course c

WHERE

    c.type = '必修'

ORDER BY

    s.id,

    c.ID;

  1. 执行顺序
  • FROM:首先执行 FROM 子句。这里使用了表别名 s 和 c,表示 stu_info 表和 stu_course 表。
  • WHERE:根据 WHERE 子句中的条件筛选出满足条件的行,即 stu_course 表中 type 列值为 '必修' 的行。
  • SELECT:选择 stu_info 表中的 id 列并命名为 学号,选择 stu_info 表中的 name 列并命名为 姓名,选择 stu_course 表中的 ID 列并命名为 课号,选择 stu_course 表中的 course 列并命名为 课名。
  • ORDER BY:对结果集按照 学号 和 课号 进行排序。
  • INTO(CREATE TABLE AS SELECT):最后,将查询结果存储到名为 bxk_score 的新表中。

本例使用了多数人觉得没用的求笛卡尔积的方法很好地解决了一个录入上的难题。

1.3、使用两表连接查询数据

数据库操作中,比起使用笛卡尔积,使用有连接规则的连接查询会更频繁一些。

示例:查询名叫“张三”的学生的所有课程的平时成绩和考试成绩

分析:stu_info表中有学生姓名,但没有成绩,而存储成绩的score表中有成绩,但没有姓名,不过两个表都有一个共享字段—学号,所以可以将这两个表连接起来进行查询:

SELECT s.id as 学号,s.name AS 姓名,c.c_id AS 课号,c.result2 AS 平时成绩,c.result1 AS 考试成绩

FROM stu_info s,score c WHERE s.name='张三' AND s.id=c.s_id

ORDER BY c.result1 DESC,c.result2 DESC;

其中WHERE子句中的条件表达式使用逻辑运算符AND,将查询条件(s.name=’张三’)和连接规则(s.id=c.s_id)整合为一体。

未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PbootCms微信小程序官网模版/企业官网/社交电商官网/网络工作室/软件公司官网

在数字化时代,企业网站已成为吸引潜在客户、提升企业形象、和扩大品牌影响力的必备工具。因此,一个优秀的企业网站模板显得尤为重要。 企业官网的内容框架通常都包含企业形象、产品或服务类型、信息展示等部分,设计师需要借助和企业形象契合…

初学者如何对大模型进行微调?

粗略地说,大模型训练有四个主要阶段:预训练、有监督微调、奖励建模、强化学习。 预训练消耗的时间占据了整个训练pipeline的99%,其他三个阶段是微调阶段,更多地遵循少量 GPU 和数小时或数天的路线。预训练对于算力和数据的要求非…

【vue3|第6期】如何正确地更新和替换响应式对象reactive

日期:2024年6月5日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xff…

区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测

区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测 目录 区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现QRCNN-GRU-…

eNSP学习——配置RIP的版本兼容、定时器和协议优先级

目录 主要命令 原理概述 实验内容 实验拓扑 实验目的 实验编址 实验步骤 1、基本配置 2、配置RIP协议的版本兼容 3、配置RIP的定时器 4.配置RIP协议优先级 需要eNSP各种配置命令的点击链接自取:华为eNSP各种设备配置命令大全PDF版…

二重,三重积分和曲面,曲线积分的关系和区别

这是我在学习完曲面曲线积分概念后容易和二重三重积分混淆而大概总结和区分了一下,如果有错误请大佬指出,多谢!!!

CopilotKit:开源 Copilot 框架,部署应用内 AI 代理,使用 Langchain 自动执行任何任务!

原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!) CopilotKit:开源 Copilot 框架,部署应用内 AI 代理,使用 Langchain 自动执行任何任务! &am…

WPS表格插件方方格子【凑数】功能:选出和等于固定数字的数

文章目录 后来发现可以下载方方格子插件,使用【凑数】功能https://ffcell.lanzouj.com/iwhfc1kjhayh【凑数】快速【凑数】 导师让沾发票,需要选出若干个数额的发票,使它们的和等于一个指定数。不知道怎么办了,查了一下&#xff0c…

SOA的发展历史

1.SOA的发展历程 回顾SOA发展历程,我们把其大致分为了三个阶段,下面将分别介绍每个阶段的重要标准和规范。 1.1.萌芽阶段 这一阶段以XML技术为标志,时间大致从20世纪90年代末到21世纪初。XML系W3C所建,源自流行的标准通用标记语…

Xcode 打包报错Command PhaseScriptExecution failed with a nonzero exit code

解决办法: 1、在Xcode项目中 Pods -> Targets Support Files -> Pods-项目名 -> Pods-项目名-frameworks 中(大约在第44行) 加上 -f 2、CocoaPods版本太旧了,可以尝试升级CocoaPods版本 使用sudo gem update cocoapods更新cocoapods,问题将在1.12.1版本已…

shell的编程方式

文章目录 变量俩种方式第一种方式第二种方式 取消变量数组创建数组获取数组元素的方式 read输出的方式限制输入的方式 流程控制方式for循环输出的方式第一种方式第二种方式while循环输出的方式select选择输出的方式 判断方式判断的四种方式第一种方式第二种方式第三种方式 算术…

Docker笔记-解决非交互式运行python时print不输出的问题

换句话来说就是在docker中如何不会python的print 只需要在启动时&#xff0c;不让python缓冲其输出。 关键命令如下&#xff1a;PYTHONUNBUFFERED1 如下&#xff1a; docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…

【软件项目管理篇】怎样平衡软件质量与时间成本范围的关系?

你会发现&#xff0c;在实际的软件项目中不乏这样的例子&#xff1a; 一个项目&#xff0c;正常估算&#xff0c;要三个月才能完成&#xff0c;但是老板或客户要压缩到一个月完成&#xff0c;而你不知道如何说服他们&#xff1b;项目开发一半&#xff0c;产品经理告诉你&#…

Python-GEE遥感云大数据分析、管理与可视化及多领域案例教程

原文链接&#xff1a;Python-GEE遥感云大数据分析、管理与可视化及多领域案例教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606139&idx3&sn2b98c8d5c99878ce78c8fade559bdae5&chksmfa821e9ccdf5978a7e63a1d514f2a643158a595fa75ac751c5ca47769…

socket网络编程——多进程、多线程处理并发

如下图所示, 当一个客户端与服务器建立连接以后,服务器端 accept()返回,进而准备循环接收客户端发过来的数据。 如果客户端暂时没发数据,服务端会在 recv()阻塞。此时,其他客户端向服务器发起连接后,由于服务器阻塞了,无法执行 accept()接受连接,也就是其他客户端发送…

MySQL存储引擎的区别和比较

MyISAM存储引擎 MyISAM基于ISAM存储引擎&#xff0c;并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度&#xff0c;但不支持事务。 MyISAM主要特性有&#xff1a; 1、大文件&#xff08;达到63位文件长度&#x…

信号:干扰类别及特征提取

目录 第一部分&#xff1a;干扰类别 1.压制干扰 1.1噪声调幅瞄准式干扰(单音干扰) 1.2噪声调频阻塞式干扰&#xff08;宽带噪声干扰&#xff09; 1.3噪声调频扫频式干扰&#xff08;线性调频&#xff09; 2.欺骗干扰 2.1距离欺骗干扰&#xff08;幅度调制干扰&#xff0…

前端_调试工具_Chrome Devtools

目录 一、上左侧菜单功能 1.选择功能 2.手机/电脑 显示切换功能 3.内存 4.元素 5.控制台 6.源代码/来源 7.网络 8.应用 9.性能 10.安全 11.Lighthouse 12.记录器 13.性能数据分析 二、上右侧菜单功能 1.警告 2.设置 3....更多功能 谷歌浏览器自带了调试工具C…

Google Guice超轻量级依赖注入容器

Google Guice是Goolge开源的一款超轻量级依赖注入容器&#xff0c;超轻量的特点主要体现在&#xff1a;可与其它依赖注入容器混合使用&#xff0c;例如和Spring/Spring Boot的IOC容器混合使用&#xff1b;不需要任何配置信息&#xff0c;只需要引入几个有限的依赖包即可以使用&…

无线和移动网络

背景 两个重要的挑战 无线&#xff1a;通过无线链路通信移动&#xff1a;需要网络处理移动&#xff08;不同变换所接入的网络&#xff09;用户 无线网络中的组件 无线主机&#xff08;无线并不总是意味着移动的&#xff09;基站&#xff08;base station 或者叫AP&#xff0…