0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 CREATE TEMPORARY VIEW EMP AS SELECT * FROM VALUES
0017 (100, "emp 1", date "2005-01-01", 100.00D, 10),
0018 (100, "emp 1", date "2005-01-01", 100.00D, 10),
0019 (200, "emp 2", date "2003-01-01", 200.00D, 10),
0020 (300, "emp 3", date "2002-01-01", 300.00D, 20),
0021 (400, "emp 4", date "2005-01-01", 400.00D, 30),
0022 (500, "emp 5", date "2001-01-01", 400.00D, NULL),
0023 (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100),
0024 (700, "emp 7", date "2010-01-01", 400.00D, 100),
0025 (800, "emp 8", date "2016-01-01", 150.00D, 70)
0026 AS EMP(id, emp_name, hiredate, salary, dept_id);
0027
0028 CREATE TEMPORARY VIEW DEPT AS SELECT * FROM VALUES
0029 (10, "dept 1", "CA"),
0030 (20, "dept 2", "NY"),
0031 (30, "dept 3", "TX"),
0032 (40, "dept 4 - unassigned", "OR"),
0033 (50, "dept 5 - unassigned", "NJ"),
0034 (70, "dept 7", "FL")
0035 AS DEPT(dept_id, dept_name, state);
0036
0037 CREATE TEMPORARY VIEW BONUS AS SELECT * FROM VALUES
0038 ("emp 1", 10.00D),
0039 ("emp 1", 20.00D),
0040 ("emp 2", 300.00D),
0041 ("emp 2", 100.00D),
0042 ("emp 3", 300.00D),
0043 ("emp 4", 100.00D),
0044 ("emp 5", 1000.00D),
0045 ("emp 6 - no dept", 500.00D)
0046 AS BONUS(emp_name, bonus_amt);
0047
0048
0049
0050 SELECT *
0051 FROM emp,
0052 dept
0053 WHERE emp.dept_id = dept.dept_id
0054 AND EXISTS (SELECT *
0055 FROM bonus
0056 WHERE bonus.emp_name = emp.emp_name);
0057
0058
0059
0060 SELECT *
0061 FROM emp
0062 JOIN dept
0063 ON emp.dept_id = dept.dept_id
0064 WHERE EXISTS (SELECT *
0065 FROM bonus
0066 WHERE bonus.emp_name = emp.emp_name);
0067
0068
0069
0070 SELECT *
0071 FROM emp
0072 LEFT JOIN dept
0073 ON emp.dept_id = dept.dept_id
0074 WHERE EXISTS (SELECT *
0075 FROM bonus
0076 WHERE bonus.emp_name = emp.emp_name);
0077
0078
0079
0080 SELECT *
0081 FROM emp,
0082 dept
0083 WHERE emp.dept_id = dept.dept_id
0084 AND NOT EXISTS (SELECT *
0085 FROM bonus
0086 WHERE bonus.emp_name = emp.emp_name);
0087
0088
0089
0090
0091 SELECT *
0092 FROM bonus
0093 WHERE EXISTS (SELECT *
0094 FROM emp
0095 JOIN dept
0096 ON dept.dept_id = emp.dept_id
0097 WHERE bonus.emp_name = emp.emp_name);
0098
0099
0100
0101 SELECT *
0102 FROM bonus
0103 WHERE EXISTS (SELECT *
0104 FROM emp
0105 RIGHT JOIN dept
0106 ON dept.dept_id = emp.dept_id
0107 WHERE bonus.emp_name = emp.emp_name);
0108
0109
0110
0111
0112 SELECT *
0113 FROM bonus
0114 WHERE EXISTS (SELECT dept.dept_id,
0115 emp.emp_name,
0116 Max(salary),
0117 Count(*)
0118 FROM emp
0119 JOIN dept
0120 ON dept.dept_id = emp.dept_id
0121 WHERE bonus.emp_name = emp.emp_name
0122 GROUP BY dept.dept_id,
0123 emp.emp_name
0124 ORDER BY emp.emp_name);
0125
0126
0127
0128 SELECT emp_name,
0129 Sum(bonus_amt)
0130 FROM bonus
0131 WHERE EXISTS (SELECT emp_name,
0132 Max(salary)
0133 FROM emp
0134 JOIN dept
0135 ON dept.dept_id = emp.dept_id
0136 WHERE bonus.emp_name = emp.emp_name
0137 GROUP BY emp_name
0138 HAVING Count(*) > 1
0139 ORDER BY emp_name)
0140 GROUP BY emp_name;
0141
0142
0143 SELECT emp_name,
0144 Sum(bonus_amt)
0145 FROM bonus
0146 WHERE NOT EXISTS (SELECT emp_name,
0147 Max(salary)
0148 FROM emp
0149 JOIN dept
0150 ON dept.dept_id = emp.dept_id
0151 WHERE bonus.emp_name = emp.emp_name
0152 GROUP BY emp_name
0153 HAVING Count(*) > 1
0154 ORDER BY emp_name)
0155 GROUP BY emp_name;
0156
0157
0158
0159
0160 SELECT *
0161 FROM emp
0162 WHERE EXISTS (SELECT *
0163 FROM dept
0164 WHERE dept_id < 30
0165 UNION
0166 SELECT *
0167 FROM dept
0168 WHERE dept_id >= 30
0169 AND dept_id <= 50);
0170
0171
0172
0173 SELECT *
0174 FROM emp
0175 WHERE EXISTS (SELECT *
0176 FROM dept
0177 WHERE dept_id < 30
0178 INTERSECT
0179 SELECT *
0180 FROM dept
0181 WHERE dept_id >= 30
0182 AND dept_id <= 50);
0183
0184
0185
0186 SELECT *
0187 FROM emp
0188 WHERE NOT EXISTS (SELECT *
0189 FROM dept
0190 WHERE dept_id < 30
0191 INTERSECT
0192 SELECT *
0193 FROM dept
0194 WHERE dept_id >= 30
0195 AND dept_id <= 50);
0196
0197
0198
0199 SELECT *
0200 FROM emp
0201 WHERE EXISTS (SELECT *
0202 FROM dept
0203 EXCEPT
0204 SELECT *
0205 FROM dept
0206 WHERE dept_id > 50)
0207 UNION ALL
0208 SELECT *
0209 FROM emp
0210 WHERE EXISTS (SELECT *
0211 FROM dept
0212 WHERE dept_id < 30
0213 INTERSECT
0214 SELECT *
0215 FROM dept
0216 WHERE dept_id >= 30
0217 AND dept_id <= 50);
0218
0219
0220
0221 SELECT *
0222 FROM emp
0223 WHERE EXISTS (SELECT *
0224 FROM dept
0225 EXCEPT
0226 SELECT *
0227 FROM dept
0228 WHERE dept_id > 50)
0229 UNION
0230 SELECT *
0231 FROM emp
0232 WHERE EXISTS (SELECT *
0233 FROM dept
0234 WHERE dept_id < 30
0235 INTERSECT
0236 SELECT *
0237 FROM dept
0238 WHERE dept_id >= 30
0239 AND dept_id <= 50);
0240