분류 전체보기 160

[SQL] TRUNCATE와 DELETE의 차이점

TRUNCATE와 DELETE는 모두 데이터를 삭제하는 명령인데TRUNCATE는 DDL(자동커밋)이고DELETE는 DML이다.이 외에도 몇가지의 차이점이 존재한다.이유는 DELETE와 TRUNCATE의 데이터 삭제 방법이 다르기 때문이다. DELETEWHERE절을 사용하여 테이블에 있는 데이터를 하나하나 선택하여 제거한다. TRUNCATE전체 데이터를 한번에 삭제한다.HWM(high-water mark)를 처음으로 이동시키는 방식으로 테이블 구조는 그대로 남겨둔 채 모든 행을 삭제한다.  SQL테이블 존재속도복구DELETEDMLO아주 느리다ROLLBACK(ONLINE)TRUNCATEDDLO매우 느리다FLASHBACK DATABASE(OFFLINE)DROPDDLO매우 빠르다FLASHBACK DROP(ONL..

SQL 2024.10.02

[DB] 인덱스

* ORDER BY로 정렬하는 것은 성능이 저하될 가능성이 있기 때문에 인덱스를 이용하는 것이 바람직하다고 한다. 인덱스란?인덱스 키 값(컬럼 값)과 포인터(해당 행의 주소)가 저장된 일종의 테이블인덱스가 많다고 좋은 것이 아님(유지비용 증가) (테스트 해보고 좋으면 유지)테이블의 컬럼 또는 복수의 컬럼에 대해 인덱스 생성(단일 인덱스, 결합(복합)인덱스)인덱스 키 값은 오름차순으로 정렬되어 인덱스에 저장됨NULL 값은 인덱스화 되지 않음인덱스 작업은 테이블에 독립적 (언제든지 생성, 삭제 가능)테이블이나 다른 인덱스에 영향을 미치지 않고 테이블 삭제 시 함께 삭제됨테이블에 DML -> 인덱스 항목도 DML인덱스의 업데이트는 DELETE -> INSERT의 두 가지 명령이 수행되기 때문에 지나친 인덱스 ..

데이터베이스 2024.10.02

[DB] VIEW

뷰(View)란?데이터의 논리적 부분 집합 또는 조합을 나타내는 스키마 객체데이터를 바라보는 관점쿼리에 이름을 붙인 것데이터 딕셔너리에 SELECT 문으로 저장됨필요에 의해 언제든지 호출 가능논리적 테이블(자체 테이터는 없음)테이블 또는 다른 뷰를 기반으로 만들어짐 * 쓰면 좋은 점 *테이블의 컬럼 데이털르 선택적으로 표시하므로 데이터 액세스를 제한할 수 있다. (보안에 좋음)복잡한 쿼리문을 뷰를 이용하면 간단히 쿼리할 수 있다.특정 유저나 응용 프로그램과 데이터를 분리: 데이터 독립성 제공컬럼 추가/삭제/변경 등이 애플리케이션에 영향을 미치지 않게 함하나의 테이블로부터 필요에 따라 여러 뷰 생성 CREATE VIEW view_name AS SELECT column1, column2, ... ..

데이터베이스 2024.10.02

[SQL] (오라클 기준) GROUP BY 확장함수(ROLLUP, CUBE)

--부서별 평균급여와 부서 및 직무별 평균 급여를 조회하세요.SELECT department_id, NULL AS job_id, avg(salary)FROM employeesGROUP BY department_idUNION ALL -- 첫 번째 컬럼을 따라감 ( SELECT 두 번 수행하게 됨 -- cost 두배)SELECT department_id, job_id, avg(salary)FROM employeesGROUP BY department_id, job_idORDER BY 1, 2;-------------------------ROLLUP(GROUP BY의 확장기능)SELECT department_id, job_id, avg(salary)FROM employeesGROUP BY ROLLUP(dep..

SQL 2024.10.01

[SQL] JOIN + USING

NATURAL JOIN은 두 재료 집합에서 이름이 같고 데이터 형이 호환되는 컬럼끼리 조인해주는데 조인 결과 집합에 조인 컬럼은 한 번만 나타나고 ON절을 사용하지 않아서 조인 조건이 없어 편하지만, 조인 컬럼과 조인 조건을 제어할 수 없기 때문에호환되는 컬럼이 두 개 이상이거나 할 때 원하지 않은 조인 결과가 나올 수 있다. 이 때 JOIN ~ USING(컬럼1, 컬럼2)를 유용하게 쓰면 좋다.JOIN ~ USING은 NATURAL 조인을 하되, 필요한 컬럼만 지정하고자 할 때 사용한다. 괄호 안의 두 재료 집합에 공통인 컬럼을 써주면 된다. 이때 주의할 점은 JOIN 컬럼에 대해서는 별칭이나 테이블 이름과 같은 접두사를 붙이면 syntax 에러가 발생한다. 따라서 기준이 되는 JOIN 컬럼은 컬럼명만..

SQL 2024.10.01

[SQL] 외부 조인 주의해야할 점

외부 조인 (OUTER JOIN)을 할 때, 조인조건에 유의해야 한다.조인 조건을 만족하지 않는 행도 새로운 재료 집합에 포함되기 때문 LEFT OUTER JOIN (LEFT JOIN)은 왼쪽에 무조건 1행 이상이 나옴 (INNER JOIN 탈락행의 오른쪽에느 NULL 값이 추가됨)RIGHT OUTER JOIN (RIGHT JOIN)은 오른쪽에 무조건 1행 이상이 나옴 SELECT e.last_name, e.job_id, e.salary, d.department_nameFROM employees e RIGHT JOIN departments d ON e.department_id = d.department_id AND LENGTH(d.department_name) > 10; -- JOIN 조건에서 탈락해..

SQL 2024.09.30

[SQL] 조건부 표현식 CASE, DECODE(오라클 전용)

조건부 표현식에는 CASE 표현식이 있으며, Oracle에는 이와 비슷한 DECODE 표현식이 하나 더 있다.CASE 조건문은 Short-Circuit Evalution으로 조건이 참인 이후의 조건은 따지지 않는다.반환값들은 같은 데이터 타입이어야 한다. CASE 조건문--[SIMPLE_CASE_EXPRESSION SQL문]SELECT last_name, salary, job_id, CASE job_id WHEN 'IT_PROG' THEN 1.10 * salary --조건 만족하면 끝(Shor-Circuit Evaluation WHEN 'ST_CRERK' THEN 1.15 * salary WHEN 'SA_REP' THEN ..

SQL 2024.09.27

[SQL] SQL의 NULL

SELECT last_name, salary, commission_pct FROM employees WHERE commission_pct = NULL;  --> 결과값 아무것도 안나옴 ---------------------------------------------------------------------------------------------SELECT last_name, salary, commission_pct FROM employees WHERE commission_pct IS NULL; ========================================================================= NULL이란? Absence of Value값의 부재: 값 자체가 없는 상태..

SQL 2024.09.26