0

0

连接查询与集合查询_MySQL

php中文网

php中文网

发布时间:2016-06-01 13:32:15

|

1539人浏览过

|

来源于php中文网

原创

bitsCN.com

连接查询与集合查询

 

在对数据库的查询过程中,有些时候检索一张表中的数据记录往往不能满足开发人员或者客户的需要。例如,查询学生的选课成绩信息。而学生选课信息和课程成绩信息分别在两个不同的数据表中。其中,在课程信息表(T_curriculum)中包括课程的编号、课程的名字、课程的学分、课时以及授课的教师等学生选课信息,而学生的编号、选课的课程编号以及课程成绩等信息在成绩信息表(T_result)中,此时为了在查询的结果中显示学生选课信息和所选课程的相关信息,就需要同时检索课程信息表(T_curriculum)和成绩信息表(T_result)。这就需要进行连接查询的操作。

 

1.内连接查询

 

等值连接 

等值连接是指将指定的连接条件通过使用等号运算符(=)连接起来,并返回符合连接条件的数据行。其语法格式如下: 

SELECT 表名1.字段, 表名2.字段 …. 

FROM   表名1,表名2 

WHERE 表名1.字段1=表名2.字段2 

其中,SELECT 语句中表名1.字段和表名2.字段表示指定数据表1和数据表2中要查询的列;FROM语句中表名1和表名2表示指定连接的数据表的名字;WHERE子句中表名1.字段1=表名2.字段2表示用于指定连接条件的列。这里的字段1中的列和字段2中的列必须是两个表之间相互关联的列。 

非等值连接 

非等值连接是指使用除等号运算符(=)以外的其他运算符将指定条件连接起来而执行的查询操作。其他运算符包括、>=(大于等于)、(大于)、

 

 

SELECT R.stuID,S.stuName,C.curID, C.curName,R.result

FROM T_result R,T_curriculum C,T_student S

WHERE R.curID=C.curID

AND R.result>80

 

使用ON子句建立相等连接 

在SQL语句中除了WHERE子句中使用等号运算符(=)实现等值连接的操作之外,还可以使用ON子句建立相等连接条件。其语法规则如下:

 

SELECT 表名1.字段, 表名2.字段 ….

FROM   表名1 JOIN 表名2

ON 表名1.字段1=表名2.字段

 

其中关键字JOIN表示将表1和表2连接起来,ON子句用来指定连接条件的列。 

使用USING子句建立相等连接 

在进行连接操作时,有时只希望将两张表中相互关联的列建立一个等值连接。此时,可以使用USING子句建立相等连接来简化使用等号运算符(=)建立的等值连接操作。其语法规范如下: 

 

 

SELECT 表名1.字段, 表名2.字段 ….

FROM   表名1 JOIN 表名2

USING  (字段1)

 

其中关键字JOIN表示将表1和表2连接起来,USING子句中使用括号将字段1括起来,字段1就是两个表中建立等值连接相互关联的列。

2.交叉连接

 

交叉连接返回的结果是一个笛卡尔积。所谓笛卡尔积实际就是两个集合相乘的结果。假设集合A中有n个元素,集合B中有m个元素,如果最后返回的结果是n*m,那么这个结果就是集合A和集合B的笛卡尔积。 

 

 

SELECT R.stuID,C.curID

FROM T_result R,T_curriculum C

或FROM T_result R cross join T_curriculum C

 

3.自连接查询

 

前面讲到的连接都是在表与表之间进行的。连接查询除了可以在不同的表之间进行,也可以对同一张表实现连接操作,这种连接查询的方式称为自连接。所谓自连接,就是指一个数据表与其自身进行连接。其语法规则如下: 

SELECT A.字段, A.字段 …. 

FROM   表名1 A,表名1 B 

WHERE A.字段=B.字段 

由于连接的是同一张表,所以在FROM语句中需要为表定义不同的别名,这里为表1分别定义了表的别名为A和B。SELECT语句中可以使用A.字段的形式也可以使用B.字段的形式查询需要的记录。这里的SELECT 语句中使用的是A.字段的形式。 

例如,在课程信息表中选择学分数比操作系统的学分数多的课程信息。 

 

 

SELECT C2.curID,C2.curName,C2.credit

FROM T_curriculum C1,T_curriculum C2

聚彩手机网店系统 免费版
聚彩手机网店系统 免费版

聚彩手机商城系统,是一款专业于手机销售的独立手机网店系统,他拥有众多的手机参数选项,以及傻瓜式的设置选项,让您可以在5分钟内建立起专业而强大的手机销售网站。他拥有多套模版可以实时切换,前台拥有新闻中心、手机中心、配件中心、软件下载、手机报价、发货查询、保修查询、分店查询、产品的对比功能,代理与加盟的申请等功能,他拥有完善的会员中心,会员等级设置等,集成在线支付接口,超强SEO,可以设置所有页面的t

下载

WHERE C1.curName = '操作系统' 

AND C1.credit

 

4.外连接查询

 

在前面讲述的连接操作中,返回的结果都是满足连接条件的记录。有些时候,开发人员或者用户对于不满足连接条件的部分记录也感兴趣,这个时候就需要使用外连接查询。外连接查询不仅可以返回满足连接条件的记录,对于一个数据表中在另一个数据表中不匹配的记录也可以返回。外连接查询主要包括三种:左外连接、右外连接和全外连接。 

左外连接 

左外连接中查询的结果中不仅将显示满足连接条件的记录,而且还包括左侧表中不满足查询条件的记录。在Oracle数据库中,可以使用加号运算符(+)来表示左外连接。当该加号运算符(+)出现在连接条件的左边时,就称之为左外连接。其语法格式如下: 

SELECT 表名1.字段, 表名2.字段 …. 

FROM   表名1,表名2 

WHERE 表名1.字段1(+)=表名2.字段2 

其中,SELECT 语句中表名1.字段和表名2.字段表示指定数据表1和数据表2中要查询的列;FROM语句中表名1和表名2表示指定连接的数据表的名字;WHERE子句中表名1.字段1(+)=表名2.字段2表示左外连接。此时,表名1.字段1所在的列的值将会被全部查询出来。 

在MySQL数据库和Microsoft SQL Server数据库中可以使用LEFT[OUTER] JOIN关键字实现,其中OUTER关键字是可选的。使用LEFT[OUTER] JOIN关键字实现左外连接的语法规则如下: 

 

SELECT 表名1.字段, 表名2.字段 ….

FROM   表名1 LEFT JOIN表名2

ON  表名1.字段1=表名2.字段2

 

这里使用LEFT JOIN关键字代替SQL语句中FROM语句里的逗号,使用ON子句代替标准SQL语句中的WHERE子句,并将SQL语句中表示左外连接的加号运算符(+)去除。 

右外连接 

在Oracle数据库中,当该加号运算符(+)出现在连接条件的右边时,就称之为右外连接。其语法格式如下: 

SELECT 表名1.字段, 表名2.字段 …. 

FROM   表名1,表名2 

WHERE 表名1.字段1=表名2.字段2(+) 

在MySQL和Microsoft SQL Server数据库中可以使用RIGHT [OUTER] JOIN关键字实现,其中OUTER关键字是可选的。使用RIGHT [OUTER] JOIN关键字实现左外连接的语法规则如下: 

 

SELECT 表名1.字段, 表名2.字段 ….

FROM   表名1 RIGHT JOIN表名2

ON  表名1.字段1=表名2.字段2

 

全外连接 

全外连接中查询的结果中不仅将显示左侧表中不满足连接条件的记录,而且还会显示右侧表中不满足查询条件的记录。全外连接可以认为是左外连接与右外连接的合集(不包括重复行)。 

全外连接可以使用FULL [OUTER] JOIN关键字实现,其中OUTER关键字是可选的。使用FULL [OUTER] JOIN关键字实现左外连接的语法规则如下: 

 

SELECT 表名1.字段, 表名2.字段 ….

FROM   表名1 FULL JOIN表名2

ON  表名1.字段1=表名2.字段2

 

5.集合查询

 

在SQL的连接查询语句中,还有一种查询方式就是结合查询。集合查询主要包括三种:并操作、交操作和差操作。其中交操作和差操作并不是对目前主流的所有的数据库的适用。 

并操作(UNION) 

执行并操作使用的关键字是UNION。并操作返回的结果集是包括了两个查询语句中查询出来的所有不同的行,不包含重复行。其语法格式如下: 

SELECT 语句1 

UNION 

SELECT 语句2 

其中语句1和语句2表示的是两个用于查询的SELECT语句。UNION关键字表示对这两个查询语句查询出来的结果进行并操作。这里需要保证SELECT 语句1和SELECT 语句2中查询出的列数必须相同,而且对应的列的数据类型必须一致。 

交操作(INTERSECT) 

执行交操作使用的关键字是INTERSECT。交操作返回的结果集包括了连接查询结果的公共行。交操作中不会出现重复行。其语法格式如下: 

SELECT 语句1 

INTERSECT 

SELECT 语句2 

其中语句1和语句2表示的是两个用于查询的SELECT语句。INTERSECT关键字表示对这两个查询语句查询出来的结果进行交操作。这里需要保证SELECT 语句1和SELECT 语句2中查询出的列数必须相同,而且对应的列的数据类型必须一致。 

差操作(MINUS) 

执执行交操作使用的关键字是MINUS。差操作返回的记录结果集是只在第一个SELECT语句中出现存在,但不存在于第二个SELECT语句的查询结果中。在其语法格式如下: 

SELECT 语句1 

MINUS 

SELECT 语句2

bitsCN.com

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

797

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

272

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

144

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

25

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

92

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

53

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

717

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

64

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.5万人学习

Django 教程
Django 教程

共28课时 | 4.4万人学习

Excel 教程
Excel 教程

共162课时 | 18.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号