Mysql的连接查询

本文介绍了数据库查询中的交叉连接(CROSSJOIN)和内连接(INNERJOIN)的概念和语法。内连接只包含满足连接条件的记录,可以使用INNERJOIN或WHERE子句实现。此外,还讨论了等值连接、非等值连接、自然连接和自连接等内连接的变体。最后,文章提到了外连接,包括左外连接和右外连接,它们保留了所有表的记录,即使在另一表中没有匹配项。
摘要由CSDN通过智能技术生成

交叉连接

交叉连接(CROSS JOIN)又称笛卡尔积,由第一个表的每一行与第二个表的每一行连接起来后形成的表。

语法格式:

SELECT * FROM table1 CROSS JOIN table 2;

SELECT * FROM table 1, table 2;

内连接

在内连接(INNER JOIN)查询中,只有满足查询条件的记录才能出现在结果集中。

内连接使用比较运算符进行表间某些字段值的比较操作,并将与连接条件相匹配的数据行组成新记录,以消除交叉连接中没有意义的数据行。

内连接有两种连接方式:

   ●   使用INNER JOIN的显示语法结构

语法格式:

SELECT 目标列表达式1, 目标列表达式2,..., 目标列表达式n,

FROM table1 [INNOR] JOIN table2 ON 连接条件

[WHERE 过滤条件]

使用WHERE子句定义连接条件的隐示语法结构

语法格式:

SELECT 目标列表达式1, 目标列表达式2,..., 目标列表达式n,

FROM table1, table2

WHERE连接条件[AND过滤条件]

说明:

(1)目标列表达式:需要检索的列的名称或别名。

(2)table1, table2:进行内连接的表名。

(3)连接条件:连接查询中用来连接两个表的条件,其格式为:

[<表名1.>] <列名1> <比较运算符> [<表名2.>] <列名2>

其中,比较运算符有:<、<=、=、>、>=、!=、<>。

(4)在使用INNER JOIN的连接中,连接条件放在FROM子句的ON子句中,过滤条件放在WHERE子句中。

(5)在使用WHERE子句定义连接条件的连接中,连接条件和过滤条件都放在WHERE子句中。

内连接是系统默认的,可省略INNER关键字。

经常用到的内连接有等值连接与非等值连接、自然连接和自连接等,下面分别介绍。

 等值连接与非等值连接

概念:表之间通过比较运算符“=”连接起来,称为等值连接,而使用其它运算符为非等值连接。

自然连接

自然连接在FROM子句中使用关键字NATURAL JOIN,自然连接在目标列中去除相同的字段名。

自连接

将某个表与自身进行连接,称为自表连接或自身连接,简称自连接,使用自连接需要为表指定多个别名,且对所有查询字段的引用必须使用表别名限定。

举例如下。

【例6.25】查询选修了“1201”课程的成绩高于学号为“191002”的成绩的学生姓名。

mysql> SELECT a.cno, a.sno, a.grade

    -> FROM score a, score b

    -> WHERE a.grade>b.grade AND a.cno='1201' AND b.cno='1201' AND b.sno='191002'

    -> ORDER BY a.grade DESC;

mysql> SELECT a.cno, a.sno, a.grade

    -> FROM score a JOIN score b ON a.grade>b.grade

    -> WHERE a.cno='1201' AND b.cno='1201' AND b.sno='191002'

    -> ORDER BY a.grade DESC;

该语句实现了自连接,使用自连接时为一个表指定了两个别名

查询结果

+-------+----------+--------+

| cno    | sno         | grade  |

+-------+----------+--------+

| 1201  | 191003  |       93 |

| 1201  | 191001  |       92 |

| 1201  | 196004  |       92 |

| 1201  | 196001  |       84 |

+-------+----------+--------+

4 rows in set (0.00 sec)

外连接

在内连接的结果表,只有满足连接条件的行才能作为结果输出。外连接的结果表不但包含满足连接条件的行,还包括相应表中的所有行。外连接有以下2种:

   ●   左外连接(LEFT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括左表的所有行,当左表有记录而在右表中没有匹配记录时,右表对应列被设置为空值NULL。

   ●   右外连接(RIGHT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括右表的所有行,当右表有记录而在左表中没有匹配记录时,左表对应列被设置为空值NULL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值