본문 바로가기

DataBase

(23)
[DATABASE] 트리거 트리거특정 테이블에 INSERT, UPDATE, DELTE 등의 이벤트가 발생할 때 자동으로 실행되는 저장 프로시저주로 데이터 무결성 유지, 로깅 및 감사 용도로 사용트리거 특징트리거는 DML과 같은 트랜잭션 안에서 실행되어 에러 발생시 전체 롤백 가능보통 DML 실행 후 실행 되지만 일부 RDBMS에서는 실행시점 설정 가능 변경 전 데이터와 변경 후 데이터를 모두 비교 가능 트리거 장점별도 코드 없이 DB 내부에서 자동으로 동작 (자동화)무결성 보장 가능변경 이력을 남기는데 적합(누가, 언제, 무엇을 바꿨는지)트리거 단점외부에서 보기 어렵고, 실행 시점도 명확하지 않아 디버깅이 어려움과도한 트리거나 복잡한 로직은 DML 속도 저하 유발 가능성이 있음트리거 안에서 또 다른 트리거를 호출할 경우 무한 루프..
[DATABASE] 스토어드 프로시저 스토어드 프로시저미리 작성해두고 데이터베이스에 저장해 놓은 SQL 문들의 집합필요할 때마다 호출하여 실행할 수 있는 사용자 정의 함수 같은 개념반복적인 SQL 작업을 캡슐화해서 재사용이 가능실행 계획이 캐싱되어 성능 향상보안, 권한 제어에 유리트랜잭션 및 오류 처리 가능기본 문법CREATE PROCEDURE 프로시저명 @[매개변수명] [데이터타입]ASBEGIN SQL 문END-- 실행시EXEC [프로시저명] @[매개변수명]-- 외부에서 값을 받고 싶을 때CREATE PROCEDURE 프로시저명 @[입력값] [데이터타입], @[출력값] [데이터타입] OUTPUTASBEGIN SET @[출력값] = @[입력값]END-- 실행시DECLARE @[결과값] [데이터타입]EXEC [프로시..
[DATABASE] PIVOT / UNPIVOT PIVOT행을 열로 바꿔주는 연산자이다.주로 값 집계 + 가로 형태의 데이터 요약에 사용된다.GROUP BY와 유사한 집계 목적이지만 결과를 세로 방향이 아닌 가로로 회전시켜 보여준다.주로 리포트, 대시보드, 요약 통계에서 자주 사용된다.PIVOT 기본 문법SELECT PIVOT FOR에 있는 행에서 열로 바꿀 컬럼, PIVOT IN안에 있는 컬럼, 값 컬럼 -- * 도 가능FROM ( SELECT 행으로 되어 있는 값들 FROM 테이블명) AS 테이블별칭PIVOT ( SUM(집계할 값) FOR 행에서 열로 바꿀 컬럼 IN ([열1], [열2], ...)) AS 피봇테이블 별칭;테이블 별칭과 피봇 테이블 별칭은 마음대로 부여해도 된다.테이블 별칭은 별도로 PIVOT 안에서 쓰..
[DATABASE] RDBMS 고유 함수의 종류 MSSQL 기준으로 작성RDBMS 고유 함수의 종류문자열 함수수학 함수날짜/시간 함수형변환 함수논리/흐름 제어NULL 처리 함수집계 함수분석 함수 (윈도우 함수)문자열 함수 종류함수명의미예시결과LEN(문자열)문자열 길이 반환LEN('홍길동;) 4LEFT(문자열, 위치)왼쪽에서 n글자 추출LEFT('홍길동', 1)홍RIGTH(문자열, 위치)오른쪽에서 n글자 추출RIGTH('홍길동', 1)홍SUBSTRING(문자열, 시작 위치, 끝 위치)범위 만큼 문자열 추출SUBSTRING('홍길동', 2, 3)길동REPLACE(문자열, 변환할 문자, 문자)문자열 일부 변경REPLACE('홍길동', '홍', '김')김길동TRIM(문자열)* SQL Server 2017 버전부터 지원 양 끝 공백제거 TRIM(' 홍길동 '..
[DATABASE] 연산자 종류 MSSQL 기준으로 작성연산자값(데이터) 또는 표현식 간의 연산(계산, 비교, 조합 등) 을 수행하는 기호 또는 키워드DBMS 마다 조금씩 다다르고 지원되는게 있고 안되는게 있으니 해당 DBMS에서 어떤 연산자를 제공하는지를 잘 확인하자연산자 종류산술 연산자비교 연산자논리 연산자문자열 연산자NULL처리 연산자집합 연산자기타 특수 연산자산술 연산자숫자 데이터를 다룰 때 사용하는 기본적인 연산자들SELECT 문 등 계산을 직접할 수 있게 도와준다.주로 숫자 컬럼이나 상수 값에 연산을 적용할 때 사용산술 연산자 종류연산자의미예시결과 예시+더하기SELECT 100 + 100200-빼기SELECT 100 - 991*곱하기SELECT 100 * 10010000/나누기SELECT 10 / 52%나머지SELECT 4..
[DATABASE] 서브쿼리 서브쿼리SQL 문장 안에 다른 쿼리문을 중첩해서 사용하는 쿼리쿼리 안에 또 다른 쿼리복잡한 조건을 간결하게 처리하기 위해집계 결과를 필터 조건으로 쓰기 위해다른 테이블과 비교하거나 조회한 값을 조건으로 쓰기 위해서브쿼리의 종류분류설명예시스칼라 서브쿼리하나의 값(1 row, 1 col)을 반환(SELECT ...)인라인 뷰FROM절 안에서 테이블처럼 사용FROM (SELCT ...)서브쿼리 IN 절특정 컬럼이 여러 값 중 하나와 일치하는지 체크WHERE col IN (SELECT ...)EXIXTS 서브쿼리존재 여부 확인용WHERE EXISTS (SELECT ...)WHERE NOT EXISTS (SELECT ...)서브쿼리 사용시 주의사항서브쿼리는 괄호로 묶어야 함스칼라 서브쿼리는 반드시 1행 1열만 반..
[DATABASE] ORDER BY / LIMIT / OFFSET ORDER BY조회 결과를 정렬할 때 사용기본적으로 오름차순(ASC), 내림차순(DESC)를 지원복수(다중)정렬도 가능하고 사용시 먼저 작성한 컬럼 순서대로 정렬된다.문법-- 단일 정렬SELECT 컬럼명FROM 테이블ORDER BY 컬럼명 ASC-- 복수(다중)정렬SELECT 컬럼명FROM 테이블ORDER BY 컬럼명 DESC, 컬럼명 ASC, 컬럼명 ...예시)학생들을 나이가 많은 순으로 정렬하고 싶다.예상 순서 13 > 12 > 11 > 9 > 8결과쿼리문SELECT *FROM STUDENTORDER BY STUDENT_AGE DESC; 복수(다중) 정렬 예시)학생들을 나이 많은 순인데 이름은 ㄱㄴㄷ 순으로 보고싶다.김대호와 박만기를 추가해서 9살인 인원이 3명으로 늘었다.그럼 여기서 예상되는 ..
[DATABASE] GROUP BY / HAVING GROUP BY데이터를 특정 기준으로 묶어서(GROUP) 집계함수와 함께 사용하는 구문예시로는 학교별 학생수, 과목별 최고 점수, 부서별 평균 급여 등등사용시 주의사항은 SELECT문에 있는 컬럼은 GROUP BY절에 있거나 집계함수로 감싸야함GROUP BY 없이 집계함수를 사용할 경우 전체 집계만 가능하다.자주 쓰이는 집계함수함수설명COUNT()개수SUM()합계AVG()평균MAX()최대값MIN()최소값문법SELECT 그룹컬럼, 집계함수(컬럼)FROM 테이블GROUP BY 그룹컬럼;예시)학교별 학생이 몇명인지 알고 싶다.예상데이터 = 혜화초등학교: 2명 / 효제초등학교 1명 / 사대초등학교 1명 / 강북초등학교 1명 / 미아초등학교 0명결과쿼리문SELECT SC.SCHOOL_SEQ AS SCHOOL..