๐Ÿ–ฅ๏ธ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/SQL

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] [SQL] FrontEnd ๊ฐœ๋ฐœ์ž ์ฐพ๊ธฐ

rtw0202 2026. 2. 16. 17:13

1. ๋ฌธ์ œ ์„ค๋ช…

SKILLCODES ํ…Œ์ด๋ธ”์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. SKILLCODES ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, NAMECATEGORYCODE๋Š” ๊ฐ๊ฐ ์Šคํ‚ฌ์˜ ์ด๋ฆ„, ์Šคํ‚ฌ์˜ ๋ฒ”์ฃผ, ์Šคํ‚ฌ์˜ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ฌ์˜ ์ฝ”๋“œ๋Š” 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ–ˆ์„ ๋•Œ ๊ฐ bit๋กœ ๊ตฌ๋ถ„๋  ์ˆ˜ ์žˆ๋„๋ก 2์˜ ์ œ๊ณฑ์ˆ˜๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

DEVELOPERS ํ…Œ์ด๋ธ”์€ ๊ฐœ๋ฐœ์ž๋“ค์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํ‚ฌ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. DEVELOPERS ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ,  IDFIRST_NAMELAST_NAMEEMAILSKILL_CODE๋Š” ๊ฐ๊ฐ ๊ฐœ๋ฐœ์ž์˜ ID, ์ด๋ฆ„, ์„ฑ, ์ด๋ฉ”์ผ, ์Šคํ‚ฌ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.  SKILL_CODE ์ปฌ๋Ÿผ์€ INTEGER ํƒ€์ž…์ด๊ณ , 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ–ˆ์„ ๋•Œ ๊ฐ bit๋Š” SKILLCODES ํ…Œ์ด๋ธ”์˜ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ๊ฐœ๋ฐœ์ž์˜ SKILL_CODE๊ฐ€ 400 (=b'110010000')์ด๋ผ๋ฉด, ์ด๋Š” SKILLCODES ํ…Œ์ด๋ธ”์—์„œ CODE๊ฐ€ 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') ์— ํ•ด๋‹นํ•˜๋Š” ์Šคํ‚ฌ์„ ๊ฐ€์กŒ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
DEVELOPERS ํ…Œ์ด๋ธ”์—์„œ Front End ์Šคํ‚ฌ์„ ๊ฐ€์ง„ ๊ฐœ๋ฐœ์ž์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐœ๋ฐœ์ž์˜ ID, ์ด๋ฉ”์ผ, ์ด๋ฆ„, ์„ฑ์„ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. ๊ฒฐ๊ณผ๋Š” ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด ์ฃผ์„ธ์š”.

 
2. ์ถœ๋ ฅ ์˜ˆ์‹œ

 
3. ๋ฌธ์ œ ๋‹ต์•ˆ

# ๊ฐ ์ž๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ์Šคํ‚ฌ์ด ์žˆ๋Š”์ง€ ๋น„ํŠธ์—ฐ์‚ฐ์ž(&)๋กœ ํ™•์ธ
# ๋น„ํŠธ์—ฐ์‚ฐ์ž๋ฅผ ์“ฐ๋ฉด 10์ง„์ˆ˜ -> 2์ง„์ˆ˜ ๋น„ํŠธ๋กœ ๋น„๊ต
SELECT DISTINCT
    d.id,
    d.email,
    d.first_name,
    d.last_name
FROM developers d
JOIN skillcodes s
ON s.category = 'Front End'
WHERE (d.skill_code & s.code) > 0
ORDER BY d.id;

2์ง„์ˆ˜ ๊ณ„์‚ฐํ•  ๋•Œ๋Š” ๋น„ํŠธ ์—ฐ์‚ฐ์ž(&) ํ™œ์šฉํ•˜๊ธฐ..