MySQL
Nested Queries (subqueries)
SELECT S_ID FROM STUDENT_COURSE �WHERE C_ID IN (� SELECT C_ID FROM COURSE WHERE C_NAME IN ('DSA', 'DBMS')�);
SELECT S_NAME FROM STUDENT S�WHERE EXISTS (� SELECT 1 FROM STUDENT_COURSE SC� WHERE S.S_ID = SC.S_ID AND SC.C_ID = 'C1'�);
JOINS
SET Operations
These 3 operations can be extended to multiple rows set
SELECT emp_name, designation, manager_id
FROM employee_details
EXCEPT
SELECT emp_name, designation, manager_id
FROM employee_info;
GROUP BY & HAVING
SELECT
product_line,
AVG(unit_price) AS avg_price,
SUM(quantity) AS tot_pieces,
SUM(total) AS total_gain
FROM sales
GROUP BY product_line
HAVING SUM(total) > 40000
ORDER BY total_gain DESC
INTEGRITY CONSTRAINTS
Window Functions
SELECT department, SUM(salary)
FROM employees
GROUP BY department;
This returns one row per department
SELECT
name,
department,
salary,
AVG(salary) OVER (PARTITION BY department) AS dept_avg
FROM employees;
Name | Department | Salary | dept_avg |
Alice | HR | 5000 | 4500 |
Bob | HR | 4000 | 4500 |
Carol | IT | 6000 | 5500 |
Dave | IT | 5000 | 5500 |
Common Table Expressions (CTEs)
WITH note AS ( -- write the CTE
SELECT AVG(salary) AS avg_sal
FROM employees
)
SELECT name, salary -- Step-2: Read
FROM employees, note
WHERE salary > note.avg_sal;
id | name | Salary |
1 | Alice | 50000 |
2 | Bob | 80000 |
3 | John | 30000 |
Transactions
START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE name = 'You’;
UPDATE accounts SET balance = balance + 500 WHERE name = 'Friend’;
COMMIT;