๐ ์ฐธ๊ณ ์ฌํญ
- Postgresql ์์ฃผ๋ก ์์ฑ
์ฟผ๋ฆฌ ํ๋์ ํ๊ฒ๋ ์ด์
๋ง์ด๊ทธ๋ ์ด์ ์์ ์ค ๊ธ๊ฒฉํ๊ฒ ๋์ด๋ ๋ฐ์ดํฐ๋ก ์ธํด ์์คํ ๋ชฉ๋ก ์กฐํํ ๋ ๋ง์ ์๊ฐ์ด ์์๋๋ ํ์๋ฐ๊ฒฌ
์์ธ
1. ๊ณผ๋ํ JOIN ์ผ๋ก ์ธํ ์์ธ
2. WHERE ์ ์ LIKE๋ฌธ์ ์๋ค๋ก % ๋ถ์ฌ ์ฌ์ฉ์ผ๋ก ์ธํ ์์ธ
3. ํน์ ์กฐ๊ฑด์ ์์๋ง ์ฌ์ฉํ๋ ๋ถํ์ํ ํ ์ด๋ธ JOIN์ผ๋ก ์ธํ ์์ธ
4. ๊ณผ๋ํ ์ง๊ณํจ์ ์ฌ์ฉ์ผ๋ก ์ธํ ์์ธ
ํด๊ฒฐ
1. WITH์ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค ์ ์ฉ๋๋ ์คํ ์ฐ์ ์์๋ณ๋ก ์ชผ๊ฐ์ ํด๊ฒฐ
โซ ์๋ณธ
SELECT *
FROM A a
JOIN B b ON a.id = b.id
JOIN C c ON a.id = c.id
...
WHERE a.id = 'A'
...
LIMIT 10 OFFSET 0
โซ ์์ ๋ณธ
WITH withA AS (
SELECT a.id, COUNT(a.id) AS a_cnt
FROM A a
WHERE a.id = 'A'
...
GROUP BY a.id
)
SELECT *
FROM withA wa
JOIN B b ON wa.id = b.id
...
LIMIT 10 OFFSET 0
2. WHERE ์ ์กฐ๊ฑด์ ์ธ๋ฑ์ค ์ฌ์ฉํ ์ ์๋๋ก ์์ (์์ % ์ ๊ฑฐ)
โซ ์๋ณธ
SELECT * FROM TEST
WHERE test_name like '%ํ
์คํธ%'
โซ ์์ ๋ณธ
SELECT * FROM TEST
WHERE test_name like 'ํ
์คํธ%'
3. ํน์ ์กฐ๊ฑด์๋ง ์ฌ์ฉํ๋ ํ ์ด๋ธ ์กฐ๊ฑด ์กฐํํ ๋๋ง ์ฌ์ฉํ๋๋ก ๋ถ๋ฆฌ
โซ ์๋ณธ
SELECT test_id, test_name
FROM TEST t
LEFT JOIN T_USER tu ON t.test_id = tu.test_id
WHERE t.test_name like 'ํ
์คํธ%'
<if test="userName != null and userName != ''">
AND tu.user_name = #{userName}
</if>
โซ ์์ ๋ณธ
SELECT test_id, test_name
FROM TEST t
WHERE t.test_name like 'ํ
์คํธ%'
<if test="userName != null and userName != ''">
AND EXIST (
SELECT 1
FROM T_USER tu
WHERE tu.test_id = t.test_id
AND tu.user_name = #{userName}
)
</if>
'SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SQL] Oracle Flashback Query ์ ๋ฆฌ (0) | 2025.10.14 |
|---|---|
| [SQLD] ์ค๋ต์ ๋ฆฌ (1) | 2025.05.30 |
| [SQL] ์์ฃผ ์ฐ๋ MSSQL ํจ์ ์ ๋ฆฌ (0) | 2025.03.27 |
| [SQL] ์์ฃผ ์ฐ๋ PostgreSql ํจ์ ์ ๋ฆฌ (0) | 2022.09.02 |
| [SQL] ์์ฃผ ์ฐ๋ Mysql ํจ์ ์ ๋ฆฌ (3) | 2021.08.27 |