内连接(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)
还没有评论