일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 위키독스
- 데이터리안넥스트레벨챌린지
- 윈도우함수
- 파이썬문풀
- levle1
- 그로스해킹
- 파이썬
- sql문풀
- 서브쿼리
- with절
- join
- 프로그래머스문풀
- 코테준비
- sql50
- 오블완
- SQL테스트
- 데벨챌
- SQL
- 문풀
- 약수구하기
- 티스토리챌린지
- 활성사용자수
- leetcode
- SQL고득점KIT
- 프로그래머스
- leetcode문풀
- 데이터리안실전반
- 셀프조인
- 데이터리안
- mysql
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 2개 테이블로 조건에 맞는 사람 찾기 본문
출처: [프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] : 조건에 맞는 개발자 찾기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/276034
문제(일부): 테이블에서 Python 이나 C# 스킬을 가진 개발자의 정보 조회
*SKILLCODES테이블에 스킬 이름이 있음, CODE는 십진수로 표현
DEVELOPERS테이블에는 개발자 정보 있음, SKILL_CODE는 십진수 값을 더한 것
ex) SKILL_CODE가 8452 = 8192 + 256 +4 로 Vue, Python, Cpp 스킬을 보유
0_1. &연산자 이해하기
비트 단위의 AND연산을 수행하는 연산자
각 비트에 대해 둘 다 1일 때만 결과가 1이 됨, 그 외에는 0이 됨
ex) 5와 3에 &연산자 사용
a = 5 (이진수: 0101)
b = 3 (이진수: 0011)
0101
& 0011
=> 0001 (결과)
0_2. OR와 IN의 차이 이해하기
OR와 IN모두 작성한 피연산자 중 값이 1개라도 있으면 출력
OR 연산자는 각각의 조건을 독립적으로 평가하여 조건을 충족하는 모든 레코드를 출력,
IN 연산자는 주어진 값들 중 하나만 충족해도 해당 레코드를 출력
ex) NAME과 COL (종류1, 1), (종류2,3) 피연산자로 1,3을 둔 경우
IN => 종류1,1 만 출력
OR => (종류1,1) , (종류2,3) 출력
1. FROM 테이블2개를 WHERE로 필터링
2개 기술 모두 보유한 경우 ID가 중복되므로 DISTINCT처리
SELECT DISTINCT D.ID
, D.EMAIL
, D.FIRST_NAME
, D.LAST_NAME
FROM DEVELOPERS D, SKILLCODES S
WHERE
(D.SKILL_CODE & S.CODE) != 0
AND S.NAME IN ("Python", "C#")
ORDER BY D.ID
2. 보유기술 필터링을 서브쿼리로 진행
SELECT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS AS D
WHERE EXISTS (
SELECT 1
FROM SKILLCODES AS S
WHERE (S.NAME = 'Python' OR S.NAME ='C#')
AND (D.SKILL_CODE & S.CODE) != 0
)
ORDER BY D.ID
3. JOIN 조건과 WHERE조건절로 필터링
SELECT DISTINCT D.ID
, D.EMAIL
, D.FIRST_NAME
, D.LAST_NAME
FROM DEVELOPERS AS D
INNER JOIN SKILLCODES AS S
ON (D.SKILL_CODE & S.CODE) != 0
WHERE S.NAME IN ('Python','C#')
ORDER BY D.ID
'SQL > SQL문풀' 카테고리의 다른 글
[MY SQL] 가장 큰 값을 기준으로 편차 구하기 (0) | 2024.04.08 |
---|---|
[MY SQL] 문자열 결합함수 CONCAT과 CONCAT_WS 차이 (0) | 2024.04.08 |
[MY SQL] 2개의 테이블로 종류별 가장 큰 값이 있는 레코드 추출 (0) | 2024.04.05 |
[MY SQL / 집계함수] 전체 데이터에서 가장 큰 값이 있는 행 찾기 (0) | 2024.04.04 |
[MY SQL] 특정 스킬을 보유한 사람 찾기 (0) | 2024.04.01 |