内连接
内连接也叫连接,是最早的一种连接,最早被称为普通连接或自然连接。内连接是从结果中删除其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。
内连接的语法:
SELECT fieldlist FROM table1 [INNER] join table2 ON table1.column=table2.column
一个表中的行和与另外一个表中的行匹配连接。表中的数据决定了如何对这些行进行组合。从每一个表中选取一行,根据这些列的值是否相同,组合方式分为一对一、多对一和多对多的关系。
1.一对一关系
当连接的两个表,两个连接列的值完全相同,则两个表连接相当于一对一的关系。
下面在“pubs”数据库中“titles”和“titleauthor”两个表中,根据相同列“title_id”进行内连接。在查询分析器中输入的SQL语句如下:
use pubs select * from titles inner join titleauthor on titles.title_id=titleauthor.title_id
实现的过程如图1所示。
图1内连接时一对一的关系
说明:表“titles”和“titleauthor”都是SQL Server自带的数据库“pubs”的表。由于两个表中的title_id列都是具有惟一值的索引,所以两个表的内连接属于一对一的关系。
2.多对一关系
当连接的两个表,其中一个表要连接的列出现重复值,另外一个表的值是惟一的。这时连接的两个表之间的出现了多对一的关系。
下面“student”表中的“学号”具有惟一值,而“grade”成绩表中的“学号”有重复值。现在实现这两个表的内连接。在查询分析器中输入的SQL语句如下:
use student select * from grade join student on student.学号=grade.学号
实现的过程如图2所示。
图2内连接时多对一的关系
3.多对多关系
当连接的两个表,要连接的列都出现重复值,这时连接的两个表之间出现多对多的关系。
本例是SQL Server自带的数据库“pubs”,其中的两个表“titles”和“roysched”中的“royalty”列都有重复值,现在实现这两个表的内连接。在查询分析器中输入的SQL语句如下:
use pubs select * from titles inner join roysched on titles.royalty=roysched.royalty
实现的过程如图3所示。
图3内连接时多对多的关系