SET运算符组合了多个SELECT语句的结果.这可能看起来类似于Joins,但是连接组合来自多个表的列,而SET运算符组合来自多个行的行.
每个SELECT语句的列数应相同.
每个SELECT的数据类型必须兼容.
ORDER BY只应包含在最终的SELECT语句中.
UNION语句用于组合多个SELECT语句的结果.它会忽略重复.
以下是UNION语句的基本语法.
SELECT col1, col2, col3… FROM <table 1> [WHERE condition] UNION SELECT col1, col2, col3… FROM <table 2> [WHERE condition];
考虑以下员工表和工资表.
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 2007年4月25日 | 2 | 3/5/1983 |
103 | Peter | Paul | 2007年3月21日 | 2 | 4/1/1983 |
104 | Alex | Stu art | 2008年2月1日 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
以下UNION查询结合了EmployeeNo v从员工和工资表中提取.
SELECT EmployeeNo FROM Employee UNION SELECT EmployeeNo FROM Salary;
执行查询时,它会产生以下输出.
EmployeeNo ----------- 101 102 103 104 105
UNION ALL语句类似于UNION,它结合了包含重复行的多个表的结果.
以下是UNION ALL语句的基本语法.
SELECT col1, col2, col3… FROM <table 1> [WHERE condition] UNION ALL SELECT col1, col2, col3… FROM <table 2> [WHERE condition];
以下是UNION ALL语句的示例.
SELECT EmployeeNo FROM Employee UNION ALL SELECT EmployeeNo FROM Salary;
执行上述查询时,会产生以下输出.您可以看到它也返回重复项.
EmployeeNo ----------- 101 104 102 105 103 101 104 102 103
INTERSECT命令还用于组合多个SELECT语句的结果.它返回第一个SELECT语句中的行,这些SELECT语句在第二个SELECT语句中具有相应的匹配项.换句话说,它返回两个SELECT语句中存在的行.
以下是INTERSECT语句的基本语法.
SELECT col1, col2, col3… FROM <table 1> [WHERE condition] INTERSECT SELECT col1, col2, col3… FROM <table 2> [WHERE condition];
以下是INTERSECT语句的示例.它返回两个表中都存在的EmployeeNo值.
SELECT EmployeeNo FROM Employee INTERSECT SELECT EmployeeNo FROM Salary;
执行上述查询时,返回以下记录. EmployeeNo 105被排除在外,因为它在SALARY表中不存在.
EmployeeNo ----------- 101 104 102 103
MINUS/EXCEPT命令组合来自多个表的行,并返回第一个SELECT但不在第二个SELECT中的行.它们都返回相同的结果.
以下是MINUS语句的基本语法.
SELECT col1, col2, col3… FROM <table 1> [WHERE condition] MINUS SELECT col1, col2, col3… FROM <table 2> [WHERE condition];
以下是MINUS语句的示例.
SELECT EmployeeNo FROM Employee MINUS SELECT EmployeeNo FROM Salary;
执行此查询时,它返回以下记录.
EmployeeNo ----------- 105