본문 바로가기

Data Engineering16

[Oracle] CONNECT BY LEVEL: 계층적인 SQL, 쿼리에서의 반복문 START WITH, CONNECT BY 문이 쓰이는 계층적 쿼리가 있습니다. 이는 쉽게 이해하면 SQL에서의 반복문이라고 생각하시면 됩니다. 이에 대해 알아보겠습니다. [ Contents ] 1. CONNECT BY LEVEL for i in range(1, 10): print(i) 위와 같은 반복문을 쿼리로 짜려면 어떻게 해야할까요? SQL은 주로 테이블을 조인하고 값을 조회하는 용도로 쓰이기 때문에, 반복문이 딱히 필요하진 않습니다. 하지만, 특정 주기의 날짜 계산이나 문구 반복, 계층적 데이터 추출에는 필요합니다. 이번 시간에는 복잡한 계층적 데이터 추출은 다루지 않고, 단순히 반복문의 기능이 필요한 경우만 다뤄보겠습니다. SELECT LEVEL FROM DUAL CONNECT BY LEVEL 2023. 3. 27.
[Oracle/Tibero] 여러 개의 테이블을 조인해서 업데이트 (2개 이상) 업데이트할 값이 여러 테이블에 흩어져 있을 경우, 조인해서 한 번에 업데이트하는 방법을 소개하겠습니다. [ Contents ] 0. 오류 UPDATE EMP_TABLE A, INFO_TABLE B SET A.DEPT_NM = B.DEPT_NM , A.DEPT_CD = B.DEPT_CD WHERE A.EMP_NUMB = B.EMP_NUMB 마치 SELECT문을 작성하듯이, 그저 테이블을 조인해서 업데이트할 수 없습니다. UPDATE는 하나의 테이블만 가능하며, 위와 같이 UPDATE 뒤에 여러 테이블을 나열할 수 없습니다. 1. 서브쿼리 활용 UPDATE EMP_TABLE A SET (A.DEPT_NM , A.DEPT_CD ) = (SELECT B.DEPT_NM , B.DEPT_CD FROM INFO_TA.. 2023. 3. 15.
[SQL] 문자열 변환함수 To_Char()와 형식(Format) - 오라클(Oracle) [ Contents ] 1. 문제 (링크 참조) 코딩테스트 연습 - 입양 시각 구하기(1) ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 programmers.co.kr 2. 문제 풀이 TO_CHAR(값, '형식') To_Char는 날짜나 숫자를 '특정 형식'의 문자열로 변환해주는 함수입니다. 단순히 자료형을 바꾸기보다는, 결과를 보기 좋게 출력할 때 많이 사용합니다. 형식(Format) 설명 (예시) YYYY 년도 (2022) MM 월 (03) DD 일 (05) HH24 24시간.. 2022. 3. 9.
[SQL] DISTINCT 중복 제거하기 - 오라클(Oracle) [ Contents ] 1. 문제 (링크 참조) 코딩테스트 연습 - 중복 제거하기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 2. 문제 풀이 DISTINCT col SQL에서 DISTINCT는 중복을 제거해줍니다. 유일한 값만을 남겨서 추출합니다. 3. 코드 SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS WHERE NAME IS NOT NULL 위 쿼리는 동명이인을 제외하고, 유일한 이름의 개수를 출.. 2022. 3. 8.
[SQL] Having 그룹핑 조건 설정하기 - 오라클(Oracle) [ Contents ] 1. 문제 (링크 참조) 코딩테스트 연습 - 동명 동물 수 찾기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 2. 문제 풀이 Group by col Having 조건 Group by로 묶일 조건을 Having절로 설정할 수 있습니다. Having절의 조건에 해당하는 col만 묶이며, 나머지는 제외됩니다. 3. 코드 SELECT NAME, COUNT(NAME) AS COUNT FROM ANIMAL_INS GROU.. 2022. 3. 7.
[SQL] 특정 칼럼으로 묶기 Group by - 오라클(Oracle) [ Contents ] 1. 문제 (링크 참조) 코딩테스트 연습 - 고양이와 개는 몇 마리 있을까 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 2. 문제 풀이 group by col Group by는 특정 칼럼으로 묶어서 연산하도록 해줍니다. 그룹별로 묶어서 연산하므로, 반드시 '집계 함수' 또는 '그룹 함수'를 써줘야 합니다. max(col) 최댓값 min(col) 최솟값 median(col) 중앙값 count(col) 개수 sum.. 2022. 3. 6.
[SQL] 상위 n개 레코드 출력하기 - 오라클(Oracle), MySQL [ Contents ] 1. 문제 (링크 참조) 코딩테스트 연습 - 상위 n개 레코드 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 2. 문제 풀이 예시는 상위 N개의 레코드를 구하는 문제입니다. Oracle) WHERE rownum = N MySQL) LIMIT N ORDER BY col 먼저 특정 컬럼에 대해 오름차순/내림차순 정렬 후 N개의 레코드만 뽑아냅니다. Orcale은 rownum의 개수를 한정해서 상위 N개의 레코드를 추.. 2022. 3. 5.