본문 바로가기
반응형

IT/Database112

[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.
[Mysql] select 랜덤값 출력 SQL을 할때 랜덤으로 데이터를 가져오고 싶을때 사용하는 ORDER BY RAND() SELECT * FROM table ORDER BY RAND(); 이런식으로 으로 간단하게 사용할 수 있으며, limit 10; 을 뒤에 붙임으로써 10개의 데이터 혹은 원하는 데이터 만큼의 레코드를 가져올수 있다. SELECT * FROM table ORDER BY name desc, RAND() LIMIT 1; 만약 위 쿼리처럼 다른 컬럼을 정렬 후에 사용하면 우선 name 컬럼으로 내림차순으로 정렬하고 같은 값이 있는경우에 다시 랜덤으로 섞어서 하나를 가져온다. 2022. 10. 17.
[Mysql] 실행한 query log 확인 및 추적 하는 법 mysql 에서 실행한 쿼리의 이력을 확인해야 할 경우가 있다. 그럴때 사용하는 명령어 이다. select * from INFORMATION_SCHEMA.PROCESSLIST order by id desc limit 100; 그리고 로그파일을 남기는 방법도 있다. 파일 위치 - /etc/my.cnf general_log=ON #쿼리 로그가 출력되도록 설정 general_log_file=/home/mysql_query_log/query.log #로그파일 경로 설정 이후 mysql 재기동 하면 설정이 된다. 2022. 10. 9.
[Mysql] 문자열 추출 및 인덱싱 이전에 다뤘던 포스팅은 문자열에 대한 자르기 추출(substring) 이었다면 이번 포스팅은 문자열의 위치를 나타내주는 함수이다. 추출 관해서는 아래 참고 포스팅을 참고 바란다. INSTR INSTR('문자열','추출문자') 해당 문자열의 index를 추출해준다. 사용법은 아래와 같다. select INSTR('가나다라마','다라마'); //3 LOCATE LOCATE('검색문자','문자열) 해당 문자열의 index를 추출해준다. 사용법은 아래와 같다. select LOCATE('CDE','ABCDE'); //3 참고 포스팅 https://thenicesj.tistory.com/342 [mysql] 문자열 추출 Mysql 에서도 프로그래밍 처럼 문자열을 자를수가 있다. substring substring.. 2022. 10. 6.
[Oracle] 옵티마이저 힌트 및 실행계획 옵티마이저는 쿼리문을 실행할 경우 다양한 실행 경로를 생성하고 비교하여 최적의 경로를 만들어준다. 자세한 내용은 아래 참고 포스팅을 참고하면 도움이 될것이다. 참고포스팅에서는 옵티마이저나 최적화에 대해서 알게 되는데 그럼 옵티마이저 힌트는 언제 어떻게 사용하는지에 대해서 알아볼 것이다. 옵티마이저 힌트는 우선 아래와 같은 방식으로 사용을 한다. select /*+ hint 기술 */ a, b, c from table; /*+ 과 */ 로 쌓여진 주석같은 구문 안에 작성을 한다. 사용하는 이유는 옵티마이저가 계획한 실행 경로가 상황에 따라 최적이 아닐 경우가 있다. 옵티마이저가 계산한 인덱스보다 효율적인 인덱스가 존재 스캔의 종류 변경(인덱스 / 풀 스캔) 옵티마이저가 계산한 조인보다 효율적인 조인이 존재.. 2022. 10. 1.
반응형