본문 바로가기
반응형

IT/Database98

[Oracle] 계층형 쿼리 사용법 계층형 쿼리라고 오라클에서 존재하는 문법이 있다. 테이블 내에서 예를들어 a b 대한민국 서울 서울 송파구 서울 강남구 송파구 방이동 송파구 문정동 이와 같이 a는 무조건 상위 개념이고 b는 무조건 하위개념인것처럼 이런 계층형을 만들수 있는 쿼리이다. 지금 처럼 주소 관련이나 상사, 하사 같은 개념을 표기할때 유용하게 쓰이곤 한다. 사용법 이전에 각 문법에 대한 개념 설명은 다음과 같다. 계층형 쿼리 : 부모, 자식 간의 수직관계를 트리 구조 형태로 보여주는 쿼리 START WITH : 트리 구조의 최상위 행을 지정 CONNECT BY : 부모, 자식의 관계를 지정 PRIOR : CONNECT BY 절에 사용되며 PRIOR에 지정된 컬럼이 맞은편 컬럼을 찾기 CONNECT BY PRIOR 자식 컬럼 = .. 2023. 2. 22.
[Oracle] ORA-00001: unique constraint () violated ERROR ORA-00001: unique constraint () violated . 무결성제약조건 에러 ORA-00001 은 무결성 제약 조건 에러이다. 즉 PK, FK, Index Key, Unique Key 등 테이블에 중복이 있어선 안될 값이 들어가려고 할때 발생하는 에러이다. 값을 변경해주거나 다른 값을 insert 함으로써 해결 가능하다. 2023. 2. 17.
[Oracle] EXISTS, NOT EXISTS 결론을 먼저 말하면 EXISTS(서브 쿼리)는 서브 쿼리의 결과가 "한 건이라도 존재하면" TRUE 없으면 FALSE를 리턴한다. EXISTS는 서브 쿼리에 일치하는 결과가 한 건이라도 있으면 쿼리를 더 이상 수행하지 않는다. 말로하는 설명이 좀 이해가 안가서 이해하기 쉽도록 그림으로 설명을 하면 아래 표가 있다. 그리고 아래 쿼리가 돌아가면 아래의 결과가 나온다. 서브쿼리 테이블에 존재하는 값들만 조인 조건을 기준으로 같은 값이 있는 경우의 값들만 보여준다. 그리고 select 1 의 의미는 select 을 빈 값으로 둘 수 없어서 기입을 해둔것이며 , 1이 출력되거나 하지는 않는다. 반대로 NOT EXISTS 의 경우는 차집합 개념으로 없는 데이터를 출력해준다. in 절과 비교 이렇게 되면 in절과 .. 2023. 2. 8.
NVL함수 NVL 함수 NVL 함수는 값이 NULL인 경우 지정값을 출력하고, NULL이 아니면 원래 값을 그대로 출력한다. 사용법은 NVL("값", "지정값") 이렇게 사용을 한다. 다음 그림처럼 되게 된다. 비슷한 함수로 nvl2 라는게 있다. NVL2 함수 NVL2 함수는 NULL이 아닌 경우 지정값1을 출력하고, NULL인 경우 지정값2를 출력한다. 사용법은 NVL2("값", "지정값1", "지정값2") // NVL2("값", "NOT NULL", "NULL") 2023. 1. 15.
[Oracle] case 문 프로그래밍언어에서도 switch case문이 있듯이. oracle 쿼리 내에서도 case 문을 지정할수 있다. 기본 문법은 다음과 같다. case when '조건1' then '결과1' when ' 조건2' then '결과2' ... else '나머지' end 이렇게 사용을 한다. 일단 select 문에도 지정을 할수가 있고, where 이하절에도 사용이 가능하다. 예제는 다음과 같다. where 절 -- *** 사용법 1 *** -- -- CASE 비교대상(값) -- WHEN 비교값1 THEN 처리1 -- WHEN 비교값2 THEN 처리2 -- ... -- ELSE 디폴트 처리 -- END SELECT * FROM tTblName WHERE YYMM = -- 검색할 컬럼명 CASE when '1' = .. 2023. 1. 12.
프로시져와 함수의 차이 데이터베이스에서 자주 접하는 프로시져와 함수가 있다. 이 둘의 차이와 정의를 알아볼 포스팅이다. 프로시져란? 넓은 의미로는 어떤 업무를 수행하기 위한 절차를 뜻한다. 예를들어 계좌 송금이라면 1. 상대방 계좌를 입력하고 2. 내 계좌에 금액이 충분한지 확인하고 3. 내 계좌에서 돈이 빠지고 4. 상대방 계좌로 돈이 입금 되는 이런 순서가 있다. 이처럼 프로세스를 절차적으로 기술이 된것을 프로시저라고 한다. 함수란? 프로시저의 각 프로세스를 수행하기 위해 필요한 기능들을 함수라고 한다. 예를들어 내 계좌에 금액이 충분한지 체크 등 이런 기능들이 함수가 된다. 문법의 차이는 다음과 같다. 프로시저 문법 CREATE OR REPLACE PROCEDURE 프로시저 이름 ( 매개변수명1 [ IN || OUT ||.. 2023. 1. 6.
트랜잭션 격리 수준(isolation level) 트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션 간 얼마나 서로 고립되어 있는지 즉, 특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것 격리수준은 아래의 4개로 나뉜다. READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 아래로 내려갈수록 트랜잭션간 고립 정도가 높아지며, 성능이 떨어지는 것이 일반적이다. 일반적인 온라인 서비스에서는 READ COMMITTED나 REPEATABLE READ 중 하나를 사용한다. (oracle = READ COMMITTED, mysql = REPEATABLE READ) READ UNCOMMITTED READ UNCOMMITTED.. 2022. 12. 31.
[Oracle] Decode 함수 Procedure 같은 곳을 보거나 일반적인 select 시에 if else나 case 함수를 사용해도 되지만 가볍게 분기를 하는 조건으로 oracle 에서 지원하는 함수인 Decode 함수가 있다. 사용법은 다음과 같다. select gender, decode(gender, "M", "남자", "W", "여자", "기타") from table; DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3.........., else) 이런식으로 조건, 결과 순서로 작성해주고 맨 앞은 컬럼명을 쓴다. 짝이 안맞게 맨 뒤에 하나의 파라미터가 더 있다면 해당 파라미터는 자동으로 else 에 대한 결과를 내뱉게 된다. 실전 테이블에서 활용 예제는 다음과 같다. 2022. 11. 18.
[Mysql] 스토리지 엔진 MYISAM / INNODB Mysql의 스토리지 엔진으로 가장 많이 사용하는 MyISAM, InnoDB을 비교해볼 것이다. MYISAM read only 기능에 특화된 엔진으로 select 가 많을 경우에 사용하곤 한다. 항상 테이블에 row count 를 갖고 있기에 가능하고, 풀텍스트 인덱스를 지원한다. 하지만 row level locking이 지원되질 않아 쿼리를 날릴 경우 해당 Table 전체 락이 걸린다. INNODB MYISAM 에서 안되는 row level locking이 가능하여 트랜잭션 처리가 필요한 대량 데이터에 유리하다. 또한 그럼으로써 select 보다는 CUD 의 쿼리에 좀더 장점이다. 역으로 MYISAM 과는 다르게 풀텍스트 인덱스가 지원이 안된다. 트랜잭션 처리가 필요없고 운영에 Read only 기능이.. 2022. 11. 5.
반응형