쿼리 안에 또 다른 쿼리 - Sub Query SELECT col1, (SELECT ...) -- 스칼라 서브쿼리(Scalar Sub Query): 하나의 컬럼처럼 사용 (표현 용도) FROM (SELECT ...) -- 인라인 뷰(Inline View): 하나의 테이블처럼 사용 (테이블 대체 용도) WHERE col = (SELECT ...) -- 일반 서브쿼리: 하나의 변수(상수)처럼 사용 (서브쿼리의 결과에 따라 달라지는 조건절) 1) Inline view (인라인 뷰) 먼저, FROM 절에 사용하는 서브쿼리부터 살펴볼까요? 위의 설명처럼 인라인 뷰는 SELECT 절의 결과를 FROM 절에서 하나의 테이블처럼 사용하고 싶을 때 사용합니다. 기존 단일 쿼리로는 '테이블에서 각 부서별 최대 연봉' 까지..
여러 테이블의 데이터를 조회하기 - JOIN SQL 에서 Join 은 언제 사용할까요? group by 절을 설명할 때에도 한 번 언급하긴 했었는데, 여러 테이블로 나뉘어진 데이터를 조회하기 위해 사용한다고 생각하시면 될 것 같아요! 예를 들자면, 은행에는 대량의 고객 데이터가 있을 것입니다. 개인정보, 예금 정보, 적금 정보, 카드 실적 등등.. 다 분리가 되어있겠죠? 이런 데이터들을 하나의 테이블에 다 넣게되면, 데이터 조회 시 불필요한 데이터까지 모두 스캔되어버려 메모리 낭비를 초래하기 때문이죠. 고객의 카드 실적 정보만 보고싶은데, 적금 정보, 예금 정보, 개인정보 등등.. 까지 조회가 되버리죠. 그래서! 테이블들을 적절하게, 그리고 잘게 쪼개는 것도 중요합니다. 목적은 속도를 빠르게 하기 위함이..
SQL 구문 순서 SQL 구문의 순서는 먼저 다음과 같습니다. SELECT 컬럼명 --------------------- (5) FROM 테이블명 ------------------- (1) WHERE 테이블 조건 --------------- (2) GROUP BY 컬럼명 -------------------- (3) HAVING 그룹 조건 ----------------- (4) ORDER BY 컬럼명 -------------------- (6) SQL 의 여정을 시작해볼까요?! 1. FROM : SQL은 구문이 들어오면 테이블을 가장 먼저 확인합니다. 테이블이 없는데 다른 것들을 먼저 조회하면 헛수고니까요! 2. WHERE : 테이블명을 확인했으니, 테이블에서 주어진 조건에 맞는 데이터들을 추출해줍니다. ..
각 행을 그룹으로 묶기 - GROUP BY group by 는 공통적인 데이터별로 묶어서 연산처리를 하고싶을 때 사용합니다. 그렇게되면 그룹 별 하나의 결과값이 출력되겠죠? 쉽게 예를 들자면, 전체 회원 데이터에서 남-여 회원의 수, 나이대 별(20대-30대-40대) 회원 수 이럴 때, count 함수와 group by 를 함께 사용한답니다. 만약 회사에 3개의 '부서'가 있는데, '같은 부서'의 직원들끼리 묶어라. 라고 한다면 그룹이 3개 이므로 3개의 행이 출력됩니다. 여기서 '부서번호' 를 사용해서 같은 부서끼리 묶었으므로 (원래는 단일행이지만 group by 에 사용되었기 때문에) select 절에서 그룹함수와 같이 사용이 가능합니다. 하지만, group by 에 사용된 컬럼 이외의 컬럼은 단독으..
먼저, 그룹함수란 두 개 이상의 여러개의 행을 묶어서 하나의 output 값을 리턴해주는 함수입니다. 예를 들자면, 합: sum, 평균: average 같은 함수를 말합니다. 카운트 - COUNT COUNT(컬럼명) :: 특정 컬럼 값이 NULL 인 값을 제외한 데이터의 개수 리턴 COUNT(*) :: NULL 값을 포함한 데이터의 개수 리턴 COUNT 함수는 어디에 쓰냐! 하믄,, 나중에 배울 group by 함수와 함께 사용하면, 남녀 성별 카운트를 확인할 수 있답니다. 현업에서 대량의 데이터를 모두 조회하는데, 데이터가 몇 억개정도 있다고하면.. CPU가 부글부글 할 것입니다. 그럴 때 미리 COUNT 함수를 사용해서 데이터의 개수를 확인한 후 필요한 데이터만 추출하여 조회한다면 CPU도 아주 좋아..
조건문 - DECODE DECODE(A, B, '1', null) :: A 가 B 일 경우 '1'을, 아닐 경우 null(생략 가능) DECODE(A, B, '1', '2') :: A 가 B 일 경우 '1'을, 아닐 경우 '2' DECODE(A, B, '1', C, '2', '3') :: A 가 B 일 경우 '1'을, A 가 C 일 경우 '2', 둘 다 아닐 경우 '3' DECODE(A, B, DECODE(C, D, '1', null)) :: A 가 B 일 경우, C 가 D 를 만족하면 '1', C 가 D 가 만족 안 하면 null DECODE(A, B, DECODE(C, D, '1', '2')) :: A 가 B 일 경우, C 가 D 를 만족하면 '1', C 가 D 를 만족 안 하면 '2' SQL의 DE..
NULL 값 치환하기 - NUL NVL(조사할 컬럼, null일 경우 치환할 값) 먼저, 주의할 점은 조사할 컬럼(comm)과 치환할 값(0)의 데이터 타입이 같아야 한다는 것입니다. 적용해보면, 기존 NULL 값이 0으로 치환된 것을 볼 수 있습니다. 응용해보면, 여기서 '보너스 없음' 은 문자형이므로 COMM 컬럼의 타입을 문자형으로 변환하지 않으면, 실행이 되지 않습니다. 그러므로 조사할 컬럼과 치환할 값의 데이터 형식을 맞춰주기위해 COMM 컬럼을 TO_CHAR 함수를 사용해서 문자로 만들어준거죠! NULL 값 치환하기 - NUL2 NVL2(조사 대상 컬럼 , null이 아닐 경우 치환할 값 , null일 경우 치환할 값) 이 함수는 NUL 함수와 다르게, 조사대상 컬럼(comm)과 null 인 ..
문자형을 숫자형으로 변환하기- TO_NUMBER TO_NUMBER(숫자같은 문자) 먼저, Oracle 에서 TO_NUMBER 함수를 사용하지 않아도 문자를 숫자로 인식하고 계산해줍니다. 이것은 Oracle의 특징인데, 데이터 형을 자동으로 변환해주어 상수인지 문자열인지 알아서 구분해준다는 것이죠! 이를 묵시적, 혹은 자동 형 변환이라고 합니다. 결과가 똑같은 것을 확인할 수 있습니다. 하지만 이는 Oracle 에 적용되는 것이고 다른 DB나 언어에서는 적용이 안될 수 있다는 것! 참고해주세요~ 참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정