📕 SQL

SQL ) LV4.  입양 시각 구하기(2) 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59413관련 개념WITH 문대량의 데이터를 다룰 때, 임의의 결과 저장할 때마다 테이블을 생성하거나 저장하기가 번거롭다.이때, 임시 결과를 정의하고, 임시 테이블을 만들어 해당 테이블에 값을 저장할 수 있다.동일한 쿼리를 자주 사용할 때, 반복적인 사용이 가능하도록 하기 위해 WITH절을 사용한다.WITH 임시테이블명 AS( SELECT 조회하려는 칼럼 FROM 테이블명 ...)SELECT * FROM 임시테이블명;WITH RECURSIVE 문재귀 쿼리반드시 UNION을 사용한다.비 반복문도 최소한 1개가 요구 된다.(처음 한 번 실행)반복문은 정..
SQL ) LV4.  서울에 위치한 식당 목록 출력하기 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131118접근법서울에 위치한 식당별 리뷰 평균점수를 조회해야하므로 식당정보 테이블과 리뷰 테이블을 식당ID기준으로 JOIN후에, 식당ID별로 그룹화를 수행했다.이후, AVG와 ROUND함수를 사용해 문제에서 요구한 조건대로 식당별 평균점수와 소수둘째자리까지 출력되도록 했다.여기서 주의할 점은 주소 필터링하는 부분인데서울에 위치할 경우 무조건 서울로 주소가 시작하니까, 주소의 첫 두글자가 서울인 레코드만 조회되도록 해야한다.중간에 서울인 글자가 포함된걸로 해버리면 주소에 00서울00이런식으로 다른 단어가 포함된 것도 서울에 위치한 것으로 ..
SQL ) LV3. 대장균의 크기에 따라 분류하기 2 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/301649관련 개념순위 함수종류RANK() OVER()공동 순위만큼 건너뛴다.EX) 1 , 2 , 2 ,4DENSE_RANK() OVER()공동 순위만큼 건너뛰지 않는다.EX) 1, 2, 2, 3ROW_NUMBER() OVER()공동 순위 무시한다.EX) 1, 2, 3, 4PERCENT_RANK() OVER()0~1사이의 값을 반환한다.백분율 순위를 구할 때 사용한다.NTILE() OVER()PARTITION을 지정된 수 만큼 등급으로 나누어 각 등급 번호 출력EX) SELECT NTILE(4) OVER(ORDER BY SIZE DESC)..
SQL ) LV3. 대여 기록이 존재하는 자동차 리스트 구하기 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/157341접근법두 테이블의 칼럼 정보가 필요하므로 JOIN 연산 수행이때, MONTH함수로 대여시작일START_DATE에서 월을 추출했을 때, 10인 경우와자동차 종류CAR_TYPE 값이 ‘세단’인 경우CAR_ID를 조회했다.이때, 주의할 점은 CAR_ID가 중복된 것이 여러 개 나올 수 있으므로 DISTINCT 키워드를 붙여 중복을 제거했다.코드SELECT DISTINCT C.CAR_IDFROM CAR_RENTAL_COMPANY_CAR C JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_..
SQL ) LV3. 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/151139접근법우선 2022년 8월~10월 이내에 대여된 자동차들을 찾아야 하므로 서브쿼리로 해당 조건을 충족하는 CAR_ID들을 조회했다.WHERE절에서 CAR_ID가 서브쿼리 반환값에 존재할 경우 && 대여 시작일이 8~10일 경우에만 조회하도록 했고,이후, START_DATE의 월을 추출한 MONTH칼럼과 CAR_ID 기준으로 그룹화한 뒤, HAVING절에서 RECORDS 칼럼 값이 0보다 큰 경우만 조회하도록 했다.RECORDS칼럼은 COUNT함수로 대여개수를 구한 칼럼을 의미코드SELECT MONTH(START_..
SQL ) LV2. 연도별 대장균 크기의 편차 구하기 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/299310접근법각 연도별 최대 크기를 구한뒤 각 박테리아별로 현재 속행씨는 그룹의 최대 크기와의 편차를 출력해야한다.먼저, 서브쿼리를 통해 연도 기준 그룹화 후, 연도별 최대 크기와 연도 레코드를 반환하는 인라인 뷰를 만들었다(E2)이후, 원본 테이블과 인라인 뷰를 카티션프로덕트하고, where절에서 두 테이블의 년도가 같은 것만 추렸다마지막으로, select절에서 인라인 뷰의 year칼럼과, 편차(인라인 뷰 max_size - 원본 테이블 size_of_colony), 원본 테이블의 id를 함께 조회하도록 했다.코드SELECT YEAR,..
SQL ) LV2. 조건에 맞는 사원 정보 조회하기 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/284527접근법두 테이블을 EMP_NO 기준 조인 연산을 수행 후,WHERE 절에서 YEAR칼럼 값이 2022인 레코드로 제한을 두고, EMP_NO기준으로 그룹화 했다.이때, SCORE값의 합(상반기, 하반기)을 나타내는 SCORE 칼럼 생성 후, 해당 칼럼 기준 내림차순 정렬한 뒤, LIMIT 1을 두어 가장 첫번째 행의 레코드를 출력했다.코드SELECT SUM(SCORE) AS SCORE, E.EMP_NO, EMP_NAME, POSITION, EMAILFROM HR_EMPLOYEES E JOIN HR_GRADE G ON E.EMP_NO ..
SQL ) LV2. 중성화 여부 파악하기 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59409관련 개념정규식 REGEXPLIKE보다 더 다양한 검색이 가능예시) TITLE칼럼 값이 ‘A’ 또는 ‘B’ 또는 ‘C’를 포함한 데이터 출력SELECT * FROM TABLE_NAME WHERE TITLE REGEXP ‘A|B|C’;예시) TITLE칼럼 값에 한글이 포함된 모든 데이터 출력SELECT * FROM TABLE_NAME WHERE TITLE REGEXP ‘가-힇’관련 기호. : 문자 하나를 나타냄예시) ‘…’ : 문자열의 길이가 세 글자 이상인 것을 찾음* : 앞에 나온 문자의 0개 이상 반복을 의미예시) ‘A*’ : ‘A’가 0번..
SQL ) LV2. 고양이와 개는 몇 마리 있을까 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59040접근법고양이과 개가 각각 몇마리인지 조회해야 하므로, ANIMAL_TYPE으로 그룹화 후, 집계함수 COUNT로 마리 수를 출력했다.코드SELECT ANIMAL_TYPE, COUNT(*) AS count FROM ANIMAL_INSWHERE ANIMAL_TYPE IN ('Cat', 'Dog') GROUP BY ANIMAL_TYPE ORDER BY 1; SQL ) LV2. 동명 동물 수 찾기 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59041접근법이름 값이 NULL이..
SQL ) LV2. 부모의 형질을 모두 가지는 대장균 찾기 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/301647관련 개념조인(JOIN)이란?정의 : 두 릴레이션으로부터 조인 조건에 맞는 튜플을 결합하여 출력한다.카티션 프로덕트(CARTESIAN PRODUCT)두 릴레이션 튜플의 모든 조합을 출력만약 A릴레이션의 튜플이 3개, B릴레이션의 튜플이 8개라면 카티션 프로덕트 결과는 24개 튜플이 출력된다.SELECT * FROM A, B; 형태로 사용내부 조인(INNER JOIN)조인이 가능한 키 값을 기준으로 NULL을 제외한 교집합 출력동등 조인 : 두 릴레이션의 카티션 프로덕트 한 결과 중 조건에 맞는 튜플 출력자연 조인 : 두 릴레..
혜덕hyeduck
'📕 SQL' 카테고리의 글 목록