[SQL] ํน์ ํ์ง์ ๊ฐ์ง๋ ๋์ฅ๊ท ์ฐพ๊ธฐ ํ์ด / ๋นํธ ์ฐ์ฐ์ด๋?
๐งช ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ : ํน์ ํ์ง์ ๊ฐ์ง๋ ๋์ฅ๊ท
ํ๋ก๊ทธ๋๋จธ์ค
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
- 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๋ฒ ํ์ง์ ์๋ ๋์ฅ๊ท "๋ง ์ธ๋ ์กฐ๊ฑด