목록Language (41)
eunzae's develog
바인드 변수(Bind Variable) 쿼리의 재사용성을 높이기 위해 변수를 설정하고 값을 할당하는 기능 VAR V1 NUMBER; -- 변수선언 EXEC :V1 := 2; -- 값 할당 SELECT :V1 AS C1 FROM DUAL; -- C1 열에 2가 입력된 결과가 출력됨 - VAR 명령어로 변수를 선언 - EXEC 명령어로 값을 할당 - 변수를 선언하고 사용할 때에는 : 구분자를 변수명 앞에 추가해서 사용 Parsing 부하 감소를 위해 재사용 가능한 Static SQL 문장의 작성 - SQL 문에 상수 값을 사용하여 작성 할 떄 서로 다른 상수 값은 Parsing 시 다른 SQL 문으로 인식하여 재 Parsing 하므로 Bind Variable을 사용하여 같은 SQL이 공유될 수 있도록 함 -..
그룹함수 정의 - 데이터를 통계 내기 위해서는 전체 데이터에 대한 통계는 물론이고, 데이터 일부에 대한 소계, 중계 또한 필요 - 각 레벨 별 SQL을 UNION문으로 묶어 작성할 수도 있으나, ORACLE에서는 통계 데이터를 위한 몇가지 함수를 제공함 GROUP BY SELECT D.NAME as DEPT_NAME, J.NAME as JOB_NAME, AVG(F.SALARY) AS AVG_SALARY FROM EMP E JOIN DEPT D ON E.DEPT_ID = D.DEPT_ID JOIN JOB J ON E.JOB_ID = J.JOB_ID GROUP BY D.NAME, J.NAME ; ROLL UP - 그룹화하는 컬럼에 대한 부분적인 통계를 제공함(그룹 별 소계 및 총계 계산) SELECT D.N..
윈도우 함수 - 순위, 집계 등 행과 행 사이에 관계를 정의하는 함수 - OVER 구문을 필수로 함 SELECT WINDOW_FUNCTION(ARGUMENTS) OVER ([PARTITION BY 컬럼] [ORDER BY절] [WINDOWING절]) FROM 테이블명 ; 구조 설명 ARGUMENTS 윈도우 함수에 따라서 필요한 인수 PARTITION BY 전체 집합에 대해 소그룹으로 나누는 기준 ORDER BY 소그룹에 대한 정렬 기준 WINDOWING 행에 대한 범위 기준 구조 설명 ROWS 물리적 단위로 행의 집합을 지정 UNBOUNDED PRECEDING 윈도우의 시작 위치가 첫번째 행 UNBOUNDED FOLLOWING 윈도우의 마지막 위치가 마지막 행 CURRENT ROW 윈도우의 시작 위치가 ..
VIEW - VIEW는 다른 테이블에서 파생된 테이블 - 물리적으로 데이터가 저장되는 것이 아니라, 논리적으로만 존재함 - VIEW를 사용한 질의 시에는 DBMS 에서 VIEW 정의에 따라 질의를 재작성하여 수행함 VIEW 장점 특징 설명 독립성 - 테이블 구조가 변경되어도 뷰를 사용하고 있는 응용프로그램은 변경하지 않아도 됨 편리성 - 자주 사용되는 복잡한 쿼리를 미리 뷰로 정의해놓으면, 추후 쿼리는 간단한 형태로 표현할 수 있음 보안성 - 사용자의 권한에 따라 열람 가능한 데이터를 다르게 할 수 있음 - 권한에 따라 확인 가능한 컬럼을 정의하여 뷰를 생성하며, 기본 테이블 노출 없이 접근 제어를 할 수 있음. VIEW 특징 - 생성된 뷰는 또 다른 뷰를 생성하는데 사용될 수 있음 - 뷰의 정의는 변경..
동작하는 방식에 따른 서브쿼리 분류 연관 서브쿼리 - 메인쿼리의 컬럼이 서브쿼리에 포함되며, 메인쿼리의 컬럼은 서브쿼리에 특정 조건으로 사용 연관 서브쿼리 예시: 본인이 속한 반의 평균 점수보다 높은 점수를 받은 학생 출력 SELECT student_id, class_id, student_name, score FROM student a WHERE score > (SELECT AVG(score) FROM student b WHERE b.class_id = a.class_id) ; 비연관 서브쿼리 - 메인쿼리의 컬럼이 서브쿼레이 포함되지 않으며, 주로 메인 쿼리에 특정한 값을 제공할 때 사용 비연관 서브쿼리 예시: EUNJAE가 속한 반의 평균 점수를 출력한다 SELECT AVG(score) FROM stu..

JOIN(교집합) - 두개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력 EQUI JOIN(등가 교집합) - 두개 테이블 간에 서로 정확하게 일치하는 경우를 활용 - 등가 연산자(=)를 사용한 JOIN - 대부분 기본키-외래키 관계를 기반으로 발생하나, 모든 JOIN이 그런 것은 아님. Non EQUI JOIN(비등가 교집합) - 두개 테이블 간에 서로 정확하게 일치하지 않는 경우를 활용하는 JOIN - 등가 연산자 이외의 연산자들(>,>=,
계층형 질의 테이블에 계층형 데이터가 존재하는 경우, 데이터를 조회하기 위해 사용하는 것 주로 ORACLE과 SQL Server에서 사용 계층형 데이터 동일 테이블에 계층적으로 상위와 하위 데이터가 포함되어 있는 데이터 ex) 한 테이블에 사원과 관리자 표현 계층형 질의 예시(ORACLE) SELECT LEVEL, 자식컬럼, 부모컬럼, 원하는컬럼 FROM 테이블명 START WITH 부모컬럼 IS NULL --부모컬럼이 NULL인 행이 Root(가장 상위)가 됨 CONNECT BY PRIOR 자식컬럼 = 부모컬럼 -- 상위 데이터와 하위 데이터의 연결 방식 ; SELECT LEVEL, LPAD(' ',4*(LEVEL-1))||부모컬럼, 자식컬럼 FROM 테이블명 START WITH 자식컬럼 IS NULL..
집합연산자 - 두개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중 하나. - 테이블에서 SELECT한 컬럼 수와 각 컬럼의 데이터 타입이 테이블 간 상호 호환 가능해야 한다. UNION , UNION ALL: 여러 SQL 쿼리를 하나로 만들어주는(병합하는) 쿼리문 → 합집합 UNION 중복 데이터를 제거하여 여러 테이블을 병합 UNION ALL 중복 데이터를 제거하지 않고 여러 테이블을 병합 INTERSECT: 여러 SQL 쿼리에 대해 겹치는 데이터를 추출하는 연산 → 교집합 INTERSECT 중복 데이터를 제거하고 겹치는 데이터를 출력 EXCEPT: 여러 SQL 쿼리에 대해 겹치는 데이터를 첫번째 테이블에서 제외하고 추출하는 연산 → 차집합 EXCEPT 첫번째 테이블에서 겹치..
스칼라 서브쿼리 정의 - SELECT절에서 사용하는 서브쿼리 - 오로지 한 행만 반환 - 마치 JOIN을 사용한 것과 같은 결과를 나타냄 → 그러면 왜 씀? → 데이터가 많을 때, JOIN보다 계산속도가 빠름 2. 스칼라 서브쿼리 사용 방법 select distinct emp_no, (SELECT avg(salary) FROM salaries as A WHERE A.emp_no = B.emp_no) as avg_salary FROM salaries as B ;
다중 행 비교 연산자 연산자 연산자 뜻 IN 하나라도 만족하면 참 ANY 내부적으로 모두 OR 연산을 함 ALL 내부적으로 모두 AND 연산을 함 1. IN SELECT * FROM TABLE WHERE score IN(60,70,80); SELECT * FROM TABLE WHERE score='60' OR score='70' OR score='80'; 2. ANY /* '='연산자 */ SELECT * FROM TABLE WHERE score =ANY(60,70,80); SELECT * FROM TABLE WHERE score='60' OR score='70' OR score='80'; /* '>'연산자 */ SELECT * FROM TABLE WHERE score >ANY(60,70,80); SEL..