๐ฆ๋ฌธ์ ์ค๋ช
์ฒ์์๋ ๋ณต์กํ๊ฒ ์๊ฐํด์ ๋ฌธ์ ๋ฅผ ํ์ง ๋ชปํ๋ค. ๋๋ `๋ ํ
์ด๋ธ์ ์กฐ์ธ์ ํด์ผ ํ๋๋ฐ ์กฐ์ธ ์กฐ๊ฑด์ ์ด๋ป๊ฒ ์ฃผ์ง?` ์ด๋ ๊ฒ ์๊ฐ์ ํ๊ณ ๋ฌธ์ ์ ์ ๊ทผํ๋ค. ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ์กฐ์ธ์ ํ ์ ์๋ค.์ด๊ฑด ์๋ธ์ฟผ๋ฆฌ๋ก ํธ๋ ๋ฌธ์ ์๋ค.
๋๋ ์ฒ์์ ์ด ๋ฌธ์ ๊ฐ ์๋ฐ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ
์คํธ์ฒ๋ผ ๋๊ปด์ก๋ค. ์๋ํ๋ฉด ๋ด๊ฐ ์ง์ ์ด์ง์ ๊ณ์ฐ์ ํ๋ ๋ก์ง์ ์ง์ผ ํ๋๊ฑด๊ฐ? ๋ผ๋ ์๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฆฌ์ | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
์ด์ง์ | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
์ญ์ง์๋ฅผ ์ด์ง์๋ก ๋ฐ๊พธ๋ `BIN(SKILL_CODE)` ํจ์ ์จ์ CODE ์ปฌ๋ผ์ด๋ ๋ง์ถฐ๋ณผ๊น ์๊ฐํ๋๋ฐ ์ด๋ป๊ฒ ํด์ผ ์ข์ ์ง ์ฝ๊ฒ ์๊ฐ์ด ๋์ง ์์๋ค. ๊ทธ ํ์ `SUBSTRING(BIN(SKILL_CODE),?,?)` ์ด๋ฐ ์์ผ๋ก ๊ฐ์ ์๋ผ ์ค์ผ ํ๋ ์๊ฐ๋ ํด ๋ดค๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์กฐ๊ฑด์ ์ด ๋ค์ด๊ฐ์ผ ํ ๊ฒ ๊ฐ๊ณ ๋ฐ๋ณต๋ฌธ์ด ๋ค์ด๊ฐ์ผ ํ ๊ฒ ๊ฐ๊ณ ์ฝ๋๊ฐ ๋ณต์กํด์ง ๊ฒ ๊ฐ์๊ณ , ์ ๋ SQL์์ ์ฐ์ด๋ ํจ์๋ก ์ปค๋ฒ๊ฐ ์๋ ๊ฒ ๊ฐ์๋ค. ์ ์์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ๋ด๊ฐ ์ง๊ณ ์๋ ๊ฒ ๊ฐ์ง ์์๋ค. ์ฝ๋๊ฐ ์ ์ ๋ณต์กํด์ก๋ค. ๊ทธ๋๋ ์ ๋ต์ ํ์ธํ๊ธฐ ์ซ์๋ค.... ์ ์๊ฐํด ๋ณด๋ฉด ํ๋ฆด ๊ฒ ๊ฐ๊ฑฐ๋ .
ํ์ง๋ง ๊ฒฐ๊ตญ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด๋ป๊ฒ ํ์๋์ง ๋์์ ๋ฐ๊ฒ ๋์๋ค. ์๊ณ ๋ณด๋๊น ์์ ํ ๋ฐฉํฅ์ ์๋ชป ์ก์๊ฑฐ ์๊ณ ์ด๊ฑด ์กฐ์ธ์ด ์๋๋ผ ์๋ธ์ฟผ๋ฆฌ๋ก ์ฝ๊ฒ ๋ต์ ์ฐพ์ ์ ์๋ ๋ฌธ์ ์๋ค. ์ด์ง์ ๊ณ์ฐ๋ ์ปดํจํฐ๊ฐ ์์์ ํ๋ ๊ฑฐ์๋ค.
์ ๋ง ๊ฐ๋จํ๊ฒ & ์ผ๋ก ๋นํธ ์ฐ์ฐ์ ํ ์ ์๋ค๋ ๊ฑธ ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ์ SQLD๋ฅผ ํตํด ์๊ณ ๋ ์์์ง๋ง ์ด๋ด ๋ ์ ์ฉํด์ผ ํ๋ค๋ ๊ฑธ ์ฝ๊ฒ ๋ ์ฌ๋ฆฌ์ง ๋ชปํ๋ค.
๐ฆ`& ๋ก ๋นํธ AND ์ฐ์ฐ
์ด ๋ฐฉ์์ `๋นํธ ํ๋๊ทธ`๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์ฌ๋ฌ ๋นํธ ๊ฐ์ด ํ๋์ ์ ์๋ก ๊ฒฐํฉ๋์ด ์ฌ๋ฌ ๊ธฐ์ ์ด๋ ์์ฑ์ ๋ํ๋ผ ๋ ์ ์ฉํ๋ค. ์ด ๋ฌธ์ ์์๋ ์ฌ๋ฌ ๋นํธ ๊ฐ์ด ํ๋์ ์ ์๋ก ๊ฒฐํฉ๋์ด ์๊ธฐ ๋๋ฌธ์ `&` ์ฐ์ฐ์๋ฅผ ์จ ์ฃผ์ด์ผ ํ๋ค. ์ด ์ฐ์ฐ์ ์ํํ ๊ฒฐ๊ณผ๊ฐ 0๋ณด๋ค ํฌ๋ฉด ์กฐ๊ฑด์ด ์ฐธ์ด๋ค.
6 & 2 = 2์ด๊ณ , 2 > 0์ด๋ฏ๋ก ์กฐ๊ฑด์ด ์ฐธ
๋ฌธ์ ์์ SKILL_CODE๋ ๋นํธ ๋ง์คํฌ ํ์์ผ๋ก ์ฌ๋ฌ ์คํฌ์ ํ๋์ ๊ฐ์ผ๋ก ์ ์ฅํ๊ณ ์๋ ์ปฌ๋ผ์ด๋ค. ์๋ฅผ ๋ค์ด, Python ์คํฌ์ 2, C# ์คํฌ์ 4๋ก ์ ์ฅ๋ ์ ์๋ค.
`SKILL_CODE & CODE`๋ SKILL_CODE์ ํน์ CODE ๊ฐ์ ๋นํธ ๋จ์๋ก ๋น๊ตํ๋ ์ฐ์ฐ์ด๋ค. ๋ง์ฝ ๊ฐ๋ฐ์๊ฐ Python์ ๊ฐ์ง๊ณ ์์ผ๋ฉด SKILL_CODE์ Python์ CODE๋ฅผ ๋นํธ AND ์ฐ์ฐํ์ ๋ ๊ฒฐ๊ณผ๊ฐ 0๋ณด๋ค ํฐ ๊ฐ์ด ๋์ค๋ ์๋ฆฌ์ด๋ค. ๋์ผํ ๋ฐฉ์์ผ๋ก C#๋ ํ์ธํ๋ค. ์ด ๋ง์ด ์ด๋ ต๋ค๊ณ ๋๊ปด์ง๋ค๋ฉด.... ์ ๋ง ์ฝ๊ฒ ํ์ด์ ์ค๋ช
ํ์๋ฉด &์ ์ฃผ์ด์ง ๋ ์ซ์์ ๋ํด ๋นํธ ๋จ์๋ก AND ์ฐ์ฐ์ ์ํํ๋ค. ์ด ์ฐ์ฐ์๋ ๊ฐ ๋นํธ ์์น์์ ๋ ๊ฐ์ด ๋ชจ๋ 1์ผ ๋๋ง 1์ ๋ฐํํ๋ค.
โ ์ฒซ๋ฒ์งธ ์๋ - ์คํจ (ํ๋ฆฐ ์ฟผ๋ฆฌ)
SELECT B.ID, B.FIRST_NAME, B.LAST_NAME, B.EMAIL
FROM DEVELOPERS B
WHERE B.SKILL_CODE & (
SELECT CODE
FROM SKILLCODES
WHERE NAME IN ('C#', 'Python')
) > 0
ORDER BY B.ID;
์ด ์ฟผ๋ฆฌ๊ฐ ํ๋ฆฐ ์ด์ ๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฌ๋ฌ ๊ฐ์ ํ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค. & ์ฐ์ฐ์ ํ์ง ์์ผ๋ฉด IN ์ ๋ค์คํ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋์ง ์๊ฒ ์ง๋ง & ์ฐ์ฐ์๋ ๋ ๊ฐ์ ๋จ์ผ ๊ฐ์ ๋น๊ตํ ์ ์์ง๋ง, ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ์๋ ์ง์ ์ ์ผ๋ก ์ฐ์ฐ ํ ์ ์๋ค. ์ฆ, ํ๋์ฉ ๋ฐ๋ก ์ฐ์ฐ์ ํด ์ฃผ์ด์ผ ํ๋ค.
๐๐ปโโ๏ธ ์ ๋ต ์ฟผ๋ฆฌ
SELECT B.ID, B.EMAIL, B.FIRST_NAME, B.LAST_NAME FROM DEVELOPERS B
WHERE (B.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python'))
OR (B.SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#'))
ORDER BY B.ID;
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME FROM DEVELOPERS
WHERE SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')
OR SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
ORDER BY ID;
์? ALIAS ์ํ๊ณ ๊ทธ๋ฅ ํด๋ ๋๋ค!