连接查询

目录

前言

一、内连接

二、自连接

三、外连接

1、左外连接

2、右外连接

3、全外连接

四、交叉连接


前言

        在实际开发中,经常需要同时从两个表或多个表中检索数据,并且每一个表中的数据往往作为一个单独的列出现在结果集中。在表连接技术中,可分为内连接、外连接 和交叉连接等。

一、内连接

        内连接是把两个表中的数据连接生成第三个表,第三个表中仅仅包含两张表共同拥有的部分的数据。在内连接中,使用 INNER  JOIN 连接运算符,并且使用 ON关键字指定连接条件。

        在表连接中,如果 JOIN 前面没有明确指定连接类型,那么默认为内连接。

--  内连接语法格式

SELECT  select_list  FROM  表1

INNER  JOIN  表2

ON  连接条件

SELECT  select_list 

FROM  表1,  表2

WHERE  连接条件

--  连接条件格式

表1.列1 = 表2.列2

--  示例:查询每个学生的姓名、课程号 和成绩。

select  sname, cno, score 

from  student 

inner  join  sc

on  student.sno = sc.sno

select  sname, cno, score 

from  student ,  sc

where student.sno = sc.sno

        当从多个表中查询的列名相同时,列名前必须添加表名;列名不同是可以忽略不加,但加上可以增加可读性。

        在 FROM 子句中,可以为表定义一个临时别名,在查询中引用,以缩写表名减少代码繁杂。

二、自连接

        连接操作不仅可以在不同表上进行,在同一张表中也可以进行自身连接,即同一个表的不同行连接起来。自连接可以看作是一张表的两个副本之间的连接,且必须给表指定两个别名,使其在逻辑上成为两张表。

--  示例:查看 student表中,同名学生的信息。

select  * 

from  student  as li

inner join  student  as  rl

on  li.sname = rl.sname  and  li.sno  <>  rl.sno

        在评论信息的存储中,通常把所有评论信息保存到一种表中,这时就需要使用表的自连接把不同评论之间关联起来。

三、外连接

1、左外连接

        左外连接,是以左边表的数据为基准,去匹配右边表的数据,如果匹配到则显示,匹配不到就显示 NULL。

--  语法结构

SELECT  select_list 

FROM  表1

LEFT  JOIN  表2

ON  表1.列1 = 表2.列2

--  示例:查看所有学生及其选修课程的成绩情况(含未选课程的学生信息)。

select  student.*, sc.cno, sc.score

from  student

left  join  sc

on  student.sno = sc.sno

2、右外连接

        右外连接,是以右边表的数据为基准,去匹配左边表的数据,如果匹配到则显示,匹配不到就显示 NULL。

--  语法结构

SELECT  select_list 

FROM  表1

RIGHT  JOIN  表2

ON  表1.列1 = 表2.列2

--  示例:查看成绩在75分以上的学生学号、姓名、选修的课程号、课程名和成绩。

select  student.sno, student.sname, sc.cno, course.cname, sc.score

from  student

left  join  sc

on  student.sno = sc.sno

left  join  course

on  sc.cno = course.cno

where  score >=75

3、全外连接

        全外连接,顾名思义,就是将两张表中的数据都显示出来,没有对应的值就显示 NULL。

--  语法结构

SELECT  select_list 

FROM  表1

FULL [ OUTER ]  JOIN  表2

ON  表1.列1 = 表2.列2

--  示例:查看每个学生及其选修课程情况(含未选课程的学生信息及未被选修的课程信息)。

select  student.*, sc.cno, course.cname

from  student

full  join  sc

on  student.sno = sc.sno

full  join  course

on  sc.cno  =  course.cno

四、交叉连接

        交叉连接,也称笛卡儿积,返回两个表的乘积。在检索结果中,包含所连接的两个表中所有行的全部组合。交叉连接使用 CROSS  JOIN 关键字来创建。

        列如,如果对 A表和 B表进行笛卡儿积,A表中有 5行数据,B表中有 12行数据,那么结果集中可以有60条数据。

--  语法结构

SELECT  列

FROM  表1 

CROSS  JOIN  表2

--  示例:查看所有学生所有可能的选课情况。

select  student.*, sc.cno, sc.score

from  student

cross  join  sc

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值