内连接(INNER JOIN)(测试)

不同的 SQL JOIN

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据。也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表行,必须满足ON子句中的搜索条件。作为对照,如果在源表中的行在另一表中没有对应(相关)的行,则该行就被过滤掉,不会包括在结果表中。内连接使用比较运算符来完成。内连接可分为两种。

内连接包括,等值连接和不等连接。

以下是等值连接的测试。

表结构,包括两个表

CREATE TABLE `phonebook_1` (

`name_1` varbinary(150)  ,

`phone_1` varbinary(150) ,

`address_1` varbinary(150)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE `phonebook_2` (

`name_2` varbinary(150)  ,

`phone_2` varbinary(150) ,

`address_2` varbinary(150)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
两个表的初始数据

insert into phonebook_1  value (‘xinxing’,’13478998888′,’hangzhou’);
insert into phonebook_1  value (‘theroer’,’13478998888′,’sichuan’);
insert into phonebook_1  value (‘nova’,’13478999999′,’beijing’);
insert into phonebook_2  value (‘nova’,’13478997777′,’wenzhou’);
insert into phonebook_2  value (‘theroer’,’13478998888′,’chongqing’);
insert into phonebook_2  value (‘nova’,’13478999999′,’jilin’);

phonebook_2表数据,

[nova]> select * from phonebook_2;
+———+————-+———–+
| name_2  | phone_2     | address_2 |
+———+————-+———–+
| nova    | 13478997777 | wenzhou   |
| theroer | 13478998888 | chongqing |
| nova    | 13478999999 | jilin     |
+———+————-+———–+
3 rows in set (0.00 sec)
phonebook_1表数据

[nova]> select * from phonebook_1;
+———+————-+———–+
| name_1  | phone_1     | address_1 |
+———+————-+———–+
| xinxing | 13478998888 | hangzhou  |
| theroer | 13478998888 | sichuan   |
| nova    | 13478999999 | beijing   |
+———+————-+———–+
3 rows in set (0.00 sec)
内连接查询语句

[nova]> select phonebook_1.name_1,phonebook_1.phone_1,phonebook_1.address_1 from phonebook_1
INNER JOIN phonebook_2
ON phonebook_1.name_1=phonebook_2.name_2;
+———+————-+———–+
| name_1  | phone_1     | address_1 |
+———+————-+———–+
| nova    | 13478999999 | beijing   |
| theroer | 13478998888 | sichuan   |
| nova    | 13478999999 | beijing   |
+———+————-+———–+
3 rows in set (0.00 sec)

(root:test_db_10.11.54.21_cnc:Mon Aug  3 11:40:22 2009)
[nova]> select DISTINCT phonebook_1.name_1,phonebook_1.phone_1,phonebook_1.address_1 from phonebook_1  INNER JOIN phonebook_2  ON phonebook_1.name_1=phonebook_2.name_2;
+———+————-+———–+
| name_1  | phone_1     | address_1 |
+———+————-+———–+
| nova    | 13478999999 | beijing   |
| theroer | 13478998888 | sichuan   |
+———+————-+———–+
2 rows in set (0.00 sec)

  1. 还没有评论

  1. 还没有引用通告。