Study Repository

[JPA] JPQL ๋ฌธ๋ฒ• 3 - ๊ฒฝ๋กœ ํ‘œํ˜„์‹, ์„œ๋ธŒ ์ฟผ๋ฆฌ, ์กฐ๊ฑด์‹

by Dongwoongkim

๊ฒฝ๋กœ ํ‘œํ˜„์‹

๊ฒฝ๋กœ ํ‘œํ˜„์‹์€ .์„ ์ฐ์–ด ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ‘œํ˜„์‹์œผ๋กœ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์ž‘์—…์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ƒํƒœ ํ•„๋“œ : ๋‹จ์ˆœํžˆ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ•„๋“œ(ํ”„๋กœํผํ‹ฐ)
  • ์—ฐ๊ด€ ํ•„๋“œ : ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์œ„ํ•œ ํ•„๋“œ์™€ ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…
    • ๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ ํ•„๋“œ : @ManyToOne , @OneToOne ๋‹จ์ผ ์—”ํ‹ฐํ‹ฐ ๋Œ€์ƒ 
    • ์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ ํ•„๋“œ : @OneToMany , @ManyToMany ์ปฌ๋ ‰์…˜ ์—”ํ‹ฐํ‹ฐ ๋Œ€์ƒ
    • ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…
@Entity
public class Orders {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ORDER_ID")
    private Long id; // ์ƒํƒœ ํ•„๋“œ

    private int orderAmount; // ์ƒํƒœ ํ•„๋“œ

    @Embedded
    private Address address; // ์—ฐ๊ด€ํ•„๋“œ ( ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… )

    @ManyToOne
    @JoinColumn(name = "MEMBER_ID")
    private Member member;  // ์—ฐ๊ด€ํ•„๋“œ ( ๋‹จ์ผ ์—”ํ‹ฐํ‹ฐ ) 

    @ManyToOne
    @JoinColumn(name = "PRODUCT_ID")
    private Product product; // ์—ฐ๊ด€ํ•„๋“œ ( ๋‹จ์ผ ์—”ํ‹ฐํ‹ฐ )
}

@Entity
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "MEMBER_ID")
    private Long id; // ์ƒํƒœ ํ•„๋“œ

    private String name; // ์ƒํƒœ ํ•„๋“œ
    private int age; // ์ƒํƒœ ํ•„๋“œ

    @ManyToOne
    @JoinColumn(name = "TEAM_ID")
	private Team team; // ์—ฐ๊ด€ ํ•„๋“œ ( ๋‹จ์ผ ์—”ํ‹ฐํ‹ฐ ) 
}

@Entity
public class Team {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "TEAM_ID")
    private Long id; // ์ƒํƒœ ํ•„๋“œ
    private String name; // ์ƒํƒœ ํ•„๋“œ

    @OneToMany(mappedBy = "team")
    private List<Member> members = new ArrayList<Member>(); // ์—ฐ๊ด€ ํ•„๋“œ ( ์—”ํ‹ฐํ‹ฐ ์ปฌ๋ ‰์…˜ )
}
  • ์ƒํƒœ ํ•„๋“œ ์กฐํšŒ ์‹œ ์ƒํƒœ ํ•„๋“œ๊ฐ€ ๊ฒฝ๋กœ ํƒ์ƒ‰์˜ ๋์œผ๋กœ ๋” ์ด์ƒ .์œผ๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ( m.username, m.age ๊นŒ์ง€๋งŒ ๊ฐ€๋Šฅ )
  • ๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ํ•„๋“œ ์กฐํšŒ ์‹œ ๋ฌต์‹œ์ ์œผ๋กœ ๋‚ด๋ถ€ ์กฐ์ธ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๊ฐ’ ์—ฐ๊ด€ ๊ฒฝ๋กœ๋Š” ๊ณ„์† ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ( o.product.name )  
  • ์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ํ•„๋“œ ์กฐํšŒ ์‹œ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌต์‹œ์  ๋‚ด๋ถ€ ์กฐ์ธ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ผ ๊ฐ’๊ณผ ๋‹ฌ๋ฆฌ ์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ํ•„๋“œ ์กฐํšŒ์˜ ๊ฒฝ์šฐ ๊ณ„์†์ ์ธ ํƒ์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ( t.members.name X )
    • JPQL์„ ๋‹ค๋ฃจ๋ฉด์„œ ๋งŽ์ด ํ•˜๋Š” ์‹ค์ˆ˜๋Š” ์ปฌ๋ ‰์…˜ ๊ฐ’์—์„œ ๊ฒฝ๋กœ ํƒ์ƒ‰์„ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ
    • FROM ์ ˆ์—์„œ ์กฐ์ธ์„ ํ†ตํ•ด ๋ณ„์นญ์„ ์–ป์œผ๋ฉด ๋ณ„์นญ์œผ๋กœ ํƒ์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
// ์ปฌ๋ ‰์…˜์˜ ๊ณ„์†์  ํƒ์ƒ‰์€ ๋ถˆ๊ฐ€๋Šฅ
SELECT t.members.name
FROM Team t 

// ์กฐ์ธ์„ ํ†ตํ•ด ๋ณ„์นญ์„ ์–ป์œผ๋ฉด ํƒ์ƒ‰ํ•ด์•ผ ํ•จ
SELECT m.name
FROM Team t INNER JOIN t.members m

 

๋ฌต์‹œ์  ์กฐ์ธ ์˜ˆ์‹œ 

// JPQL
SELECT m.team ( ์—ฐ๊ด€๊ด€๊ณ„ ๋‹จ์ผ ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ : ๋ฌต์‹œ์  ๋‚ด๋ถ€ ์กฐ์ธ ๋ฐœ์ƒ ) 
FROM Member m

// ์‹คํ–‰๋˜๋Š” SQL
SELECT t
FROM Team t INNER JOIN Member m ON m.team_id = t.id

์„œ๋ธŒ ์ฟผ๋ฆฌ

SQL๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JPQL๋„ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ JPQL์—์„œ๋Š” select , from ์ ˆ์—๋„ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” SQL๊ณผ ๋‹ฌ๋ฆฌ  where, having ์ ˆ์—๋งŒ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

JPQL ์„œ๋ธŒ ์ฟผ๋ฆฌ ํ•จ์ˆ˜

  • 1. [NOT] EXISTS (subquery) : ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ฐธ ๋ฆฌํ„ด, NOT EXISTS์€ ๋ฐ˜๋Œ€
    • select m from Member m where exists (select t from m.team t where t.name = 'ํŒ€A' ) 
    • -> ํŒ€ ์ด๋ฆ„์ด 'ํŒ€A'๊ฐ€ ์†Œ์†์ธ ํšŒ์› ์กฐํšŒ
    • select m from Member m where not exists (select t from m.team t whrer t.name='ํŒ€A')
    • -> ํŒ€ ์ด๋ฆ„์ด 'ํŒ€A'๊ฐ€ ์•„๋‹Œ ์†Œ์†์˜ ํšŒ์› ์กฐํšŒ
  • 2. [ALL | ANY | SOME] (<,=,>,>=,<=) (subquery) 
    • ALL ์กฐ๊ฑด์‹ (subquery) : ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ์กฐ๊ฑด์‹ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด ์ฐธ
    • select o from Order o where o.orderAmount > ALL (select p.stockAmount from Product p)
    • -> ๋ชจ๋“  ์ƒํ’ˆ์˜ ์žฌ๊ณ ๋Ÿ‰๋ณด๋‹ค ์ฃผ๋ฌธ๋Ÿ‰์ด ๋งŽ์€ ์ฃผ๋ฌธ๋“ค ์กฐํšŒ
    • 3. ANY,SOME ์กฐ๊ฑด์‹ (subquery) : ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ์กฐ๊ฑด์„ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜๋ฉด ์ฐธ
      • -> select m from Member m where m.team = ANY  (select t from Team t)
      • -> ์–ด๋А ํŒ€์ด๋“  ํŒ€์— ์†Œ์†๋œ ํšŒ์› ์กฐํšŒ
  • 4. [NOT] IN (subquery)
    • ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์ฐธ.
    • select t from Team t where t IN (select t2 from Team t2 JOIN t2.members m2 where m2.age >= 20 )
    • 20์„ธ ์ด์ƒ์„ ๋ณด์œ ํ•œ ํŒ€ 

์กฐ๊ฑด์‹

ํƒ€์ž… ํ‘œํ˜„

  • ๋ฌธ์ž๋Š” ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์„œ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ˆซ์ž๋Š” ํƒ€์ž…๋ณ„ Long์˜ ๊ฒฝ์šฐ L, Double์˜ ๊ฒฝ์šฐ D, Float์˜ ๊ฒฝ์šฐ F๋ฅผ ๋ถ™์—ฌ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ex ) 1L,2D,3F 
  • ๋‚ ์งœ๋Š” DATE์˜ ๊ฒฝ์šฐ {d '2023-05-10'}, TIME์˜ ๊ฒฝ์šฐ {t '18-17-05'} : 18์‹œ 17๋ถ„ 5์ดˆ, DATETIME์˜ ๊ฒฝ์šฐ {ts '2023-05-10 18-17-05.123'}์œผ๋กœ ํ‘œํ˜„
  • Boolean์€ TRUE, FALSE๋กœ ํ‘œํ˜„

์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„

1. ๊ฒฝ๋กœ ํƒ์ƒ‰ ์—ฐ์‚ฐ (.)

2. ์ˆ˜ํ•™ ์—ฐ์‚ฐ : +,-,*,/ ๋“ฑ

3. ๋น„๊ต ์—ฐ์‚ฐ

4. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ

๋…ผ๋ฆฌ์—ฐ์‚ฐ๊ณผ ๋น„๊ต์‹

  • ๋น„๊ต์‹ :>,<, <=, >=, =, <>( ๋‘ ๊ฐ’์ด ์„œ๋กœ ๋‹ค๋ฅธ์ง€ ํŒ๋‹จ, != ์˜ JPQL ๋ฐฉ์‹ ํ‘œํ˜„ ) 
  • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ : AND, OR, NOT

Between, IN, LIKE ์‹

  • Between ์‹: X BETWEEN A AND B  โžก๏ธ X ๊ฐ’์ด A์™€ B ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ฐธ
  • IN ์‹ : X IN (์˜ˆ์ œ)  โžก๏ธ X์™€ ๊ฐ™์€ ๊ฐ’์ด ์˜ˆ์ œ์— ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š” ๊ฒฝ์šฐ ์ฐธ 
  • LIKE ์‹ : X LIKE [ํŒจํ„ด ๊ฐ’]  โžก๏ธ X๊ฐ€ ํŒจํ„ด๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋ฉด ์ฐธ
    • ํŒจํ„ด ๊ฐ’ ์˜ˆ์‹œ
      • '%ํšŒ์›%' : 'ํšŒ์›'์„ ํฌํ•จํ•œ ๋ฌธ์ž์—ด (ํšŒ์›์œผ๋กœ ์‹œ์ž‘, ๋๋‚˜๋Š” ๊ฒƒ๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ex) ๊น€ํšŒ์›, ๊น€ํšŒ์›๊น€, ํšŒ์›, ํšŒ์›1) 
      • '%ํšŒ์›' : 'ํšŒ์›'์œผ๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž์—ด (ex) ๊น€ํšŒ์›, AํšŒ์›)
      • 'ํšŒ์›%' : 'ํšŒ์›'์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด (ex) ํšŒ์›1, ํšŒ์›AA)
      • '_ํšŒ์›' : 'ํšŒ์›'์œผ๋กœ ๋๋‚˜๋˜, ์–ธ๋”๋ผ์ธ ๊ฐœ์ˆ˜๋งŒํผ๋งŒ ์•ž์— ๋ฌธ์ž์—ด๋กœ ์ฑ„์›Œ์ง„ ๋ฌธ์ž์—ด (ex) _ํšŒ์› : AํšŒ์›, 1ํšŒ์› )
      • 'ํšŒ์›_' : 'ํšŒ์›'์œผ๋กœ ์‹œ์ž‘ํ•˜๋˜, ์–ธ๋”๋ผ์ธ ๊ฐœ์ˆ˜๋งŒํผ๋งŒ ๋’ค์— ๋ฌธ์ž์—ด๋กœ ์ฑ„์›Œ์ง„ ๋ฌธ์ž์—ด (ex) ํšŒ์›_ : ํšŒ์›1, ํšŒ์›A )
      •  '_ํšŒ์›_' : 'ํšŒ์›'์„ ํฌํ•จํ•œ ๋ฌธ์ž์—ด์ด๋˜, ์–ธ๋”๋ผ์ธ ๊ฐœ์ˆ˜๋งŒํผ๋งŒ ๋ฌธ์ž์—ด๋กœ ์ฑ„์›Œ์ง„ ๋ฌธ์ž์—ด (ex) _ํšŒ์›__ : 1ํšŒ์›22, AํšŒ์›BB)

์ปฌ๋ ‰์…˜ ์‹

์ปฌ๋ ‰์…˜ ์‹์€ ์ปฌ๋ ‰์…˜์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

(์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€๊ฒฝ๋กœ) IS [NOT] EMPTY 

  • ์ปฌ๋ ‰์…˜์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ ์ฐธ , NOT์€ ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ฐธ
  • SELECT m FROM Member m WHERE m.orders is not empty
  • -> ์ฃผ๋ฌธ์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š” ํšŒ์› ์กฐํšŒ

(์—”ํ‹ฐํ‹ฐ or ๊ฐ’) [NOT] member of (์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€๊ฒฝ๋กœ)

  • ์—”ํ‹ฐํ‹ฐ๋‚˜ ๊ฐ’์ด ์ปฌ๋ ‰์…˜์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ์ฐธ
  • SELECT t FROM Team t where :memberParam member of t.members
  • -> memberParam์ด t.members์˜ ๋ฉค๋ฒ„ ์ค‘ ํ•˜๋‚˜์ธ ๋ชจ๋“  ํŒ€์„ ์„ ํƒ 

์Šค์นผ๋ผ ์‹

์Šค์นผ๋ผ๋Š” ์ˆซ์ž, ๋ฌธ์ž, ๋‚ ์งœ, case, ์—”ํ‹ฐํ‹ฐ ํƒ€์ž… ๊ฐ™์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํƒ€์ž…๋“ค์ž…๋‹ˆ๋‹ค.

์Šค์นผ๋ผ ํƒ€์ž…์— ์‚ฌ์šฉํ•˜๋Š” ์‹์„ ์•Œ์•„๋ด…์‹œ๋‹ค.

 

๋ฌธ์žํ•จ์ˆ˜

1. concat(๋ฌธ์ž1,๋ฌธ์ž2) : ๋ฌธ์ž๋ฅผ ๊ฒฐํ•ฉ

2. substring(๋ฌธ์ž์—ด, ์œ„์น˜, ๊ธธ์ด) : ์œ„์น˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ธธ์ด๋งŒํผ substring ๊ตฌํ•˜๊ธฐ

3. upper(๋ฌธ์ž),lower(๋ฌธ์ž) : ๋ฌธ์ž๋ฅผ ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

4. length(๋ฌธ์ž) : ๋ฌธ์ž์—ด ๊ธธ์ด ๋ฆฌํ„ด

5. locate(์ฐพ์„๋ฌธ์ž, ์›๋ณธ ๋ฌธ์ž, ๊ฒ€์ƒ‰์‹œ์ž‘์œ„์น˜) : ๊ฒ€์ƒ‰์‹œ์ž‘์œ„์น˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ฐพ์€๋ฌธ์ž์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค ๋ฆฌํ„ด, ๋ชป ์ฐพ์œผ๋ฉด 0 ๋ฆฌํ„ด 

 

์ˆ˜ํ•™ํ•จ์ˆ˜

1. abs(์‹) : ์ ˆ๋Œ“๊ฐ’ ๋ฆฌํ„ด

2. sqrt(์‹) : ์ œ๊ณฑ๊ทผ ๋ฆฌํ„ด

3. mod(์ˆ˜ํ•™์‹, ๋‚˜๋ˆŒ ์ˆ˜ ) : ๋‚˜๋จธ์ง€ ๋ฆฌํ„ด

4. size(์ปฌ๋ ‰์…˜ ๊ฐ’ ์—ฐ๊ด€ ๊ฒฝ๋กœ์‹) : ์ปฌ๋ ‰์…˜์˜ ํฌ๊ธฐ ๋ฆฌํ„ด

5. index(๋ณ„์นญ) : ์ปฌ๋ ‰์…˜ ํƒ€์ž…์˜ ์œ„์น˜๊ฐ’ ๋ฆฌํ„ด ex) t.members m where index(m) > 3

 

๋‚ ์งœํ•จ์ˆ˜

1. CURRENT_DATE : ํ˜„์žฌ ๋‚ ์งœ

2. CURRENT_TIME : ํ˜„์žฌ ์‹œ๊ฐ„

3. CURRENT_TIMESTAMP : ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„

 

์ข…๋ฃŒ ์ด๋ฒคํŠธ ์กฐํšŒ

SELECT e 
FROM Event e
WHERE e.endDate < CURRENT_DATE

CASE ์‹

ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•  ๋•Œ CASE ์‹ ์‚ฌ์šฉ.

1. ๊ธฐ๋ณธ CASE 

๋ฌธ๋ฒ•

CASE
	[when <์กฐ๊ฑด์‹> them <์Šค์นผ๋ผ์‹>}
   	...
    ELSE <์Šค์นผ๋ผ์‹>
END

์‚ฌ์šฉ ์˜ˆ์‹œ 

SELECT
	CASE WHEN m.age <= 10 then 'ํ•™์ƒ์š”๊ธˆ'
    	WHEN m.age >=60 then '๊ฒฝ๋กœ์š”๊ธˆ'
        else '์ผ๋ฐ˜์š”๊ธˆ'
	END
FROM Member m

2. ์‹ฌํ”Œ CASE

์ž๋ฐ”์˜ switch caase๋ฌธ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ฑด ๋Œ€์ƒ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

CASE <์กฐ๊ฑด๋Œ€์ƒ>
	[when <์Šค์นผ๋ผ์‹1> then <์Šค์นผ๋ผ์‹2>}
    ELSE <์Šค์นผ๋ผ์‹>
END

์‚ฌ์šฉ ์˜ˆ์‹œ

SELECT
	CASE t.name
	    WHEN 'ํŒ€A' then '์ธ์„ผํ‹ฐ๋ธŒ100%'
    	WHEN 'ํŒ€B' then '์ธ์„ผํ‹ฐ๋ธŒ120%'
        else '์ธ์„ผํ‹ฐ๋ธŒ105%'
	END
FROM Team t

3. COALESCE

์Šค์นผ๋ผ์‹์„ ์ฐจ๋ก€๋Œ€๋กœ ์กฐํšŒํ•ด์„œ null์ด ์•„๋‹ˆ๋ฉด ๋ฆฌํ„ด

 

๋ฌธ๋ฒ•

COALESCE(<์Šค์นผ๋ผ์‹>, {<์Šค์นผ๋ผ์‹>}+)

์‚ฌ์šฉ์˜ˆ์‹œ

m.username์ด null์ด๋ฉด '์ด๋ฆ„ ์—†๋Š” ํšŒ์›'์„ ๋ฆฌํ„ด

SELECT coalesce(m.username,'์ด๋ฆ„ ์—†๋Š” ํšŒ์›')
FROM Member m

4. NULLIF

๋ฌธ๋ฒ• 

์Šค์นผ๋ผ์‹ ๋‘ ๊ฐœ๋ฅผ ๋น„๊ตํ•ด์„œ ๋‘ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด null์„ ๋ฆฌํ„ด, ๋‹ค๋ฅด๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ๋ฆฌํ„ด

NULLIF (<์Šค์นผ๋ผ์‹>, <์Šค์นผ๋ผ์‹>)

์‚ฌ์šฉ์˜ˆ์‹œ

SELECT NULLIF(m.username,'๊ด€๋ฆฌ์ž') 
FROM Member m

 m.username์ด ๊ด€๋ฆฌ์ž์ด๋ฉด null ๋ฆฌํ„ด, else m.username ๋ฆฌํ„ด

 

 

<์ฐธ๊ณ ์ž๋ฃŒ>

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

Dongwoongkim

ํ™œ๋™ํ•˜๊ธฐ