SQL连接查询总结和练习

数据库作业7:SQL练习4 - SELECT(连接查询、嵌套查询) 【3.60】查询所有选修了1号课程的学生姓名。 SELECT Student.*, SC.* FROM Student, SC WHERE Student.Sno = SC.Sno; //等值连接查询,连接运算符是 = ,查询条件为等号两边的值相等 ... 阅读详情
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,是它区别于其它类型 数据库管理系统的一个标志。连接可以在SELECT 语句的FROM子句或WHERE子句中建立,在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。一般来说,连接查询比嵌套查询的效率高一点。所以,在Transact-SQL中推荐使用这种方法。
 
   SQL-92标准所定义的FROM子句的连接语法格式为:
     FROM join_table join_type join_table [ON (join_condition)]
  其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 个表操作的连接又称做自连接。
join_type 指出连接类型,可分为内连接和外连接。
练习数据表:
表一:press(出版社)
表二:authors(作者)

一、内连接(INNER JOIN)

内连接是应用程序中用的普遍的"连接"操作,它一般都是默认连接类型。内连接基于连接谓词将两张表(如 A 和 B)的列组合在一起,产生新的结果表。查询会将 A 表的每一行和 B 表的每一行进行比较,并找出满足连接谓词的组合。当连接谓词被满足,A 和 B 中匹配的行会按列组合(并排组合)成结果集中的一行。连接产生的结果集,可以定义为首先对两张表做笛卡尔积(交叉连接) -- 将 A 中的每一行和 B 中的每一行组合,然后返回满足连接谓词的记录。实际上 SQL 产品会尽可能用其他方式去实现连接,笛卡尔积运算是非常没效率的. 
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

  1、相等连接

1)等值连接

表之间的连接是通过相等的字段值连接起来的查询称为等值连接查询。在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。特别注意连接依据的列可能包含 NULL 值,NULL 值不与任何值匹配(甚至和它本身)
例如:列出authors和press表中位于同一城市的作者和出版社
      SELECT * FROM press AS p INNER JOIN authors AS a ON p.city=a.city 
       等价于:SELECT * FROM press AS p ,authors AS a WHERE p.city=a.city
         查询结果:

2)非等值连接                      

在等值查询的连接条件中不使用等号,而使用其它比较运算符就构成了非等值连接查询。可以使用的比较运算符有:> 、>、=、 <、 <=、 !=, 还可以使用BETWEEN…AND 之类的谓词。
      例如:SELECT * FROM press AS p INNER JOIN authors AS a ON p.id > a.press_id   
          查询结果:
              

2、自然连接

自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,两表中的所有名称相同的列都将被比较,并且在结果中把重复的属性列去掉,结果表中两表中名称相同的列只出现一次.。而等值连接并不去掉重复的属性列。(sqlserver 不支持 自然连接)
例如:SELECT * FROM authors  NATRUAL JOIN press 
查询结果与等值连接一样,只是去掉了重复的id那一列。

3、交叉连接

    交叉连接(cross join),又称笛卡尔连接(cartesian join)或叉乘(Product),它是所有类型的内连接的基础。把表视为行记录的集合,交叉连接即返回这两个集合的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。这其实等价于内连接的链接条件为"永真",或连接条件不存在.。

    如果 A 和 B 是两个集合,它们的交叉连接就记为: A × B.

    例如: SELECT * FROM press CROSS JOIN authors    

    等价于:SELECT * FROM press,authors 

        查询结果:

            

二、外连接

外连接并不要求连接的两表的每一条记录在对方表中都一条匹配的记录. 连接表保留所有记录 -- 甚至这条记录没有匹配的记录也要保留. 外连接可依据连接表保留左表, 右表或全部表的行而进一步分为左外连接, 右外连接和全连接.在标准的 SQL 语言中, 外连接没有隐式的连接符号.

1、左外连接

左外连接会返回左表的所有记录和右表中匹配记录的组合(如果右表中无匹配记录, 来自于右表的所有列的值设为 NULL). 如果左表的一行在右表中存在多个匹配行, 那么左表的行会复制和右表匹配行一样的数量, 并进行组合生成连接结果.

    例如:SELECT *  FROM   press LEFT OUTER JOIN authors ON press.id = authors.press_id
    查询结果:
	
      

2、右外连接

    右外连接, 亦简称右连接, 它与左外连接完全类似, 只不过是作连接的表的顺序相反而已.右连接操作返回右表的所有行和这些行在左表中匹配的行(没有匹配的, 来源于左表的列值设为 NULL).

    例如:SELECT * FROM press RIGHT OUTER JOIN authors ON press.id= authors.press_id
        等价于:SELECT * FROM authors LEFT OUTER JOIN press ON press.id= authors.press_id
        查询结果:
      		
 		
    实际上显式的右连接很少使用, 因为它总是可以被替换成左连接--换换表的位置就可以了,所以上面两条语句是等价的。

3、全连接

    全连接是左右外连接的并集. 连接表包含被连接的表的所有记录, 如果缺少匹配的记录, 即以 NULL 填充.。一些数据库系统(如 MySQL)并不直接支持全连接, 但它们可以通过左右外连接的并集(参: union)来模拟实现
    例如:SELECT * FROM   press FULL OUTER JOIN authors ON press.id= authors.press_id
     查询结果:
      
	


  

三、自连接

     自身连接是指同一个表自己与自己进行连接。既可以用内连接,也可以用外连接。
     例如:SELECT * FROM   authors a1 LEFT JOIN authors a2 ON a2.press_id = a1.id
       查询结果:
        


【SQL 个人笔记】基本 SQL 语句、多表连接查询及关键字 LIMIT、HAVING(附练习案例) 基本 SQL 语句、多表连接查询及关键字 LIMIT、HAVING基本语句: 1. 内连接(等值连接、非等值连接、自连接)、 2. 外连接(左连接、右连接)、 3. 嵌套查询(子查询)、 关键字 LIMIT、 关键字 HAVING 阅读详情

相关推荐

Openwifi 开源项目解读(一)

Openwifi wifi 80211 无线网卡 基带 FPGA linux 驱动 开源

2万+

SQL数据查询——连接查询

等值连接、内连接、外连接、自然连接、SQL JOINS等主要操作以及SQL92与SQL99语法比较、Oracle与MySQL语法比较。

z135733的博客 1万+

opencv实践项目-图片拼接之缝合线算法

opencv 图片缝合线算法

wyw0000的博客 2624

SQL之连接查询

因为不同表之间的数据具有不同的用途和字段,连接查询可以将我们需要用到的两个表的不同字段进行关联,从而找到我们有用的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。连接操作除了可以是两表连接,一个表于其自身连接外,还可以是两个以上的表进行连接,后者通常 称为多表连接。对于不同的DBMS,支持的集合运算不同,例如MySQL只支持并运算,但是集合运算大都可以使用关系运算符进行替换或者使用嵌套查询,因此不必担心集合运算连接查询。

m0_62172219的博客 6077

批处理脚本手动双击可以执行,但计划任务中执行失败

问题现象: 使用批处理脚本从linux端(samba server) 备份一些数据,设置计划任务每天凌晨两点定时备份。 1)、windows系统中映射共享文件夹为S:盘,需要输入共享用户名和密码 2)、脚本中使用xcopy命令复制共享目录中的文件到windows本地目录中。 脚本如下: set Name=%date:~0,4%%date:~5,2%%date:~8,2% chcp 65001 REM chcp防止中文乱码 mkdir "E:\脚本备份\bakscripts%Name%" xco

独孤清扬玩DB 4312

手把手教你用海康威视相机+DLP4500搭建双目结构光系统(附避坑指南)

本文详细介绍了如何使用海康威视相机和DLP4500搭建双目结构光三维测量系统,涵盖硬件选型、系统搭建、双目标定及三维重建等关键步骤。特别针对预算有限的开发者和实验室团队,提供实用的避坑指南和优化技巧,帮助实现0.02mm的高精度测量。

weixin_42526087的博客 462

SQL的7种连接查询

SQL的7种连接查询

weixin_40379745的博客 8028

Unity物理引擎实战:从刚体重心到碰撞体,打造真实不倒翁交互

刚体(Rigidbody)是Unity物理系统的核心组件,它定义了游戏对象的物理属性,如质量、阻力和碰撞响应。其原理基于牛顿力学,通过物理引擎(如PhysX)实时计算物体的运动状态。在游戏开发中,刚体的价值在于能够模拟真实世界的物理行为,为玩家提供沉浸式的交互体验。碰撞体(Collider)则定义了物体的形状边界,用于检测与其他物体的接触。通过精细调整刚体的重心(Center of Mass)和碰撞体形状,开发者可以模拟出各种有趣的物理现象,例如低重心物体的动态平衡。这在休闲游戏、物理玩具模拟等场景中尤为实

weixin_33976326的博客 355

SQL语法

SQL语法1. ASP与Access数据库连接:2. ASP与SQL数据库连接建立记录集对象:set rs=server.createobject("adodb.recordset")rs.openSQL语句,conn,3,23. SQL常用命令使用方法:(1) 数据记录筛选:sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"sq

kiss0kill的专栏 2355

软考 系统架构设计师历年真题集萃(248)

软考 系统架构设计师历年真题集萃(248)

phmatthaus的专栏 791

(2)NPW(监控片)【中】---业务场景精讲

自己在日常工作当中,由于非产线人员出生,对NPW的知识一直一知半解,业务场景认识的不够透彻,做系统的时候很难理解甲方的NPW业务应用,特收集了不少关于NPW的一些业务场景,下面都是一些摘抄,大家关注我标红标粗的部分,

阿拉伯梳子的专栏 1586

SQL连接查询练习

use mydb1; CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); CREATE TABLE score ( id INT(10) NOT NULL UNIQUE PRIMARY

xr6xr的博客 1433

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

SQL 连接查询练习

--连接查询练习 --内连接 --返回有部门的员工工资和奖金 --92 语法 SELECT n.ename, n.sal, n.comm, d.deptno, d.dname FROM new_emp n,...

weixin_30551947的博客 191

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中)

数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中) 上机练习2 1、 启动SQL Server 2008中的 SQL Server Management Studio。 2、 针对下面三张基本表进行操作: 学生信息表(Student): 列名 数据类型 长度 是...

蔡军帅 1551

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SQL练习-select连接查询与嵌套查询

【例3.49】 查询学生的选修课程情况 首先引入知识点:连接查询其实就是对于多个表进行笛卡尔积。 select Student.*,Sc.* from TEST.Student,TEST.SC where Student.Sno=Sc.Sno 上面的例子是等值查询,where的条件是‘=’ ,也可以是非等值查询将条件改为‘!=’即可。 【例3.50】 用自然连接完成上述的【3.49】 首先引入...

weixin_44724691的博客 1439

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SQL练习4 - SELECT(连接查询、嵌套查询)

一、连接查询 连接查询:同时涉及两个以上的表的查询 [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> 连接字段:连接条件中的列名称 如:Sno为上面例子中的连接字段 注意:连接字段类型必须是可比的,但名字不必相同 1.等值与非等值连接查询 (等值连接:连接运算符为= ) [例 3.49] 查询每个学生及其选修课...

wjijiu的博客 5036

mysql 连接查询/SQL99语法 练习4

导入这三个sql文件,就能跟着操作啦 https://cloud.189.cn/t/NFF7NzyyEZNv (访问码:rtu8) 里面有3张表。分别一次性执行就能创建成功啦。 #连接查询、 #4.1.1连接查询/SQL99语法 #一、内连接 语法: SELECT 查询列表 FROM 表名1 别名 【INNER】 JOIN 表名2 别名 ON 连接条件 WHERE 筛选条件 GROUP BY 分组列表 HAVING 分组后筛选 ORDER BY 排序列表; SQL92和SQL99的区别: S

Anna_Liqi的博客 205

MySql SQL语句练习(二) 内连接 左连接 右连接,三表连接查询

不懂SQL基本语法的小伙伴可以看我本系列的上篇文章 话不多说 直接开始 首先建立三个表用来测试 /* SQLyog Ultimate v11.27 (32 bit) MySQL - 5.5.55 : Database - csqltest ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*

哦哦一人 3722

SQL练习4-SELECT(连接查询、嵌套查询)

连接查询: 连接查询的WHERE子句中来连接两个表的条件称为连接条件或连接谓词,其一般格式: [<表名 1>.]<列名 1><比较运算符>[<表名 2>.]<列名 2> 其中比较运算符主要为=、>、<、>=、<=、!=(或者是<>)等。 此外连接谓词还可以使用以下形式: [<表名 1>.]&...

咸鱼4号 2088

SQL练习4 select(连接查询,嵌套查询)

连接查询:同时涉及两个以上的表的查询 格式:[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> (列名不一定相同,但列的数据类型一定要可比的) 等值查询: 查询每个学生及其选修课程的情况 SELECT Student.*, SC.* FROM Student, SC ...

zxywishwish的博客 550

【SQL每日一练】day8:牛客高频习题练习:基础查询+多表连接专题

【SQL每日一练】day8:牛客高频习题练习:基础查询+多表连接专题

Liu_y_xin的博客 1021

SQL语句之单表查询、多表连接查询、子查询——练习题

单表查询练习题 == salgrade ==

子佩的博客 1873
上一篇: SQL-连接查询
下一篇: 数据库基础——九种数据库对象
硅谷纵横
博客等级 码龄9年 26粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值