์•Œ๊ณ ๋ฆฌ์ฆ˜/SQL

[SQL] ํŠน์ • ํ˜•์งˆ์„ ๊ฐ€์ง€๋Š” ๋Œ€์žฅ๊ท  ์ฐพ๊ธฐ ํ’€์ด / ๋น„ํŠธ ์—ฐ์‚ฐ์ด๋ž€?

์ธํฌ๋งˆํ‹ฑ 2025. 3. 25. 18:39

๐Ÿงช ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ: ํŠน์ • ํ˜•์งˆ์„ ๊ฐ€์ง€๋Š” ๋Œ€์žฅ๊ท 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋•Œ, GENOTYPE์ด๋ผ๋Š” ์ปฌ๋Ÿผ์— ํ˜•์งˆ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์ฒ˜์Œ์—” ๋‹จ์ˆœํžˆ LIKE๋‚˜ IN ๊ฐ™์€ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ GENOTYPE ์ปฌ๋Ÿผ์˜ ์ •์ฒด๋Š” ๋น„ํŠธ๋งˆ์Šคํฌ ํ˜•ํƒœ์˜ ์ •์ˆ˜๊ฐ’์ด๋ผ๋Š” ์ ์„ ๋ˆˆ์น˜์ฑ„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋Œ€์žฅ๊ท  ๋ณ„ ํ˜•์งˆ์„ 2์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ID 1 : 1000โ‚โ‚‚โ‚Ž
ID 2 : 1111โ‚โ‚‚โ‚Ž
ID 3 : 1โ‚โ‚‚โ‚Ž
ID 4 : 1101โ‚โ‚‚โ‚Ž

๊ฐ ๋Œ€์žฅ๊ท  ๋ณ„ ๋ณด์œ ํ•œ ํ˜•์งˆ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ID 1 : 4
ID 2 : 1, 2, 3, 4
ID 3 : 1
ID 4 : 1, 3, 4

 

  1. 2๋ฒˆ ํ˜•์งˆ์€ ์—†์–ด์•ผ ํ•œ๋‹ค.
  2. 1๋ฒˆ ๋˜๋Š” 3๋ฒˆ ํ˜•์งˆ์€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ด ์กฐ๊ฑด์„ ์ผ๋ฐ˜์ ์ธ SQL ๋น„๊ต ์—ฐ์‚ฐ์ž๋กœ๋Š” ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , ๋น„ํŠธ ์—ฐ์‚ฐ์ž์ธ &๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

 

 

1๏ธโƒฃ ๋น„ํŠธ ์—ฐ์‚ฐ์ด๋ž€?

๐Ÿ’ก ๋น„ํŠธ(Bit)

์ปดํ“จํ„ฐ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ 0๊ณผ 1, ์ฆ‰ ๋น„ํŠธ(bit) ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 10์ง„์ˆ˜ ์ˆซ์ž 5๋Š” 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 101์ž…๋‹ˆ๋‹ค. ๋น„ํŠธ ์—ฐ์‚ฐ์ด๋ž€ ์ด๋Ÿฐ 2์ง„์ˆ˜ ์ƒํƒœ์—์„œ ๋น„ํŠธ ๋‹จ์œ„๋กœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

์ฃผ์š” ๋น„ํŠธ ์—ฐ์‚ฐ ์ •๋ฆฌ

์—ฐ์‚ฐ์ž ์ด๋ฆ„ ์„ค๋ช…
& AND ์—ฐ์‚ฐ ๋‘ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ 1์ผ ๋•Œ๋งŒ 1, ๋‚˜๋จธ์ง€๋Š” 0
` ` OR ์—ฐ์‚ฐ
<< ์™ผ์ชฝ ์‹œํ”„ํŠธ ๋น„ํŠธ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ๋ฐ€์–ด, ์ž๋ฆฌ์ˆ˜ ํ™•์žฅ

 

 

2๏ธโƒฃ ๋ฌธ์ œ ํ’€์ด

๐Ÿ”ง ์–ด๋–ป๊ฒŒ ์กฐ๊ฑด์„ ๋น„ํŠธ๋กœ ๋ฐ”๊พธ๋‚˜? (ํ˜•์งˆ ๋ฒˆํ˜ธ ↔ ๋น„ํŠธ ์ž๋ฆฌ ์ผ์น˜)

  • ํ˜•์งˆ 1๋ฒˆ → 0๋ฒˆ์งธ ๋น„ํŠธ → 2์ง„์ˆ˜ 0001 = 10์ง„์ˆ˜ 1
  • ํ˜•์งˆ 2๋ฒˆ → 1๋ฒˆ์งธ ๋น„ํŠธ → 2์ง„์ˆ˜ 0010 = 10์ง„์ˆ˜ 2
  • ํ˜•์งˆ 3๋ฒˆ → 2๋ฒˆ์งธ ๋น„ํŠธ → 2์ง„์ˆ˜ 0100 = 10์ง„์ˆ˜ 4

์ด ๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” ํ˜•์งˆ ๋ฒˆํ˜ธ์™€ ๋น„ํŠธ ์ž๋ฆฌ(๊ฐ’)์ด ์ •ํ™•ํžˆ ๋งž์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๐ŸŽฏ ์ •๋‹ต ์ฝ”๋“œ

SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE GENOTYPE & 2 = 0 
  AND ((GENOTYPE & 1) > 0 OR (GENOTYPE & 4) > 0);
  • (GENOTYPE & 2) = 0
    2๋ฒˆ ํ˜•์งˆ์— ํ•ด๋‹นํ•˜๋Š” 1๋ฒˆ ๋น„ํŠธ(2์ง„์ˆ˜ 0010)๊ฐ€ ๊บผ์ ธ ์žˆ๋Š”์ง€ ํ™•์ธ
    ์ฆ‰, 2๋ฒˆ ํ˜•์งˆ์ด ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธ
  • (GENOTYPE & 1) > 0
    1๋ฒˆ ํ˜•์งˆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
  • (GENOTYPE & 4) > 0
    3๋ฒˆ ํ˜•์งˆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
  • ์ „์ฒด์ ์œผ๋กœ๋Š” "2๋ฒˆ ํ˜•์งˆ์€ ์—†๊ณ , 1๋ฒˆ ๋˜๋Š” 3๋ฒˆ ํ˜•์งˆ์€ ์žˆ๋Š” ๋Œ€์žฅ๊ท "๋งŒ ์„ธ๋Š” ์กฐ๊ฑด