-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathSubQueries.sql
More file actions
71 lines (62 loc) · 2.85 KB
/
Copy pathSubQueries.sql
File metadata and controls
71 lines (62 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
--Gets all transactions for everyone whose name begins with 'M' (INTERSECT)
SELECT * FROM Transactions
WHERE PersonID in
(SELECT PersonID FROM Person WHERE PersonName Like 'm%') --Gets IDs of Everyone whose name starts with 'M'
--Gets all transactions for everyone whose name does not begin with 'M' (INNER JOIN)
SELECT * FROM Transactions
WHERE PersonID in
(SELECT PersonID FROM Person WHERE PersonName not Like 'm%')
--Gets IDs of Everyone whose name does not start with 'M'
--Subtracts All IDs in the subquery from the Main Query Results (EXCEPT)
SELECT * FROM Transactions
WHERE PersonID not in
(SELECT PersonID FROM Person WHERE PersonName Like 'm%')
--Gets IDs of Everyone whose name starts with 'M'
----------------------------- Any/Some ----------------------------------
--Give the same result
SELECT * FROM Transactions
WHERE PersonID = ANY
(SELECT PersonID FROM Person WHERE PersonName Like 'c%')
SELECT * FROM Transactions
WHERE PersonID = SOME
(SELECT PersonID FROM Person WHERE PersonName Like 'c%')
SELECT * FROM Transactions
WHERE PersonID in
(SELECT PersonID FROM Person WHERE PersonName Like 'c%')
-----------------------------------------------------------------------------------------
--For negations ALL is better (similar to not in)
SELECT * FROM Transactions
WHERE PersonID <> ALL
(SELECT PersonID FROM Person WHERE PersonName Like 'c%')
SELECT * FROM Transactions
WHERE PersonID not in
(SELECT PersonID FROM Person WHERE PersonName Like 'c%')
-------------------------------------------------------------------------------------------
--Will return the results for Any Person Lower than the Smallest Number in the Subquery
SELECT * FROM Transactions
WHERE PersonID <= ANY
(SELECT PersonID FROM Person WHERE PersonName Like 'm%')
--Will return the results for ONLY PersonIDs Lower than the Largest Number in the Subquery
SELECT * FROM Transactions
WHERE PersonID <= ALL
(SELECT PersonID FROM Person WHERE PersonName Like 'm%')
--Get the Best Performing Employees of Each Dept
SELECT DeptName,PersonID,PersonName,Email,Amount,TransactionDate FROM
(SELECT DeptName,P.PersonID,PersonName,Email,Amount,TransactionDate,
RANK() OVER(PARTITION BY DeptName ORDER BY P.PersonID,Amount DESC) AS PersonRank FROM Departments D
JOIN Person P
ON D.DeptID = P.Department
JOIN Transactions T
ON P.PersonID = T.PersonID) AS EmployeeTrans
WHERE PersonRank <= 5
--Get the Worst Performing Employees of Each Dept
SELECT DeptName,PersonID,PersonName,Email,Amount,TransactionDate FROM
(SELECT TOP 100 PERCENT DeptName,P.PersonID,PersonName,Email,Amount,TransactionDate,
ROW_NUmber() OVER(PARTITION BY DeptName ORDER BY T.PersonID) AS PersonRank FROM Departments D
JOIN Person P
ON D.DeptID = P.Department
JOIN Transactions T
ON P.PersonID = T.PersonID
) AS EmployeeTrans
WHERE PersonRank < 5
ORDER BY DeptName,PersonID