Bảng tra cứu nhanh SQL Joins
Tài liệu tra cứu SQL joins có thể tìm kiếm và in: inner, left, right, full, anti và semi joins, self joins, ON và WHERE, LATERAL. Miễn phí.
Basic join types
9SELECT * FROM a INNER JOIN b ON a.id = b.a_id;
SELECT * FROM a LEFT JOIN b ON a.id = b.a_id;
SELECT * FROM a RIGHT JOIN b ON a.id = b.a_id;
SELECT * FROM a FULL OUTER JOIN b ON a.id = b.a_id;
JOIN = INNER JOIN
LEFT OUTER JOIN = LEFT JOIN
LEFT JOIN ... UNION ... RIGHT JOIN ...
ON a.id = b.a_id AND a.type = b.type
ON a.qty BETWEEN p.min_qty AND p.max_qty
Anti-joins (no match)
8LEFT JOIN b ON a.id = b.a_id WHERE b.a_id IS NULL
WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)
WHERE a.id NOT IN (SELECT a_id FROM b)
WHERE a.id NOT IN (SELECT a_id FROM b WHERE a_id IS NOT NULL)
RIGHT JOIN a ... WHERE a.id IS NULL
SELECT id FROM a EXCEPT SELECT a_id FROM b;
users without orders = LEFT JOIN + IS NULL
Prefer NOT EXISTS over NOT IN
Semi-joins (has a match)
8WHERE EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)
WHERE a.id IN (SELECT a_id FROM b)
JOIN b ... GROUP BY a.id
SELECT DISTINCT a.* FROM a JOIN b ON ...
EXISTS stops at the first match
EXISTS (SELECT 1 ...) vs (SELECT * ...)
IN: uncorrelated / EXISTS: correlated
users WITH orders = EXISTS subquery
Self joins
8FROM emp e JOIN emp m ON e.manager_id = m.id
FROM emp e LEFT JOIN emp m ON e.manager_id = m.id
SELECT e.name, m.name AS manager FROM ...
ON a.id < b.id
ON a.id <> b.id
ON b.day = a.day + INTERVAL 1 DAY
ON a.city = b.city AND a.id <> b.id
WITH RECURSIVE tree AS (... UNION ALL ...)
Cross & multi-table joins
8SELECT * FROM sizes CROSS JOIN colors;
FROM sizes, colors
FROM users u JOIN orders o ON ... JOIN items i ON ...
JOIN dates d CROSS JOIN users u LEFT JOIN ...
u LEFT JOIN o ON ... LEFT JOIN i ON i.o_id = o.id
u LEFT JOIN o ... INNER JOIN i ON i.o_id = o.id
FROM a JOIN (b LEFT JOIN c ON ...) ON ...
Written order is logical, not execution order
ON vs WHERE (the gotcha)
8LEFT JOIN b ON a.id = b.a_id AND b.status = 1
LEFT JOIN b ON a.id = b.a_id WHERE b.status = 1
WHERE b.a_id IS NULL OR b.status = 1
LEFT JOIN b ON ... AND a.type = 'x'
WHERE a.type = 'x'
INNER JOIN: ON and WHERE are equivalent
COALESCE(b.total, 0)
COUNT(b.id) vs COUNT(*)
USING, NATURAL & set ops
9JOIN b USING (user_id)
USING outputs ONE shared column
NATURAL JOIN b
Avoid NATURAL JOIN in production
SELECT ... UNION SELECT ...
UNION ALL
JOIN adds columns, UNION adds rows
INTERSECT
UNION needs same column count and types
LATERAL & performance
9CROSS JOIN LATERAL (SELECT ... WHERE b.a_id = a.id LIMIT 3) t
LEFT JOIN LATERAL (...) t ON TRUE
CROSS APPLY / OUTER APPLY
LATERAL sees columns of preceding tables
CREATE INDEX idx ON orders (user_id);
EXPLAIN SELECT ...;
Filter early: join the smallest set first
ON DATE(a.created_at) = b.day
Join on same-type, same-collation columns
Không có mục nào khớp với “:q”.
Giới thiệu về Bảng tra cứu nhanh SQL Joins
Bảng tra cứu SQL join này làm một việc thật kỹ: giải thích mọi cách kết hợp bảng. Tám phần bao gồm các kiểu join cơ bản, anti-join cho các hàng không khớp, semi-join cho các hàng có khớp, self join, cross join và join nhiều bảng, cái bẫy kinh điển ON so với WHERE, USING, NATURAL và các phép toán tập hợp, cùng LATERAL join kèm ghi chú về hiệu năng.
Join là nơi kết quả SQL âm thầm đi sai: LEFT JOIN bị lọc trong mệnh đề WHERE lặng lẽ trở thành INNER JOIN, và NOT IN với NULL không trả về gì. Những cái bẫy đó có hàng riêng ở đây, cạnh mẫu đúng nên dùng thay thế.
Như mọi bảng tra cứu trong nhóm này, nó miễn phí và chạy phía máy khách: lọc hàng trực tiếp bằng ô tìm kiếm, nhảy giữa các phần bằng mục lục cố định, sao chép bất kỳ câu lệnh nào chỉ với một cú nhấp và in trang để tham khảo tại bàn làm việc.
Cách sử dụng Bảng tra cứu nhanh SQL Joins
- Mở bảng và xem các phần, từ Các kiểu join cơ bản đến LATERAL & hiệu năng.
- Tìm một từ khóa như LEFT JOIN, EXISTS hoặc NOT IN để lọc mọi hàng trực tiếp.
- Đọc phần ON và WHERE trước khi gỡ lỗi LEFT JOIN trả về quá ít hàng.
- Nhấp vào một câu lệnh hoặc biểu tượng sao chép của nó để sao chép SQL vào khay nhớ tạm.
- Dùng In để có bản giấy của toàn bộ tài liệu tham khảo về join.