📜  SQL中如何比较同一个表中的行和列

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

SQL中如何比较同一个表中的行和列

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

要创建数据库:

Syntax :
CREATE database_name;
CREATE Shopping

要使用此数据库:

Syntax :
USE database_name;
USE Shopping

创建用于查询的表:

Syntax :
CREATE TABLE table_name(column1 TYPE, column2 TYPE ... );
CREATE TABLE orders(order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATE, amount INT, customer VARCHAR(50), city VARCHAR(50));

在student表中插入记录:



Syntax :
INSERT INTO table_name(column1, column2 ...) VALUES (value1, value2 ...);
INSERT INTO orders(order_date, amount, customer, city)
 VALUES
('2020-10-01',100, 'john', 'london'),
('2020-10-02',125,'philip', 'ohio'),
('2020-10-03',140,'jose', 'barkley'),
('2020-10-04',160, 'tom', 'north carolina');
('2020-11-02',128,'duck', 'ohio'),
('2020-09-04',150, 'tucker', 'north carolina');

示例 1:

比较同一表的行。在示例中,我们正在比较直接行,通过比较连续两天的金额来计算一天的销售额。

Syntax for inner join :
SELECT column_name(s)
FROM table1 t1 INNER JOIN table1 t2 
on t1.column1 = t2.column1;
SELECT g1.order_id, g1.order_date,g1.amount, (g2.amount - g1.amount) AS daily_amount 
FROM orders g1 INNER JOIN orders g2 ON g2.order_id = g1.order_id + 1;

输出 :

示例 2:

在连接的帮助下,可以比较同一个表中的列。这里我们使用 SQL 中的 self join 比较同一城市的所有客户。自联接是一种常规联接,其中表自行联接。类似地,一个表可以通过左连接、右连接、内连接和全连接进行连接。

Syntax for self join :
SELECT column_name(s)
FROM table1 t1, table1 t2
WHERE condition1 and condition2 ... ;
SELECT A.customer AS CustomerName1, B.customer AS CustomerName2, A.city
FROM orders A, orders B
WHERE A.order_id <> B.order_id
AND A.city = B.city 
ORDER BY A.city;

输出 :

示例 3:

在这个例子中,我们比较第一个 order_id 的数量大于第二个 order_id 的数量的所有 order_id。我们正在使用自连接来执行同一个表中的列的比较。

SELECT A.customer AS CustomerName1, B.customer AS CustomerName2, 
A.order_id AS order_id_1, B.order_id AS order_id_2, A.amount AS Amount_by_1, 
B.amount AS Amount_by_2, (A.amount - B.amount) AS difference
FROM orders A, orders B
WHERE A.order_id <> B.order_id
AND A.amount > B.amount;

输出 :