Sql 理解联合查询
我想知道是否有人可以向我解释这一点,如果我也能找到它的来源,那就太好了Sql 理解联合查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想知道是否有人可以向我解释这一点,如果我也能找到它的来源,那就太好了 USE AP; SELECT VendorName, VendorState FROM Vendors WHERE VendorState = 'CA' UNION SELECT VendorName, 'Outside CA' FROM Vendors WHERE VendorState <> 'CA' Order BY VendorName 我几乎可以用英语解释这个问题,我知道这个问题是这样的 从供应商表
USE AP;
SELECT VendorName, VendorState
FROM Vendors
WHERE VendorState = 'CA'
UNION
SELECT VendorName, 'Outside CA'
FROM Vendors
WHERE VendorState <> 'CA'
Order BY VendorName
我几乎可以用英语解释这个问题,我知道这个问题是这样的
从供应商表中选择VendorName和VendorState
显示位于加利福尼亚州的所有供应商州
加入
这就是我感到困惑的地方:
选择vendorName,'outside CA'-除了'outside CA'是一个字符串之外,它是什么,它是一个变量?如果vendorState值不是California,它如何知道用'Outside Ca'替换state值。让您困惑的是UNION子句。它本质上是将两个不同的选择连接到一组结果中
您可以查看MySQL手册以获得技术解释或更简单的解释,请尝试Dreded这里有两个因素: UNION将多个结果集添加到一起,在本例中为两个,即获取从多个查询返回的行,并将它们组合到单个结果集中。作为旁白,您应该使用UNION,因为它性能更好。注意union不是联接,与联接没有任何共同之处。连接是水平的,联合是垂直的。联合中的所有查询必须具有相同数据类型的相同数字列。但是,您只需要在第一个查询中为列添加别名。我给下面的第二个加了别名,这样它就可以在没有工会的情况下运行 您可以选择静态数据作为查询的一部分。”“External CA”是静态的,即对于该查询中的每一行都返回该值,因为正如您所注意到的,我们在该查询中排除了CA 因此您有两个查询,第一个是状态CA,第二个是状态非CA,第二个查询不是显示状态,而是显示静态值“CA之外”。这两个查询联合在一起,形成一个结果集 最好的理解方法是创建一个例子——我强烈建议您将来理解这个例子
DECLARE @Vendors TABLE (VendorName VARCHAR(32), VendorState CHAR(2));
INSERT INTO @Vendors (VendorName, VendorState)
VALUES
('Test 1','CA'),
('Test 2','CA'),
('Test 3','NY'),
('Test 4','NY');
SELECT VendorName, VendorState
FROM @Vendors
WHERE VendorState = 'CA'
UNION ALL
SELECT VendorName, 'Outside CA' VendorState
FROM @Vendors
WHERE VendorState <> 'CA'
ORDER BY VendorName;
如果删除联合,则会从两个查询中获得结果,例如:
卖方名称
卖方国家
测试1
加利福尼亚州
测试2
加利福尼亚州
正如其他人所说:
将两个查询的结果连接到单个结果集中。您可以控制结果集是否包含重复的行:
联合所有-包括重复项。
联合-排除重复项。
联合操作不同于联接:
并集连接两个查询的结果集。但工会是这样做的
不从从两个表中收集的列创建单独的行。A.
JOIN比较两个表中的列,以创建结果行
两个表中的列数。以下是基本规则
使用UNION组合两个查询的结果集:
列的编号和顺序在所有列中必须相同
查询
数据类型必须兼容
假设您的表中有以下值:
在查询中,第一个结果集是:
SELECT VendorName, VendorState
FROM Vendors
WHERE VendorState = 'CA'
这会给你一些类似的东西:
然后是第二个结果集
SELECT VendorName, 'Outside CA'
FROM Vendors
WHERE VendorState <> 'CA'
或者SQL Server,因为这是OP的要求。谢谢大家现在查看这些。非常感谢!,现在很有意义。我在这篇文章中学到了比整个章节更多的东西,你有什么推荐的来源吗?@EGAM抱歉,没有,不是在这个级别,只要找到教程,看看它们是否有用。太棒了,现在我知道要找什么应该很容易了,谢谢!case是一个表达式而不是一个语句:格式化文本比SO上的图像更受欢迎。\n这个特定示例效率低下,根本不需要联合,并且可以更简单地表示为SELECT VendorName,当VendorState='CA'然后VendorState ELSE'EXTER CA'结束时按VendorName;从供应商订购VendorState;。此外,即使在使用联合时,也考虑使用联合所有,因为联合力重复删除是不同的。
SELECT
VendorName
, CASE
WHEN VendorState <> 'CA' THEN 'Outside CA'
ELSE 'CA'
END
FROM #temp1
Order BY VendorName