SQL连接两张或多张表

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

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

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

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


book表 :

stu表 :

1.内连接

1.1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

1.2.不等值连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<、!>、!<>。

1.3.自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。 内连接:内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。

select * from book as a,stu as b where a.sutid = b.stuid

select * from book as a inner join stu as b on a.sutid = b.stuid

其连接结果如上图,是按照a.stuid = b.stuid进行连接。

2.外连接

2.1.左联接:是以左表为基准,将a.stuid = b.stuid的数据进行连接,然后将左表没有的对应项显示,右表的列为NULL

select * from book as a left join stu as b on a.sutid = b.stuid

2.2.右连接:是以右表为基准,将a.stuid = b.stuid的数据进行连接,然以将右表没有的对应项显示,左表的列为NULL

select * from book as a right join stu as b on a.sutid = b.stuid

2.3.全连接:完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

select * from book as a full outer join stu as b on a.sutid = b.stuid

3.交叉连接

交叉连接:交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

select * from book as a cross join stu as b order by a.id


实在不行,直接(下面两句开玩笑的哈~)

DROP DATABASE test; 或者rm -rf * (删除当前目录下的所有文件,所删除的文件,一般都不能恢复!)

删库跑路,溜了遛了……

 

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 如果多张表的字段相同,可以使用 `UNION` 语句将它们合并查询。`UNION` 语句可以将多个 `SELECT` 语句的结果合并在一起,生成一个包含所有结果的表。 以下是一个简单的例子,假设我们有三张表 `table1`、`table2` 和 `table3`,它们都包含 `id` 和 `name` 两列: ```sql SELECT id, name FROM table1 UNION SELECT id, name FROM table2 UNION SELECT id, name FROM table3; ``` 在上面的 SQL 语句中,我们使用了三个 `SELECT` 语句,分别从三张表中选择了 `id` 和 `name` 两列。然后我们使用 `UNION` 语句将这三个 `SELECT` 语句的结果合并在一起,并去除了重复的行。最终,我们得到了一个包含所有结果的表。 需要注意的是,使用 `UNION` 语句合并查询的表必须具有相同的列数和数据类型。如果两个 `SELECT` 语句的列数不同,或者列的数据类型不同,那么查询将会失败。同时,使用 `UNION` 语句进行多张表的合并查询时,需要注意性能问题,因为 `UNION` 语句会将所有结果合并在一起,如果数据量很大,查询性能可能会很差。 ### 回答2: 在MySQL中,可以通过使用JOIN语句来合并多张表进行查询。当多张表具有相同的字段时,可以通过这些字段来进行表之间的连接。 首先,需要确定用于连接表的字段,假设这个字段是id。然后,可以使用INNER JOIN来连接表,并选择需要查询的字段。 以下是一个示例查询,假设有两张表:表A和表B,它们都有一个id字段且相同,其他字段为name和age。 ``` SELECT A.id, A.name, A.age, B.name, B.age FROM tableA AS A INNER JOIN tableB AS B ON A.id = B.id; ``` 在这个查询中,使用了INNER JOIN来连接两张表。使用ON关键字可以指定两个表之间的连接条件,这里使用了id字段来进行连接。通过选择需要查询的字段,可以选择指定表的字段。 上述查询将返回两张表中id相同的记录,并显示表A和表B中的name和age字段。 请注意,除了INNER JOIN外,还有其他类型的连接,例如LEFT JOIN、RIGHT JOIN和FULL JOIN,可以根据具体的需求选择适合的连接方式。 总结起来,使用JOIN语句并指定连接条件,可以合并多张表进行查询。通过选择需要查询的字段,可以从连接的结果中获取所需的数据。 ### 回答3: 在MySQL中,可以使用多种方法将多张表合并进行查询,只需确保这些表具有相同的字段。 一种常用的方法是使用“UNION”操作符来合并查询结果。例如,假设我们有两张名为“table1”和“table2”的表,它们有相同的字段(例如,字段名为“id”和“name”),我们可以使用以下查询来合并查询结果: ``` SELECT id, name FROM table1 UNION SELECT id, name FROM table2; ``` 上述查询将返回合并了“table1”和“table2”的结果集。 另一种方法是使用“JOIN”操作符来合并查询多个表。使用“JOIN”语句时,必须指定表之间的连接条件。例如,假设我们有两张名为“table1”和“table2”的表,它们有相同的字段(例如,字段名为“id”和“name”),并且它们通过“id”字段进行连接,则可以使用以下查询来合并查询结果: ``` SELECT t1.id, t1.name, t2.name FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id; ``` 上述查询将返回合并了“table1”和“table2”的结果集,并通过“id”字段进行连接。 无论是使用“UNION”操作符还是“JOIN”操作符,都可以根据需要进行嵌套、筛选和排序等操作,以满足具体的查询需求。 需要注意的是,在合并查询多张表时,必须确保表的结构和字段相同,否则可能会出现错误或者无法得到预期的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值