fork download
  1. DROP TABLE IF EXISTS Employees, Departments;
  2.  
  3. CREATE TABLE Departments (
  4. dept_id SERIAL PRIMARY KEY,
  5. dept_name VARCHAR(50)
  6. );
  7.  
  8. CREATE TABLE Employees (
  9. emp_id SERIAL PRIMARY KEY,
  10. emp_name VARCHAR(50),
  11. dept_id INT
  12. );
  13.  
  14. INSERT INTO Departments (dept_name) VALUES
  15. ('Engineering'),
  16. ('HR'),
  17. ('Finance');
  18.  
  19. INSERT INTO Employees (emp_name, dept_id) VALUES
  20. ('Alice', 1),
  21. ('Bob', 1),
  22. ('Charlie', 2),
  23. ('Diana', NULL),
  24. ('Eve', 4); -- Note: Dept 4 does NOT exist
  25.  
  26. INSERT INTO Employees (emp_name, dept_id) VALUES
  27. ('Hii', 3);
  28.  
  29. SELECT * FROM Departments;
  30. SELECT * FROM Employees;
  31.  
  32. -- Inner Join
  33.  
  34. SELECT e.emp_id, e.emp_name, d.dept_name
  35. FROM Employees e
  36. INNER JOIN Departments d ON e.dept_id = d.dept_id;
  37.  
  38. -- LEFT JOIN (LEFT OUTER JOIN)
  39.  
  40. SELECT e.emp_id, e.emp_name, d.dept_name
  41. FROM Employees e
  42. LEFT JOIN Departments d ON e.dept_id = d.dept_id;
  43.  
  44. -- RIGHT JOIN (RIGHT OUTER JOIN)
  45.  
  46. SELECT e.emp_id, e.emp_name, d.dept_name
  47. FROM Employees e
  48. RIGHT JOIN Departments d ON e.dept_id = d.dept_id;
  49.  
  50.  
  51.  
  52. -- FULL JOIN (FULL OUTER JOIN)
  53.  
  54. SELECT e.emp_id, e.emp_name, d.dept_name
  55. FROM Employees e
  56. FULL JOIN Departments d ON e.dept_id = d.dept_id;
  57.  
  58.  
  59. -- CROSS JOIN
  60.  
  61. SELECT e.emp_name, d.dept_name
  62. FROM Employees e
  63. CROSS JOIN Departments d;
  64.  
  65. -- SELF JOIN
  66.  
  67. ALTER TABLE Employees ADD COLUMN mentor_id INT;
  68.  
  69. UPDATE Employees SET mentor_id = 1 WHERE emp_id IN (2, 3);
  70.  
  71. SELECT * FROM employees;
  72.  
  73. SELECT e1.emp_name AS employee, e2.emp_name AS mentor
  74. FROM Employees e1
  75. JOIN Employees e2 ON e1.mentor_id = e2.emp_id;
  76.  
  77. -- USING vs ON
  78.  
  79. SELECT e.emp_name, d.dept_name
  80. FROM Employees e
  81. JOIN Departments d USING (dept_id);
  82.  
  83. SELECT e.emp_name, d.dept_name
  84. FROM Employees e
  85. JOIN Departments d ON e.dept_id = d.dept_id;
  86.  
  87. -- Questions
  88. -- Drop both tables, then create again and insert again (to revert the changes we made in explanation)
  89.  
  90. -- Q1
  91. -- How can you list all the departments which are assigned to 0 employees.
  92.  
  93. SELECT * from employees;
  94.  
  95. SELECT d.dept_name
  96. FROM departments d
  97. LEFT JOIN employees e ON d.dept_id = e.dept_id
  98. WHERE e.emp_id IS NULL;
Success #stdin #stdout #stderr 0.01s 5280KB
stdin
Standard input is empty
stdout
|Engineering
|HR
|Finance
|Alice|1
|Bob|1
|Charlie|2
|Diana|
|Eve|4
|Hii|3
|Alice|
|Bob|
|Charlie|
|Diana|
|Eve|
|Hii|
Alice|Engineering
Alice|HR
Alice|Finance
Bob|Engineering
Bob|HR
Bob|Finance
Charlie|Engineering
Charlie|HR
Charlie|Finance
Diana|Engineering
Diana|HR
Diana|Finance
Eve|Engineering
Eve|HR
Eve|Finance
Hii|Engineering
Hii|HR
Hii|Finance
|Alice|1|
|Bob|1|
|Charlie|2|
|Diana||
|Eve|4|
|Hii|3|
stderr
Error: near line 1: near ",": syntax error
Error: near line 46: RIGHT and FULL OUTER JOINs are not currently supported
Error: near line 54: RIGHT and FULL OUTER JOINs are not currently supported