上面介绍的INNER JOIN、OUTER JOIN都是不同表之间的联接查询,自联接是一张表以不同的别名做为左右两个表,可以进行如上的INNER JOIN和OUTER JOIN。如下看一个INNER 自联接:
- mysql> SELECT * FROM student l JOIN student r where l.no = r.no;
- +------+-------+------+------+-------+------+
- | no | name | sex | no | name | sex |
- +------+-------+------+------+-------+------+
- | S001 | Sunny | M | S001 | Sunny | M |
- | S002 | Tom | F | S002 | Tom | F |
- | S003 | Kevin | M | S003 | Kevin | M |
- +------+-------+------+------+-------+------+
- 3 rows in set (0.00 sec)
7. 不等值联接
这里说的不等值联接是SQL92语法里面的ON子句里面只有不等值联接,比如:
- mysql> SELECT
- -> s.c_no, s.score, no, name
- -> FROM score s RIGHT JOIN student stu ON stu.no != s.c_no;
- +------+-------+------+-------+
- | c_no | score | no | name |
- +------+-------+------+-------+
- | C01 | 80 | S001 | Sunny |
- | C01 | 80 | S002 | Tom |
- | C01 | 80 | S003 | Kevin |
- | C02 | 98 | S001 | Sunny |
- | C02 | 98 | S002 | Tom |
- | C02 | 98 | S003 | Kevin |
- | C03 | 76 | S001 | Sunny |
- | C03 | 76 | S002 | Tom |
- | C03 | 76 | S003 | Kevin |
- | C01 | 78 | S001 | Sunny |
- | C01 | 78 | S002 | Tom |
- | C01 | 78 | S003 | Kevin |
- | C02 | 88 | S001 | Sunny |
- | C02 | 88 | S002 | Tom |
- | C02 | 88 | S003 | Kevin |
- | C03 | 68 | S001 | Sunny |
- | C03 | 68 | S002 | Tom |
- | C03 | 68 | S003 | Kevin |
- +------+-------+------+-------+
- 18 rows in set (0.00 sec)
上面这示例,其实没有什么实际业务价值,在实际的使用场景中,不等值联接往往是结合等值联接,将不等值条件在WHERE子句指定,即, 带有WHERE子句的等值联接。
(编辑:威海站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|