본문 바로가기

DataBase/Oracle13

LISTAGG LISTAGG LISTAGG는 여러 행의 데이터를 하나의 행에 나열하고 싶을 때 사용한다. 바로 예시를 보자. 사원테이블을 아래와 같이 조회해보자.(사번, 이름, 부서번호) SELECT employee_id, emp_name, department_id FROM EMPLOYEES; 각 부서별 사원 목록 각 부서 별로 사원의 이름을 출력해보자. SELECT department_id, emp_name FROM EMPLOYEES GROUP BY department_id, emp_name ORDER BY department_id; 여기서 데이터를 좀 더 효율적이고 편하게 보고 싶다는 생각이 든다. 각 부서 별로 속해 있는 사원을 한 행에 출력하고 싶어진다. 이때 사용할 수 있는 함수가 LISTAGG이다. LIST.. 2023. 10. 13.
MERGE문 MERGE 문이란? 단순하게 말해서 있으면 UPDATE, 없으면 INSERT 하는 문법이다. 그러나 좀 복잡하다. 이해를 하기 위해 차근차근 해보자. 먼저 기본적인 문법은 다음과 같다. 뭐라는건지 상당히 복잡해보이지만 영어를 잘 해석해보면 WHEN 절로 분기를 나누고 조건이 MATCH 되냐 안되냐에 따라서 UPDATE, INSERT 된다는 정도, 그리고 DELETE도 가능하다는 정도는 알 수가 있다. 일단 바로 들어가보자! (DELETE는 맨 나중에 추가하는 방식으로 해보자.) 참고로 DELETE는 UPDATE절에서 DELETE WHERE 조건문이 성립하면 UPDATE 안하고 DELETE 한다. 예시를 위해 사전 작업부터 해야한다. 테이블 하나를 간단히 만들었다. 위의 만든 테이블에 데이터를 넣어보자. .. 2023. 9. 14.
INSERT ALL INSERT ALL 여러 건의 insert 문을 실행할 때 INSERT ALL 구문을 사용하면 한 번에 처리할 수 있다. 한 테이블에 여러 개의 로우를 입력할 수도 있지만 여러 개의 테이블에 INSERT를 수행할 수도 있다. 예를 들어보자. 우선 예시를 위해 테이블 두개를 만들었다. test_tb1 테이블에 두 개의 로우를 입력을 해야 한다면 다음과 같은 두 개의 INSERT 문을 사용한다. INSERT INTO test_tb1 VALUES(001, '김구'); INSERT INTO test_tb1 VALUES(002, '이순신'); 하지만 INSERT ALL 구문을 사용하면 한 번에 처리할 수 있다. 다중 테이블 INSERT 구문을 사용할 때는 반드시 서브 쿼리가 동반되어야 한다. 따라서 마지막에 의미.. 2023. 8. 30.
SELECT 1 FROM 테이블명; SELECT 1 FROM 테이블명; 해당 테이블의 ROW 개수만큼 1을 출력 여기서 1은 TRUE를 의미 WHERE 조건문과 함께 쓰면 해당 조건을 만족하면 1을 반환 보통 다중행 서브 쿼리문에서 WHERE 조건절에 (NOT)EXISTS 안의 서브쿼리에서 사용 EXISTS로 SELECT * FROM EMP 또는 SELECT 1 FROM EMP 등이 논리식에 사용될 때는 실제 값이 아닌 값의 존재 유무가 중요하기 때문에 간단하게 SELECT 1 FROM EMP를 사용 SELECT 1 FROM EMPLOYEES;를 실행하면 SELECT COUNT(*) FROM EMPLOYEES 만큼의 1이 나온다. WHERE 조건문을 추가해보자. WHERE 조건문과 함께 쓰면 해당 조건을 만족하면 1을 반환하게 된다. 만족.. 2023. 8. 30.
반응형