📜  如何在SQL中比较两个不同表中的列

📅  最后修改于: 2022-05-13 01:54:46.583000             🧑  作者: Mango

如何在SQL中比较两个不同表中的列

在这里,我们将看看如何在 SQL 中比较两个不同表的列。我们将举几个例子来看看我们如何以不同的方式做到这一点。

概述 :
在此,我们将了解执行所需操作的 SQL 查询概述 如何在 SQL 中比较两个不同表中的列。我们将在示例的帮助下理解每个概念。

步骤 1:创建数据库:
要创建数据库,请使用以下 SQL 查询,如下所示。

句法 -

create database_name;

例子 -



create STUDENTS_DATA

步骤 2:使用数据库:
使用这个数据库如下。

句法 -

use database_name;

例子 -

use STUDENT_DATA

步骤 3:创建表:
创建用于进行查询的表如下。

表 1:语法 –

create table table_name
(
column1 type, 
column2 type, 
... 
);

例子 -

create table studentData1 
(
roll_number int primary key, 
firstname varchar(100), 
lastname varchar(100), 
marks int
);

步骤 4:插入记录:
在表 studentData1 中插入记录如下。
句法 -

insert into table_name(column1, column2 ...) values (value1, value2 ...);

插入 studentData1 表 -



insert into studentData1 (roll_number, firstname, lastname, marks) 
values (1, 'albert', 'einstein',356);
insert into studentData1 (roll_number, firstname, lastname, marks) 
values (2, 'isaac', 'newton',412);
insert into studentData1 (roll_number, firstname, lastname, marks) 
values (3, 'marie', 'curie',436);
insert into studentData1 (roll_number, firstname, lastname, marks) 
values (4, 'philip', 'jsam',389);
insert into studentData1 (roll_number, firstname, lastname, marks) 
values (5, 'tom', 'jsam',452);
insert into studentData1 (roll_number, firstname, lastname, marks) 
values (6, 'tucker', 'jose',412);
insert into studentData1 (roll_number, firstname, lastname, marks) 
values (7, 'drawn', 'csate',389);

第 5 步:创建 table2:
在这里,我们将使用 SQL 查询创建 studentData2,如下所示。

create table studentData2 
(
id int primary key, 
firstname varchar(100), 
lastname varchar(100), 
marks int
);

步骤 6:插入记录:
在表 studentData2 中插入记录如下。

insert into studentData2 (id, firstname, lastname, marks) 
values (2, 'isaac', 'newton',412);
insert into studentData2 (id, firstname, lastname, marks) 
values (3, 'marie', 'curie',436);
insert into studentData2 (id, firstname, lastname, marks) 
values (6, 'tucker', 'jose',412);
insert into studentData2 (id, firstname, lastname, marks) 
values (4, 'philip', 'jsam',389);

示例-1:
使用 where 子句比较两个不同表的列。它无法处理空值。
句法 :
(选择所有列的所有记录)

select * from table1, table 
where 
table1.col1 = table2.col2 and table1.col1 > someValue;

语法(替代):
(从表中选择特定列)

select t1.col1, t2.col2,t3. col3 ...., t2.col1, t2.col2, t2.col3....  
from table1 t1, table t2 where t1.col1 = t2.col2 and t1.col1 <> t2.col2;

询问 -

select * from studentData1, studentData2 
where studentData1.roll_number = studentData2.id;

输出 :
根据 roll_number 和 id 的比较结果如下。

roll_numberfirstnamelastnamemarksid
2isaacnewton4122
3mariecurie4363
4philipjsam3894
6tuckerjose4126

示例 2 :
使用连接按优先级在表中比较列。例如,左连接返回第一个表中的所有值和第二个表中不匹配记录的空值。同样,我们可以根据我们的要求使用右联接、内联接、完全联接和自联接。在下面的示例中,我们使用左连接基于 roll_number 和 id 列比较了两个表。

句法 -

select t1.col1, t1.col2... , t2.col1, t2.col2... , 
from table1 as t1 left 
join table2 as t2 on 
tabe1.col1 = table2.col1;

询问 -

select a.roll_number, a.firstname, b.id 
from studentData1 as a left 
join 
studentData2 as b on 
a.roll_number = b.id;

输出 :
根据左表即 sutdentData1 进行联接,如下所示。

roll_numberfirstnameid
1albert 
2isaac2
3marie3
4philip4
5tom 
6tucker6
7drawn 

示例 3 :
UNION 允许我们比较两种相同类型的表或数据集。一旦我们可以拥有两个表的联合,我们就可以使用联合来比较列。它可以快速检查任一表中丢失或更改的数据。它能够处理 where 子句无法处理的空值。

笔记 -
这仅在我们有相同类型的表时使用。

句法 -

select col1, col2, col3 ....  
from (select col1, col2, col3 ... 
from Table1 union all select col1, col2, col3 ... 
from Table2) 
cmpr order by ID;

例子 -

select * from 
(select * from studentData1 
where roll_number > 4 
union all 
select * from studentData2 where id < 6) 
cmpr order by marks;

输出 :
如下比较 roll_number > 4 和 id < 6 的相同记录。

roll_numberfirstnamelastnamemarks
drawncsate389
4philipjsam389
6tuckerjose412
3mariecurie436
5tomjsam452