JPQL
JPQL : Java Persistence Query Language
๊ฐ์ฒด์งํฅ ์ฟผ๋ฆฌ ์ธ์ด๋ก, ํ ์ด๋ธ์ ๋์์ผ๋ก ์ฟผ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌํ๋ค.
SQL์ ์ถ์ํํด์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL์ ์์กดํ์ง ์๋๋ค.
JPQL์ ๊ฒฐ๊ตญ SQL๋ก ๋ณํ๋๋ค.
๊ธฐ๋ณธ ๋ชจ๋ธ๋ง
ํ๋ก์ ์
SELECT์ ์ ์กฐํํ ๋์์ ์ง์ ํ ์ ์๋ค. ํ๋ก์ ์ ๋์์ผ๋ก ์ํฐํฐ, ์๋ฒ ๋๋ ํ์ , ์ค์นผ๋ผ ํ์ (์ซ์, ๋ฌธ์ ๋ฑ ๊ธฐ๋ณธ ๋ฐ์ดํฐ)์ด ์๋ค.
์ํฐํฐ ํ๋ก์ ์
select m from Member m
select m.team from Member m์ฒ์์ ํ์์ ์กฐํํ๊ณ ๋ ๋ฒ์งธ๋ ํ์๊ณผ ์ฐ๊ด๋ ํ์ ์กฐํํ๋ค. ์ด๋ ๊ฒ ์กฐํํ ์ํฐํฐ๋ ์์์ฑ ์ปจํ ์คํธ์์ ๊ด๋ฆฌ๋๋ค.
๋ ๋ฒ์งธ๋ ๋ค์์ฒ๋ผ ๋ณ๊ฒฝํ ์๋ ์๋ค.
select t from Member m join m.team t์คํ๋๋ ์ฟผ๋ฆฌ๋ ๋๊ฐ๋ค. ์ฐจ์ด์ ์ด๋ผ๊ณ ํ๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ์ด ์ฟผ๋ฆฌ๋ ์กฐ์ธ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๊ตฌ๋๋ผ๊ณ ์ธ์งํ๋ ๊ฒ ์ ๋๋ค.
์๋ฒ ๋๋ ํ์ ํ๋ก์ ์
select o.address from Order o์๋ฒ ๋๋ ํ์ ์ ๊ฐ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ์กฐํ์ ์์์ ์ด ๋ ์ ์๋ค.
์ค์นผ๋ผ ํ์ ํ๋ก์ ์
์ด๋ ๊ฒ ๋ ๊ฐ์ ํ์
์ด ๋ค๋ฅธ ํ๋๋ฅผ ํ๋ก์ ์
ํด์ ํ์
์ ์ง์ ํ ์ ์์ผ๋ฏ๋ก TypeQuery๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
NEW๋ช
๋ น์ด๋ฅผ ํตํ์ฌ ๋ฐ๋ก DTO๋ก ๋ณํํ ์ ์๋ค.
ํจํค์ง ๋ช ์ ํฌํจํ ์ ์ฒด ํด๋์ค๋ช ์ ์ ๋ ฅํด์ผ ํ๋ค.
์์์ ํ์ ์ด ์ผ์ฐจํ๋ ์์ฑ์๊ฐ ํ์ํ๋ค.
ํ์ด์ง
JPA๋ ํ์ด์ง์ ๋ค์ API๋ก ์ถ์ํํ๋ค.
setFirstResult(int startPosition) : ์กฐํ ์์ ์์น(0๋ถํฐ ์์)
setMaxResult(int maxResult) : ์กฐํํ ๋ฐ์ดํฐ ์
์กฐ์ธ
๋ด๋ถ ์กฐ์ธ
ํ์๊ณผ ํ์ ๋ด๋ถ ์กฐ์ธํด์ teamName์ ์์๋ ํ์์ ์ฐพ๋๋ค. inner๋ ์๋ต ๊ฐ๋ฅํ๋ค.
์ธ๋ถ ์กฐ์ธ
outer๋ ์๋ต ๊ฐ๋ฅํ๋ค.
์ธํ ์กฐ์ธ
ON ์
ํ์๊ณผ ํ์ ์กฐ์ธํ ๋ ํ์ ์ด๋ฆ์ด "teamA"๋ก ์กฐ์ธ ๋์์ ํํฐ๋งํ ์ ์๋ค.
ํ์์ ์ด๋ฆ๊ณผ ํ์ ์ด๋ฆ์ด ๊ฐ์ ๋์์ ์ธ๋ถ ์กฐ์ธํ๋ค.
์๋ธ ์ฟผ๋ฆฌ
๋์ด๊ฐ ํ๊ท ๋ณด๋ค ๋ง์ ํ์์ ์ฐพ๋๋ค.
ํ ๊ฑด์ด๋ผ๋ ์ฃผ๋ฌธํ ๊ณ ๊ฐ์ ์ฐพ๋๋ค.
์๋ธ ์ฟผ๋ฆฌ ์ง์ ํจ์
[not] exists (subquery)
์๋ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ์กด์ฌํ๋ฉด ์ฐธ์ด๋ค. not์ ๋ฐ๋
all, any, some (subquery)
๋น๊ต ์ฐ์ฐ์์ ๊ฐ์ด ์ฌ์ฉํ๋ฉฐ all์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํด์ผ ์ฐธ์ด๊ณ any๋ some์ ํ๋๋ผ๋ ๋ง์กฑํ๋ฉด ์ฐธ์ด๋ค.
[not] in (subquery)
์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ์ค ํ๋๋ผ๋ ๊ฐ์ ๊ฒ์ด ์์ผ๋ฉด ์ฐธ์ด๋ค.
CASE ์
๊ธฐ๋ณธ CASE ์
COALESCE
์ฌ์ฉ์ ์ด๋ฆ์ด ์์ผ๋ฉด '์ด๋ฆ ์๋ ํ์'์ ๋ฐํํ๋ค.
NULLIF
์ฌ์ฉ์ ์ด๋ฆ์ด '๊ด๋ฆฌ์'๋ฉด null์ ๋ฐํํ๊ณ ๋๋จธ์ง๋ ์ด๋ฆ์ ๊ทธ๋๋ก ๋ฐํํ๋ค.
Last updated