[Diesel.rs] select ์ •๋ฆฌ

[์›๋ณธ ๋งํฌ]

์ด์ „ ํฌ์ŠคํŠธ
https://blog.naver.com/sssang97/221836332593
diesel์—์„œ ํ…Œ์ด๋ธ”์˜ ๊ฐ’์„ selectํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ๊ฐœ๊ด„์ ์œผ๋กœ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

ํ…Œ์ŠคํŠธํ•  ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๋‹ค.

์•„๋ž˜๋Š” ๋ฐ์ดํ„ฐ ๋งคํ•‘์šฉ ๊ตฌ์กฐ์ฒด ํƒ€์ž…์ด๋‹ค.



์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ผ๋‹จ select๋Š” table! ๋งคํฌ๋กœ๋กœ ์ž๋™ ์ƒ์„ฑ๋œ test::dsl์˜ ํ…Œ์ด๋ธ” ๊ฐ’ test์—์„œ ๋‹ค์Œ์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

load์™€ get_results๋Š” ์™„์ „ํžˆ ๋™์ผํ•œ ๋ฉ”์„œ๋“œ์ธ๋ฐ, ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ select๊ฐ’๋“ค์„ ๊ฐ€์ ธ์™€์ค€๋‹ค.
get_result์™€ first๋Š” ๊ธฐ๋Šฅ์ƒ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ํ•˜๋‚˜๋งŒ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ, first๋Š” limit 1๋ฅผ ๋‹ฌ์•„์ค˜์„œ ๋Œ€์ฒด๋กœ ์„ฑ๋Šฅ์€ ์กฐ๊ธˆ ๋” ๋น ๋ฅผ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํžˆ ์ด๋Ÿฐ ์ „์ฒด select๋งŒ์œผ๋กœ๋Š” ์ œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.
์ € ํ…Œ์ด๋ธ” ๊ฐ์ฒด๋Š” QueryDsl์ด๋ž€ ํŠธ๋ ˆ์ž‡์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์—๋Š” filter, limit, order ๋“ฑ์˜ select์— ๋ถ€๊ฐ€์ ์œผ๋กœ ๋‹ค๋Š” ๋ฌธ์žฅ๋“ค์„ ์ง€์›ํ•œ๋‹ค.
https://docs.diesel.rs/diesel/query_dsl/trait.QueryDsl.html
๊ทธ๋ฆฌ๊ณ  ์ด ๋ฉ”์„œ๋“œ๋“ค์€ Self๋ฅผ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์ฒด์ด๋‹ ํ˜•์‹์œผ๋กœ ์—ฐ๋‹ฌ์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ ๋ง์ด๋‹ค.

test::dsl::test.fiter(...).order_by(...).limit(3).load();


filter: ์กฐ๊ฑด์ ˆ

filter๋Š” sql์—์„œ ์ •ํ™•ํ•˜๊ฒŒ where์ ˆ์— ํ•ด๋‹นํ•œ๋‹ค.
๋ณดํ†ต dsl์˜ ์ปฌ๋Ÿผ์œผ๋กœ ํ‘œํ˜„์‹ ์ƒ์„ฑ์„ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค.
๋™๋“ฑ ์—ฐ์‚ฐ์ž์ธ =์˜ ๊ฒฝ์šฐ์—๋Š” eq ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
์•„๋ž˜๋Š” id=3์ธ ๊ฐ’์„ ์ฝ์–ด์˜ค๋Š” ์ฟผ๋ฆฌ๋‹ค.

์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ๋‹ฌ๋ ค๋ฉด filter๋ฅผ ์—ฐ์†ํ•ด์„œ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์—์„œ๋Š” < ์—ฐ์‚ฐ์ž์˜ lt, > ์—ฐ์‚ฐ์ž์˜ gt๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

๋‹น์—ฐํžˆ between ๊ฐ™์€๊ฒƒ๋„ ์žˆ๋‹ค.




order: ์ˆœ์„œ ๋ถ€์—ฌ

์ด๊ฑด SQL์˜ order by์— ๋Œ€์‘๋œ๋‹ค.
์ธ์ž๋กœ๋Š” dsl ์ปฌ๋Ÿผ์— asc๋‚˜ desc๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.
์•„๋ž˜๋Š” id๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ ์ฟผ๋ฆฌ๋‹ค.

์—ฌ๋Ÿฌ ์ •๋ ฌ์กฐ๊ฑด์„ ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ํŠœํ”Œ๋กœ ๋ฌถ์–ด์„œ ์ฃผ๋ฉด ๋œ๋‹ค.




offset&limit: ์ž๋ฅด๊ธฐ

์ด๊ฒƒ๋„ SQL์˜ offset, limit์™€ ์™„์ „ ๋Œ€์‘๋œ๋‹ค.
ํŠน๋ณ„ํ•œ๊ฒŒ ์žˆ์ง€๋Š” ์•Š๋‹ค. offset์€ ์กฐํšŒํ•  ๋ชฉ๋ก ์ค‘์—์„œ ์ž๋ฅด๊ธฐ ์‹œ์ž‘ํ•  ์ธ๋ฑ์Šค๋ฅผ ๋ฐ›๊ณ , limit๋Š” ์ด ๋ช‡๊ฐœ๊นŒ์ง€ ์ž˜๋ผ์˜ฌ์ง€๋ฅผ ์„ ํƒํ•œ๋‹ค.




select: ์ปฌ๋Ÿผ ์ง€์ •

๋”ฐ๋กœ ๋ญ˜ ๊ฑธ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋ ค๋ฉด ์œ„์ฒ˜๋Ÿผ ๊ทธ๋ƒฅ ์ปฌ๋Ÿผ ์ „์ฒด๋ฅผ ๋‹ค ๊ฐ€์ ธ์™€๋ฒ„๋ฆฐ๋‹ค.
์ผ๋ถ€ ์ปฌ๋Ÿผ๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด select๋กœ dsl ์ปฌ๋Ÿผ์„ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ปฌ๋Ÿผ๋“ค์„ ํŠœํ”Œ๋กœ ๋ฌถ์–ด์„œ ๋˜์ง„๋‹ค.

๊ทธ๋ฆฌ๊ณ  select๋ฅผ ํ• ๋•Œ ์–ด๋А์ •๋„ ๊ฐ’์˜ ๊ฐ€๊ณต์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
๊ทธ๋Ÿด๋•Œ๋Š” ์ปฌ๋Ÿผ dsl ๊ฐ’์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๊ฒ ๋‹ค.
์•„๋ž˜์˜ concat์€ ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค. ||๋กœ ๋ณ€ํ™˜๋  ๊ฒƒ์ด๋‹ค.




์ง‘๊ณ„ํ•˜๊ธฐ: count, sum, ...

count, sum ๋“ฑ์˜ ์ง‘๊ณ„ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
group์€ ๋‚˜์ค‘์— ํ•ด๋ณด๊ณ  ์ผ๋‹จ ์ „์ฒด์ง‘๊ณ„๋งŒ ํ•ด๋ณด๊ฒ ๋‹ค.

count๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค. count๋Š” ์ปฌ๋Ÿผ์„ ์ง€์ •ํ•ด์„œ ์ง‘๊ณ„, count_start๋Š” count(*)๋‹ค.




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

์„œ๋ธŒ์ฟผ๋ฆฌ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. diesel::dsl์— ์ด๋Ÿฐ ๊ณณ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์ด ์ œ๊ณต๋œ๋‹ค.
๋งŒ์•ฝ exists๋กœ ์กด์žฌ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.


group์€ ๋‚˜์ค‘์— ๋”ฐ๋กœ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.


์ฐธ์กฐ
https://docs.diesel.rs/diesel/query_dsl/trait.QueryDsl.html
https://docs.diesel.rs/diesel/query_dsl/trait.RunQueryDsl.html