📖 Thiết kế Cơ sở dữ liệu
75 phút

SQL Queries Nâng cao

JOINs

INNER JOIN

SELECT users.name, orders.order_date, orders.total_amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;

LEFT JOIN

SELECT users.name, orders.order_date
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

RIGHT JOIN

SELECT users.name, orders.order_date
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

FULL OUTER JOIN

SELECT users.name, orders.order_date
FROM users
FULL OUTER JOIN orders ON users.id = orders.user_id;

Subqueries

Subquery trong WHERE

SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

Subquery trong FROM

SELECT department, AVG(avg_salary) as dept_avg_salary
FROM (SELECT department_id as department, AVG(salary) as avg_salary
      FROM employees
      GROUP BY department_id) as dept_salaries
GROUP BY department;

Window Functions

ROW_NUMBER()

SELECT name, salary,
       ROW_NUMBER() OVER (ORDER BY salary DESC) as rank
FROM employees;

RANK() và DENSE_RANK()

SELECT name, salary, department,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank,
       DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_dense_rank
FROM employees;

SUM() với OVER()

SELECT name, salary, department,
       SUM(salary) OVER (PARTITION BY department) as dept_total_salary,
       salary * 100.0 / SUM(salary) OVER (PARTITION BY department) as salary_percentage
FROM employees;

Common Table Expressions (CTEs)

WITH department_stats AS (
  SELECT department_id, 
         AVG(salary) as avg_salary,
         COUNT(*) as employee_count
  FROM employees
  GROUP BY department_id
)
SELECT d.name as department_name,
       ds.avg_salary,
       ds.employee_count
FROM departments d
JOIN department_stats ds ON d.id = ds.department_id
WHERE ds.avg_salary > 50000;

Bài tập thực hành

Hãy thực hành với các câu truy vấn phức tạp!

📝 Bài tập (2)

  1. Viết queries phân tích dữ liệu bán hàng

  2. Sử dụng window functions để phân tích dữ liệu nhân sự

Khóa học "Thiết kế Cơ sở dữ liệu"