数据库中的两个表如何进行内连接联查? (数据库两表联查内连接)

数据库是现代化的数据操作方式,很多企业和单位使用数据库管理系统对大量的信息进行存储和管理,如学生信息、商品信息、客户信息等。为了方便查询和分析,数据库中的数据通常被分为不同的表格。当需要获取两个或多个表格的信息时,就需要进行表格之间的连接操作。在本文中,将会探讨数据库中的两个表如何进行内连接联查。

1.什么是内连接联查?

内连接联查是用于联接两个或多个表格的方式之一。在内连接中,需要至少存在一种公共列,也就是两个表格至少存在一列的值是一样的。内连接在查询两个表格的相同记录时非常有用。比如,如果我们正在查询客户列表和订单列表,那么可能会使用连接来获取有关客户已经下的所有订单的信息。如果在表格之间没有任何匹配项,结果将是一个空表格。

2.如何进行内连接联查?

使用内连接联接表格需要使用 JOIN 关键字,并在后面跟随需要连接的表格名称,再指定连接条件。

2.1 INNER JOIN

INNER JOIN 是内连接的最基本的类型。当 INNER JOIN 两个表格时,只有两个表格之间有值匹配的记录才会被包含在结果集中。

示例:

假设我们有两个表格:订单表格(orders)和客户表格(customers)。我们需要生成一个表格,其中包含客户的姓名和客户的所有订单:

SELECT customers.customerName, orders.orderID

FROM customers

INNER JOIN orders

ON customers.customerID = orders.customerID

ORDER BY customers.customerName;

说明:

在这个查询中,我们使用了 INNER JOIN 将 customers (客户)和 orders (订单)这两个表格连接在一起。

后跟 ON 关键字的部分会指定连接条件,即我们希望使用客户 ID 列将两个表格连接在一起。

使用 SELECT 语句选择的列是我们想要显示出来的列,就是客户姓名和订单编号。

最后使用 ORDER BY 按照客户姓名排序。

2.2 LEFT JOIN

LEFT JOIN 是内连接的一个扩充类型,用于返回两个表格中所有的左表格数据和匹配的右表格数据。如果右表中没有与左表相关联的数据,则结果集中该行会显示空值。

示例:

假设我们继续使用上面的两个表格,并添加一个新的表格信息:货运表格(shippers)。我们需要生成一个新的表格,其中包括客户姓名、其订单的货运方式以及货运公司的名称:

SELECT customers.customerName, orders.orderID, shippers.shipperName

FROM customers

LEFT JOIN orders ON customers.customerID = orders.customerID

LEFT JOIN shippers ON orders.shipperID = shippers.shipperID

ORDER BY customers.customerName;

说明:

在这个查询中,我们使用了两个 LEFT JOIN 来连接所有三个表格。左连接关联的是客户表格(customers)和订单表格(orders),右连接关联的是订单表格(orders)和货运公司表格(shippers)。

后跟 ON 关键字的部分分别指定连接条件。使用客户 ID 和订单 ID 将两个表格连接在一起,使用货运商 ID 和订单 ID 将第二个表格连接在一起。

使用 SELECT 语句选择的列是我们想要显示出来的列,就是客户姓名、订单编号和货运公司的名称。因为这三个表格并不全部重叠,所以这个语句中要使用 LEFT JOIN。

最后使用 ORDER BY 按照客户姓名排序。

3.

内连接联查是在数据库中联接表格的一个重要方式。在两个或多个表格之间存在公共列时,可以使用 INNER JOIN 进行联接查询,如果需要将左表格所有数据与右表格中的部分数据进行联接查询,还可以使用 LEFT JOIN 进行查询。在实际应用中,可以根据实际的查询需要,选择合适的联接方式进行查询,以提高查询效率。

相关问题拓展阅读:

SQL语句中两个表的连接

一、外连接

1.左连接  left join 或 left outer join

SQL语句:select * from student left join score on student.Num=score.Stu_id;

2.右连接  right join 或 right outer join

SQL语句:select * from student right join score on student.Num=score.Stu_id;

3.完全外连接  full join 或 full outer join

SQL语句:select * from student full join score on student.Num=score.Stu_id;

通过上面这三种方法就可以把不同的表连接到一起,变成一张大表,之悄宽陵后的查询操作就简单一些了。

而对于select * from student,score;则尽量不使用此语句启戚,产生的结果过于繁琐。

二、内连接 

join 或 inner join

SQL语句:select * from student inner join score on student.Num=score.Stu_id;

此时的语句就相当于:select * from student,score where student.ID=course.ID;

三、交叉连接

cross join,没有where指定查询条件的子句的交叉联接将产生两表的笛卡尔积。

SQL语句:select * from student cross join score;

四、结构不同的表连接

当两表为多对多关系的时候,我们需要建立一巧雹个中间表student_score,中间表至少要有两表的主键。

SQL语句:select s.Name,C.Cname from student_score as sc left join student as s on s.Sno=sc.Sno left join score as c on c.Cno=sc.Cno

select C_name,grade from student left join score on student.Num=score.Stu_id where name=’李五一’;

红色部分即中间表,是两表所有内容的一张总表。

五、UNION操作符用于合并两个或多个select语句的结果集。

UNION内部的SELECT语句必须拥有相同数量的列,每个列也必须拥有相似的数据类型,每条SELECT语句中的列的顺序必须相同。

select Num from student union select Stu_id from score;

union操作符是默认查重的,如果允许重复的值,就可以使用union all 。对于两张结构相同的表,union也可以把他们合并成一张表:

select * from student1 union select *from student2;

where …and和join….on的区别

1、where 是在两个表join完成后,再附上where条件

2、而 and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件,同时会兼顾是left join还是right join。即 

假如是左洞迅连接的话,如果左边表的某条记录不符合连接条件,那么它不进行连接,但是仍然留在结果集中(此时右边部分的连接结果为NULL)。on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

3、建议尽量用where来过滤条件

比较:

1、用AND后的SQL和结果集。还是有383这条结果集

2、用where后的SQL和结果集。没有了这条记录

扩展资料

1、eft join :左连接,返回左表中所有的记录消颤氏以及右表中连接字段相等的记录。

2、right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。

3、inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。

4、full join:外连接,返回两个表中的行:left join + right join。

5、cross join:结果是笛卡尔积,就是之一个表的行数乘以第二个表的行数。

关键字: on

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、拿散where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

1、打开数据库管理工渗雹具,在数据库中新建两个表用于测试,这里,两个表的表结构要一样,分别建立TEST 和 TEST1。

2、开启新的SQL查询窗口,创建一个

存储过程

。意思是将insert到TEST中的数据插入到TEST1中。

3、单击‘执行’,一个名字为‘T’的触发就新建完成了。

4、展开表结构,我们也能看见刚才新建的

触发器

‘T’。中液

5、现在先在TEST表中插入一条数据做测试。INSERT INTO dbo.TEST VALUES(‘1′,’Simon’,’25’)。

6、提示插入数据成功两次,那么,卖喊物我们再来看看TEST1中的数据是否有及时更新过来。SELECT * FROM dbo.TEST1经测,数据成功写入。

(inner) join on 内链接 与 where 子查询 是一样的。

主昌禅要有区别是 left join right join 以及 full join,功能和性能跟where有差异

inner join

(等值连接)

只返回两个表中联结字段相等的行

WHERE 和INNER JOIN产生的连接关系,本质区别不详,结果一样。

(1)在效率上,Where可能具有和Inner join一样的效率。但基本可以肯定的(通过SQLServer帮助和其它资料,以及本测试)是Join的效率不比Where差。

(2)使用Join可以帮助检查语句中的无效或者误写的关联条件。

(3)从可读性角度来看,Where更直观。

left join

left outer join

(左联接)

返回包括左表中的所有记录和右表中联结字段相等的记录

左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

right join

right outer join

(右联接)

返回包括右表中的所有记录和左表中联结字段相等的记录

右向外联接是左向外联接的反向联接。将返回右表的所有行。如冲告果右表的某行在左表中没有匹配行,则将为左表返回空值。

full join

full outer join

(全连接)

完整外部联接返回左表和右表中的所有行

当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。

如果表之耐判尘间有匹配行,则整个结果集行包含基表的数据值。

Join & where总结:

where是两个表中的数据满足共同条件才会显示。

Jion on是相同条件匹配。

因此,除了inner join结果通常不一样。

数据库两表联查内连接的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于数据库两表联查内连接,数据库中的两个表如何进行内连接联查?,SQL语句中两个表的连接的信息别忘了在本站进行查找喔。


数据运维技术 » 数据库中的两个表如何进行内连接联查? (数据库两表联查内连接)