当前位置: 首页 > news >正文

多表查询---连接查询

若一个查询同时涉及两个以上的关系,则称之为连接查询。连接查询是关系数据库中最主要的查询,包括:交叉连接查询 、内连接查询 、外连接查询。

(一)交叉连接查询:又称广义笛卡儿积,是不带连接谓词的查询。

例:求学生表student和课程表course的广义笛卡儿积。

SELECT * FROM student,course;

-- 或

SELECT * FROM student CROSS JOIN course;

(二)内连接查询:内连接查询中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为: <表名1>[INNER] JOIN<表名2>ON<表名1>.<列名1><比较运算符><表名2>.<列名2>

  • 其中比较运算符主要有: =、<>、<、>、<=、>=。
  • 当连接运算符为“=”时,称为等值连接,使用其他运算符称为非等值连接。
  • 连接谓词中的列名称为连接字段。
  • 连接条件中的各连接字段类型必须是可比的,但不必是相同的。

a. 等值连接:当比较运算符为“=”时,称为等值连接,其一般格式为:

<表名1>[INNER] JOIN<表名2>ON<表名1>.<列名1>=<表名2>.<列名2>

连接条件也可以放在WHERE子句中,其格式为:

<表名1>.<列名1> =<表名2>.<列名2>

例:求学生以及其选修课程的情况。

-- 格式1: SELECT student.*,score.* FROM student JOIN score ON student.sno=score.sno;

-- 格式2: SELECT student.*,score.* FROM student,score WHERE student.sno=score.sno;

b. 自然连接:当进行连接的两个表中有同名列时,可以使用自然连接来完成,其一般格式为:

<表名1>NATURAL JOIN<表名2>

也可以使用格式: <表名1>JOIN<表名2>USING<字段>

注意:自然连接与其他连接的区别是去掉重复的列。

例:用自然连接完成:求学生以及其选修课程的情况。

-- 格式1: SELECT * FROM student NATURAL JOIN score ;

-- 格式2: SELECT * FROM student JOIN score USING(sno);

c. 自身连接:连接操作不仅可以在两个表之间进行,也可以是一个表与其自身进行连接,称为表的自身连接。当表进行自身连接时,为了区别两个表,必须给他们取不同的别名,表取别名的方式为: 表名 别名

进行自身连接时,由于所有属性名都是同名属性,因此必须使用别名前缀。

其一般格式为:

<表名> aJOIN<表名> bONa. <字段><较比运算符>b. <字段>

例:求年龄大于王燕的所有学生的姓名、专业名和出生日期。

SELECT b.sname,b.dept,b.birthday FROM student a JOIN student b ON a.birthday<b.birthday WHERE a.sname='王燕' ;

(三)外连接查询:

在通常的连接操作中,只有满足连接条件的记录才能作为结果输出,有些用户需要的信息可能在结果中就无法出现,可使用外连接解决这个问题,外连接的格式为:

<表名1> {LEFT|RIGHT|FULL} OUTER JOIN <表名2> ON 连接条件

  • LEFT 表示左边的表中所有记录都出现在结果中;
  • RIGHT表示右边的表中所有记录都出现在结果中;
  • FULL表示左右两边的表中所有记录都出现在结果中;
  • 注意:不符合连接条件的连接空记录。

(MySQL暂不支持全外连接)

例:查找未选修任何课程的学生。

SELECT * FROM student a LEFT JOIN score b on a.sno=b.sno WHERE b.sno is null;

http://www.cnnetsun.cn/news/2156462.html

相关文章:

  • 给地球做CT:聊聊交错网格有限差分法如何帮我们‘看清’地下结构
  • Java线程(六) 线程池与定时器解析与模拟实现
  • 保姆级教程:在Keil5中为GD32F10x系列新建一个‘干净’的工程模板(从官网下载到编译通过)
  • 【UE】Gerstner Waves 水体模拟 5 :完善水体光学 【高光、粗糙度、折射、斯涅尔窗】
  • 从LINQ到Span<T>:重构字符串处理性能提升42倍,一线架构师压箱底代码全公开,
  • 京东自动抢购终极指南:2025年高效补货监控与多账户下单技术解析
  • 5分钟掌握RF24:嵌入式无线通信新手快速入门完全指南
  • 实战对比:YOLOv11与YOLOv12在金属表面划痕检测中的性能差异
  • 千问 LeetCode 1932.合并多棵二叉搜索树public TreeNode canMerge(List<TreeNode> trees)
  • 别急着降级!用conda和pip搞定numpy版本冲突的保姆级教程
  • 告别BLAST卡顿:用pyani的ANIm方法快速计算微生物基因组ANI(附Conda环境避坑指南)
  • FreeMove终极指南:无痛迁移C盘大文件的完整解决方案
  • 如何用Sunshine在3步内打造你的个人云游戏服务器?
  • WPF窗口生命周期:Loaded和Closing事件到底该放什么代码?一个真实项目案例告诉你
  • 魔兽争霸3终极优化伴侣:WarcraftHelper让你的经典游戏焕发新生
  • 猫抓cat-catch终极指南:浏览器资源嗅探神器让网页资源下载如此简单
  • FPGA新手避坑:用Quartus Prime和IP核搞定RAM读写(附SignalTap调试技巧)
  • 智能机器控制设计:异构计算与模块化架构实践
  • 自动驾驶原来从不看导航?丁文超团队揭开端到端模型导航理解的真相
  • 3步彻底解决Zotero中文文献管理难题:茉莉花插件完全指南
  • XHS-Downloader:解决小红书内容采集难题的完整开源方案
  • 5步彻底解决BetterJoy连接和驱动问题的完整指南
  • 打造个人游戏串流服务器:Sunshine实战深度解析
  • 2026下一代智能爬虫:基于强化学习的自适应反爬对抗系统实战
  • CodePercept:多模态AI在STEM视觉任务中的代码增强理解
  • 企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
  • “PHP不适合工业场景”是最大认知陷阱?看航天某院所如何用PHP 8.2+FFI直驱ARM Cortex-A9实时内核(实测jitter < 8μs)
  • 构建个人技术学习仓库:从Git管理到知识体系化实践
  • 高效小红书数据采集实战指南:xhs工具完全解析
  • BTW:AI开发工作流管理器,统一配置提升编码效率