본문 바로가기

BackEnd/DB, SQL28

SQL 13편: 서브쿼리 서브쿼리 서브쿼리는 SQL문을 실행하는 데 필요한 데이터를 추가로 조회하기 위해 SQL문 내부에서 사용하는 SELECT문을 의미한다. 이에 반해 서브쿼리의 결과 값을 사용하여 기능을 수행하는 영역은 메인쿼리라고 부른다. 서브쿼리의 특징 서브쿼리의 특징을 정리하면 다음과 같다. 1. 서브쿼리는 비교 대상의 오른쪽에 놓인다. 2. 괄호 ()로 묶어 사용한다. 3. ORDER BY절을 사용할 수 없다. (특수한 경우 제외) 4. 메인 쿼리의 비교 대상과 같은 자료형과, 같은 개수로 지정해야 한다. 5. 서브쿼리의 결과 행 수는 메인쿼리의 연산자 종류(단일행 연산자인지, 다중행 연산자인지)와 호환 가능해야 한다. 단일행 서브쿼리 특정 함수를 사용한 결과 값이 하나일 때 단일행 서브쿼리로서 사용할 수 있다. 단일.. 2021. 12. 30.
SQL 12편: 조인 (집합 연산자와 조인의 차이점, WHERE절 조인, SQL-99 표준 문법 조인) 집합 연산자와 조인의 차이점 - 집합 연산자를 사용한 결과는 두 개 이상의 SELECT문의 결과 값을 세로로 연결한 것. 즉 행이 늘어나는 것 - 조인을 사용한 결과는 두 개 이상의 테이블 데이터를 가로로 연결한 것. 즉 열이 늘어나는 것 FROM절에는 여러 개 테이블을 지정하는 것이 가능하다. 꼭 테이블이 아니더라도 테이블 형태이면 모두 FROM절에 지정할 수 있다. (뷰, 서브쿼리 등) FROM절에 명시한 각 테이블을 구성하는 행이 모든 경우의 수(데카르트 곱)로 출력된다. 그렇기 때문에 이 모든 경우의 수들 중에서 적절한 출력 행을 선정하는 조건식을 담은 WHERE 절이 필요하다. 다른 테이블의 동일한 열 이름 구분하기 여러 테이블에 동일한 열이 들어 있는 경우, 구분을 위해 아래와 같이 표현한다... 2021. 12. 27.
SQL 11편: GROUP BY절 사용하기(+ HAVING절) GROUP BY절 GROUP BY절의 값이 동일한 것 끼리 같은 그룹이 되며, 이 같은 그룹끼리 연산된다. GROUP BY절에 명시하는 열은 여러 개 지정할 수 있다. 먼저 지정한 열로 대그룹을 나누고 그 다음 지정한 열로 소그룹을 나눈다. GROUP BY 절에는 별칭이 인식되지 않으므로, 열 이름이나 연산식을 그대로 지정해 주어야 한다. 다중행 함수를 사용하지 않은 일반 열은 GROUP BY절에 명시하지 않으면 SELECT 절에서 사용할 수 없다. 행의 개수가 차이가 나기 때문이다. HAVING 절 GROUP BY절에 조건을 줄 때 사용한다. 즉, 그룹화된 결과 값의 범위를 제한하는 데 사용한다. SELECT문에 GROUP BY절이 존재할 때만 사용할 수 있으며, GROUP BY절 바로 다음에 작성한다.. 2021. 12. 27.
SQL 10편: 다중행 함수(SUM, COUNT, MAX, MIN, AVG) 다중행 함수란 여러 행을 입력 받아 하나의 행으로 결과가 나오는 함수이다. SUM(DISTINCT(생략시 기본값=ALL) 열 이름) NULL데이터는 제외하고 합계를 구하므로 NULL데이터가 있어도 정상적으로 연산된다. DISTINCT 를 쓸 경우, 중복 데이터는 제외하고 계산한다. COUNT(DISTINCT(생략시 기본값=ALL) 열 이름) WHERE절의 조건식과 함께 사용하면 조건에 맞는 행의 개수를 구할 수 있다. EX1. 특정 회원이 작성한 총 글 수, 댓글 수, 등을 잘 조합하여 회원 등급을 관리할 수 있다. EX2. 웹 쇼핑몰에서 어떤 상품이 많이 구매되었는지 분석할 때도 활용할 수 있다. MAX(DISTINCT(생략시 기본값=ALL) 열 이름) MIN(DISTINCT(생략시 기본값=ALL) 열.. 2021. 12. 27.
SQL 9편: DECODE 함수와 CASE문 열 값이나 데이터 값에 따라 어떤 데이터를 반환할 지 정할 때 사용한다. DECODE 함수 DECODE(검사 대상, 조건1, 조건1 일치 반환 결과, ... , 조건 N, 조건N 일치 반환 결과, 조건1~N과 일치한 경우가 없을 때 반환할 결과(기본값=NULL)) CASE문 CASE 검사 대상 WHEN 조건1 THEN 조건1 true일 때 반환할 결과 ... WHEN 조건N THEN 조건N true일 때 반환할 결과 ELSE 조건1~N과 일치하는 경우가 없을 때 반환할 결과 END AS 열이름 2021. 12. 27.
SQL 8편: NULL 처리 함수(NVL, NVL2) NULL 처리 함수 특정 열의 데이터가 NULL일 경우에 연산 수행을 위해 데이터를 NULL이 아닌 다른 값으로 대체해 주어야 할 때 사용한다. NVL 함수 NVL(검사할 열, 데이터가 NULL일 경우 반환할 데이터) NULL이 아닐 경우 데이터를 그대로 반환, NULL인 경우 지정한 데이터를 반환 NVL2 함수 NVL2(검사할 열, NULL아닐 경우 반환할 데이터 OR 계산식, NULL일 경우 반환할 데이터 OR 계산식) 데이터가 NULL이 아닐 때 반환할 데이터도 지정할 수 있다. 2021. 12. 27.
SQL 7편: 형 변환 함수(TO_CHAR, TO_NUMBER, TO_DATE) 형 변환 함수 지정된 자료형을 바꿔 주는 함수 암시적 형 변환(= 자동 형 변환) 숫자로 인식 가능한 문자 데이터가 자동으로 숫자로 바뀐 후 연산이 수행 되는 것. 숫자 + '500' 계산 시 '500'의 500은 문자 데이터이지만, 숫자 데이터로 취급하고 더해 줌. 명시적 형 변환 TO_CHAR(날짜, '날짜or시간or숫자 형식') TO_NUMBER('문자열', '숫자 형식') TO_DATE('문자열', '날짜 형식') TO_CHAR 숫자, 날짜 → 문자 TO_NUMBER 문자 → 숫자 TO_DATE 문자 → 날짜 원하는 형식으로 형 변환을 해주는 함수. ※ 날짜 형식 CC 세기 YYYY, RRRR 연(4자리 숫자) YY, RR 연(2자리 숫자) MM 월(2자리 숫자) MON 월(월 이름 약자) MON.. 2021. 12. 27.
SQL 6편: 날짜 함수(SYSDATE, ADD_MONTHS, MONTHS_BETWEEN, NEXT_DAY, LAST_DAY, ROUND) 날짜 데이터의 간단한 연산 날짜 데이터 + 숫자 숫자 만큼의 일 수 이후의 날짜 날짜 데이터 - 숫자 숫자 만큼의 일 수 이전의 날짜 날짜 데이터 - 날짜 데이터 두 날짜 데이터 간의 일 수 차이 날짜 데이터 + 날짜 데이터 X(불가) SYSDATE 오라클 DB 서버가 놓인 OS의 현재 날짜와 시간을 보여준다. 입력 값이 없지만, 함수이다. ADD_MONTHS(날짜, 더할 개월 수) 지정한 날짜에서 N달 후의 날짜를 반환한다. 윤년(2월 29일이 있는 년도) 계산을 편하게 해준다. MONTHS_BETWEEN(날짜1, 날짜2) 두 날짜 간의 개월 수 차이를 소수 점 단위까지 구해준다. NEXT_DAY(날짜, 요일 문자) 특정 날짜를 기준으로 돌아오는 요일의 날짜를 출력해주는 함수 LAST_DAY(날짜) 해.. 2021. 12. 27.
SQL 5편: 숫자 함수(ROUND, TRUNC, CEIL, FLOOR, MOD) 숫자 함수 종류 요약 ROUND(숫자, 연산 위치(기본값=0)) 반올림 TRUNC(숫자, 연산 위치(기본값=0)) 버림 CEIL(숫자) 가장 가까운 큰 정수 FLOOR(숫자) 가장 가까운 작은 정수 MOD(나눠질 숫자, 나눌 숫자) 나머지 ROUND(숫자, 연산 위치(기본값=0)) TRUNC(숫자, 연산 위치(기본값=0)) *연산 위치 -2 10^2 자리까지 표현 -1 10^1 자리까지 표현 0 소수 없이 정수만 표현 1 소수점 첫째자리까지 표현 2 소수점 둘째자리까지 표현 CEIL(숫자) 입력된 숫자와 제일 가까운 큰 정수 FLOOR(숫자) 입력된 숫자와 제일 가까운 작은 정수 MOD(나눠질 숫자, 나눌 숫자) 나머지 반환 2021. 12. 27.
SQL 4편: 문자 함수(LENGTH, SUBSTR, INSTR, REPLACE, LPAD, RPAD, CONCAT, TRIM, LRTIM, RTRIM) 대/소문자 변경 함수 UPPER(s) 대문자로 변환 LOWER(s) 소문자로 변환 INITCAP(s) 첫 글자는 대문자, 나머지는 소문자로 변환 대·소문자 구분 없이 값을 비교할 때 활용할 수 있다. SELECT * FROM EMP WHERE UPPER(ENAME) LIKE UPPER('%scott%'); 데이터 길이 반환 함수 LENGTH() 문자열 길이 반환 LENGTHB() 바이트 수를 반환 SUBSTR(문자열, 시작 위치, 추출 길이) 문자열의 일부를 추출하고 싶을 때 사용한다. EX. 11자리의 전화번호 중 마지막 4자리 번호만 필요한 경우 첫 번째 자리는 0이 아닌 1이다. 시작위치에 -를 붙일 경우 맨 마지막 자리가 -1이 된다. INSTR(대상 문자열, 찾고 싶은 문자, 찾기 시작할 위치(.. 2021. 12. 27.
SQL 3편: 함수의 종류(단일행 함수, 다중행 함수) 단일행 함수 VS 다중행 함수 데이터 베이스의 함수 처리 결과는 표의 형태로 나오기 때문에, 다른 영역에서의 함수들과는 달리 단일행 함수, 다중행 함수로 구분 된다. 단일행 함수: 입력된 한 행당 결과가 하나씩 나오는 함수 (ex. UPPER, SUBSTR) 다중행 함수: 여러 행이 입력되어 하나의 행으로 결과가 반환되는 함수 (ex. COUNT, MAX) FROM DUAL; DUAL 테이블이란, SCOTT 계정도 사용할 수 있는 더미 테이블이다. 데이터 저장 공간이 아닌 임시 연산이나 함수의 결과 값 확인 용도로 종종 사용된다. 단일행 함수의 종류 문자 함수 숫자 함수 날짜 함수 형 변환 함수 NULL 처리 함수 DECODE함수, CASE문 다중행 함수의 종류 SUM 함수 COUNT 함수 2021. 12. 27.
SQL 2편: WHERE절과 연산자(논리, 산술, 비교, NOT, IN,BETWEEN, LIKE, IS NULL, 집합 연산자), 연산자의 우선순위 1. WHERE절 SELECT문으로 데이터를 조회할 때 특정 조건을 기준으로 원하는 행을 출력하는 데 사용한다. SELECT 문이 열을 지정하는 것이라면, WHERE절은 행을 지정하는 것이다. WHERE절에서 문자열을 비교할 때는 작은 따옴표 '로 묶어 주어야 한다. 테이블 안의 값들은 대소문자를 구별하므로, 정확하게 지정해야 한다. SELECT * FROM TABLE WHERE A=1; 2. 연산자 WHERE절에서 원하는 행만 골라내려면, 조건식이 필요하다. 이 때 사용하는 것이 연산자이다. 1) 논리 연산자 AND, OR 등 2) 산술 연산자 +, -, *, / 3) 비교 연산자 >, >=, 2021. 12. 17.