sql查询:使用内连接查询两张表的时候,如果左边表的一条记录对应了右边表的两条记录,结果显示排列问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询:使用内连接查询两张表的时候,如果左边表的一条记录对应了右边表的两条记录,结果显示排列问题相关的知识,希望对你有一定的参考价值。

就是查询到的结果会是怎么样排列的?我知道结果会显示两条记录,我认为是并列显示这两条记录不知道对不对?

参考技术A 呵呵,在任何时候,都没有并列的可能。
只要是2条以上,肯定是要排序的,要么就是按你定义的排序规则,要么就是默认主键排序的。追问

这个是我查询到的结果,我感觉这个不就是并列了么?请高人看看  呵呵!

追答

你的并列是指什么意思呢?这不是123行排序的吗?

参考技术B 我举个例子吧

2个表。

班级表 1行记录,
学生表 2行记录 (张三1行, 李四1行)

SELECT
*
FROM
班级表 JOIN 学生表 ON ( 班级表.班级代码 = 学生表.班级代码 )

这种情况下。

结果将包含 2行记录
张三1行, 李四1行追问

谢谢 那么排列的顺序是怎样的呢?能详细的说下嘛?

追答

排列顺序, 应该就是你

SELECT * FROM 学生表

结果显示的顺序。

追问

额 谢谢!

本回答被提问者采纳
参考技术C 楼上正解
如果你不确定它如何排列就在语句结尾添加order by子句,否则很可能这次看到这样,下次看到就那样了,当然这也看是什么数据库追问

mysql

SQL语句中两个表的连接

select * from A,B whereA.ID=B.ID
select * from A JOIN B ON A.ID=B.ID这两句没区别把?where ...and和join....on什么区别

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的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

参考技术A

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经测,数据成功写入。

参考技术B

一、外连接

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;

参考技术C (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查询:使用内连接查询两张表的时候,如果左边表的一条记录对应了右边表的两条记录,结果显示排列问题的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中使用连接查询

如何用SQL语句查询两张表中的相同字段数据

oracle 想把三张表关联起来,怎么关联?

在SQL语句中,如何把两张表的数据按时间排序查询?

多表查询

MySQL数据库操作联表查询事务