본문 바로가기

Oracle

(17)
NULL과 NULL을 처리하기 위한 NVL, NULLIF > DB null 처리 null 값은 아직 정의되지 않은 값으로 0, 공백과 다른 것입니다. 0은 숫자이고 공백은 하나의 문자입니다. 그러므로 null 값을 포함하는 연산의 결과는 무조건무조건 null입니다. 정의되지 않은 값을 연산할 순 없으니까요 select null + 2 from dual; > NVL(표현식1, 표현식2) 표현식1의 결과 값이 null이면 표현식2를 출력 select nvl(null, 1000) from dual; > 공집합의 NVL 활용 아래 쿼리는 대표적인 공집합을 발생시키는 쿼리입니다. select 1 from dual where 0=1; 위와 같이 아무것도 나오지 않는 결과를 보여줍니다. 조건에 맞는 데이터가 한건도 없는 경우를 공집합이라고 하며 null 데이터와는 다르게 ..
오라클 시퀀스 알아보기! 시퀀스(Sequence)란? 오라클 시퀀스(Sequecne)란 기본 키 값을 자동으로 생성할 수 있는 데이터베이스 오브젝트입니다. CREATE SEQUECNE 문을 사용해서 여러 사용자가 고유한 정수를 사용할 수 있게 도와줍니다. 시퀀스의 특이한 점은 사용자의 커밋과 롤백에 상관없이 시퀀스가 증가한다는 것입니다. 즉, 두 명의 사용자가 동시에 시퀀스를 증가시키면 두 명의 사용자는 다른 값의 시퀀스를 얻게 됩니다. 시퀀스를 사용하는 이유? 데이터베이스에서 테이블을 생성하고 데이터를 저장할 때, 이 테이블의 값을 구별하기 위한 고유한 식별번호를 PK로 지정하는 경우가 보통입니다. PK 값은 중복이 없는 고유한 번호를 반드시 지정해야 하며 이때 시퀀스를 활용하여 고유한 정수를 만들 수 있습니다. 예를들어 a ..
다른 테이블을 참조하여 UPDATE 하는 방법 다른 테이블의 SELECT 한 결과물을 참조하여 현재 테이블을 UPDATE 해야 하는 상황이 있습니다. Oracle, MS-SQL, Maria DB, Mysql DBMS마다 다른 문법을 지원하므로 방법도 각자 다릅니다. 저는 Oracle을 사용 중인데 다른 DBMS 보다 조금 문법이 어려운 것 같네요 이 방법에 한해서는요 ㅎㅎ table master, table user 두 개의 테이블이 있다고 가정하겠습니다. master 테이블의 Status을 user 테이블의 Status의 값을 참조하여 변경하는 쿼리를 작성해보겠습니다. MS-SQL UPDATE master SET master.status = cust.status FROM master m INNER JOIN cust c ON m.id = c.id; ..
서브쿼리의 종류와 WITH 쿼리 서브쿼리의 종류 SELECT col1, (SELECT * ...) - 스칼라 서브쿼리 -> 하나의 컬럼처럼 사용한다. FROM ( SELECT ... ) - 인라인 뷰 : 하나의 테이블 처럼 사용(테이블 대체 용도) WHERE col = (SELECT ...) -- 일반 서브쿼리 : 하나의 변수(상수) 처럼 사용, 서브쿼리의 결과에 따라 달라지는 조건절 WITH 쿼리 -> 이름이 부여된 서브쿼리라고 생각하면 이해하기 편하다. WITH 별칭 1 AS (서브쿼리) ,별칭 2 AS (서브쿼리) ... select from 별칭 1, 별칭 2 특징으로는 임시 테이블을 만들어 사용하여 한번의 실행계획만 성립된다. 그러므로 여러번 사용될수록 성능향상을 이룰 수 있다. 또한, 일반 서브쿼리는 서로 참조 할 수 없지만..
상위 N개 레코드 조회하기 https://programmers.co.kr/learn/courses/30/lessons/59405 코딩테스트 연습 - 상위 n개 레코드 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 프로그래머스 상위 N개의 쿼리 조회하기 문제를 풀어보고 실수한 것을 공유합니다. 처음에는 단순하게 상위 N개를 조건문에 주고 ORDER BY를 하게 되면 결과가 나올 줄 알았기 때문에 이런 방식으로 문제를 풀었습니다. SELECT NAME FROM AN..
CHAR, VARCHAR, VARCHAR2 차이점 오라클에서 문자를 저장하기 위해서는 알맞은 데이터 타입을 변수에 지정해줘야 합니다. 대표적인 3가지 데이터 타입을 보고 차이점을 보도록 하겠습니다. 1. CHAR CHAR 데이터 타입은 고정된 문자열을 저장하는 데 사용합니다. 테이블을 만들 때, 무조건 고정된 길이를 지정해줘야 하고 범위는 1~2000 bytes입니다. 한글의 경우 글자당 2byte이므로 1000글자가 저장가능하겠네요. 영문, 숫자의 경우 1byte입니다. 그러나 오라클에서는 캐릭터 셋에 따라서 한 글자를 3바이트로 인식하는 경우도 있다고 하니 주의해야 하겠습니다. 혹시 캐릭터 셋이나 인코딩이 궁금하신 분들은 아래 링크를 참조해 보시면 도움이 될 것 같습니다. 인코딩 이해 : https://d2.naver.com/helloworld/19..
PLSQL - 필수 개념 정리 PL SQL에서 패키지는 서로 관련 있는 프로시저 또는 함수들의 집합입니다. 패키지는 선언부(head)와 본문(body)로 나누어집니다. 선언부에는 패키지에 포함되는 프로시저, 함수, 커서, 변수, 예외 절 등을 선언하는 부분입니다. 특징은 선언부에서 선언한 것은 패키지 전체에서 사용할 수 있어서 전역 변수처럼 사용 가능하다는 것입니다. 패키지의 본문에서는 선언부에 선언한 프로시저들의 실행 부분을 정의하게 됩니다. 즉, 프로시저를 작성하는 부분입니다. 프로시저의 작성 부분은 총 3가지 section으로 나누어집니다. 선언부, 실행부, 예외처리 부입니다. 다른 부분들을 작성하는 것은 선택적이지만 실행부(Begin~End)는 필수적으로 존재해야 합니다. 선언부부터 보도록 하겠습니다. 선언부에는 변수, 상수,..
PL/SQL - DUAL TABLE PL/SQL에서는 from dual; 이라는 dual table을 사용하는 경우가 생깁니다. dual table을 왜 사용할까요..? 임시데이터를 만들거나 select를 이용한 데이터 조회 시에 특정 테이블을 생성하지 않고 dual table을 활용하면 됩니다. dual table의 소유자는 sys로 system이라는 것과 어느 사용자나 접근이 가능하다는 점을 기억하세요. 그리고 오직 한개의 row 한개의 column을 갖는 dummy 테이블입니다.