Home
>
DB
>
πΎ[Database] MySQLμ 쿼리λ₯Ό κΈ°λ°μΌλ‘ μμ±λ λ€μ΄ν°λΈ SQL 쿼리 λΆμ.
Database
Native SQL Query
MySQL
πΎ[Database] MySQLμ 쿼리λ₯Ό κΈ°λ°μΌλ‘ μμ±λ λ€μ΄ν°λΈ SQL 쿼리 λΆμ.
π Intro
- μλμ Query λ¬Έμ βMySQLβμ 쿼리λ₯Ό κΈ°λ°μΌλ‘ μμ±λ Native SQL Queryμ
λλ€.
-
βSpring Data JPAβμμ
@Query μ΄λ
Έν
μ΄μ
μ ν΅ν΄ μ¬μ©λλ©°, νΉμ boardIdμ μν κ²μλ¬Ό(Article)μ νμ΄μ§λ€μ΄μ
λ°©μμΌλ‘ μ‘°ννλ μν μ ν©λλ€.
@Query(
value = "SELECT article.article_id, article.title, article.board_id, article.writer_id, " +
"article.created_at, article.modified_at " +
"FROM (" +
" SELECT article_id FROM article " +
" WHERE board_id = :boardId " +
" ORDER BY article_id DESC " +
" LIMIT :limit OFFSET :offset " +
") t LEFT JOIN article ON t.article_id = article.article_id ",
nativeQuery = true
)
List<Article> findAll(
@Param("boardId") Long boardId,
@Param("offset") Long offset,
@Param("limit") Long limit
);
β
1οΈβ£ Query λ¬Έ λΆμ.
SELECT article.article_id, article.title, article.board_id, article.writer_id,
article.created_at, article.modified_at
FROM (
SELECT article_id
FROM article
WHERE board_id = :boardId
ORDER BY article_id DESC
LIMIT :limit OFFSET :offset
) t
LEFT JOIN article ON t.article_id = article_article_id
1οΈβ£ λ΄λΆ μλΈμΏΌλ¦¬.
SELECT article_id
FROM article
WHERE board_id = :boardId
ORDER BY article_id DESC
LIMIT :limit OFFSET :offset
-
λͺ©μ : νΉμ κ²μν(board_id)μμ νμν κ²μλ¬Όμ IDλ§ μΆμΆ.
-
μΈλΆ λ΄μ©:
-
board_id = :boardId
- βοΈ μ λ¬ λ°μ boardIDμ ν΄λΉνλ κ²μλ¬Όλ§ μ‘°ν
-
ORDER BY article_id DESC
- βοΈ article_idλ₯Ό μ§κ΅°μΌλ‘ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬.(μ΅μ κ²μλ¬Ό μ)
-
LIMIT :limit OFFSET :offset
- βοΈ νμ΄μ§λ€μ΄μ
μ²λ¦¬λ₯Ό μν ν€μλ.
-
:limit π ν νμ΄μ§μ νμν κ²μλ¬Ό μ.
-
:offset π λͺ λ²μ§ΈλΆν° λ°μ΄ν°λ₯Ό κ°μ Έμ¬μ§ κ²°μ .
2οΈβ£ μΈλΆ 쿼리.
SELECT article.article_id, article.title, article.board_id, article.writer_id,
article.created_at, article.modified_at
FROM ... LEFT JOIN article ON t.article_id = article.article_id
-
λͺ©μ : μλΈμΏΌλ¦¬μΈμ΄ κ°μ Έμ¨ article_idλ₯Ό κΈ°μ€μΌλ‘ κ²μλ¬Όμ μμΈ μ 보λ₯Ό μ‘°ν.
-
μΈλΆ λ΄μ© :
-
LEFT JOIN
- βοΈ μλΈμΏΌλ¦¬(t)μ article ν
μ΄λΈμ μ‘°μΈ.
- βοΈ t.article_idμ article.article_idκ° μΌμΉνλ λ°μ΄ν°λ₯Ό κ°μ Έμ΄.
-
SELECT β¦
- βοΈ κ²μλ¬Όμ μ£Όμ μ 보λ₯Ό μ νμ μΌλ‘ κ°μ Έμ΄.
3οΈβ£ Queryμ λμ κ³Όμ .
1οΈβ£ μλΈμΏΌλ¦¬ μ€ν.
- βοΈ article ν
μ΄λΈμμ board_idκ° :boardIdμΈ κ²μλ¬Όμ IDλ₯Ό μ΅μ μμΌλ‘ μ λ ¬.
- βοΈ LIMITμ OFFSETμ μ¬μ©ν΄ νμν κ²μλ¬Ό IDλ§ μ ν.
4οΈβ£ μΈλΆ 쿼리 μ€ν.
- βοΈ μλΈ μΏΌλ¦¬μμ κ°μ Έμ¨ article_idλ₯Ό κΈ°μ€μΌλ‘ article ν
μ΄λΈμ λλ¨Έμ§ λ°μ΄ν°λ₯Ό κ°μ Έμ΄.
- βοΈ κ° κ²μλ¬Όμ ID, μ λͺ©, κ²μν ID, μμ±μ ID, μμ±/μμ μκ°μ λ°ν.
4οΈβ£ νλΌλ―Έν°.
- @Param(βboardIdβ) Long boardId
- βοΈ νΉμ κ²μνμ IDλ₯Ό λνλ
λλ€.
- βοΈ WHERE board_id = :boardId 쑰건μ μ¬μ©λ©λλ€.
- @Param(βoffsetβ) Long offset
- βοΈ νμ΄μ§λ€μ΄μ
μ μμ μ§μ μ λνλ
λλ€.
- βοΈ μ: 0μ΄λ©΄ 첫 λ²μ§Έ λ°μ΄ν°λΆν°, 10μ΄λ©΄ 11λ²μ§Έ λ°μ΄ν°λΆν° μ‘°ν.
- @Param(βlimitβ) Long limit
- βοΈ ν νμ΄μ§μ κ°μ Έμ¬ λ°μ΄ν°μ μλ₯Ό λνλ
λλ€.
- βοΈ μ: 10μ΄λ©΄ ν λ²μ 10κ°μ λ°μ΄ν°λ₯Ό λ°ν.