Programming/데이터베이스

    [MSSQL] sp_executesql을 활용한 동적쿼리 실행하기

    BEGIN DECLARE @result INT; DECLARE @num1 INT = 100; DECLARE @num2 INT = 200; DECLARE @sql_query NVARCHAR(MAX); DECLARE @param NVARCHAR(MAX); SET @sql_query = N'SELECT @temp_result = ' + convert(varchar, @num1) + ' + ' + convert(varchar, @num2); SET @param = N'@temp_result FLOAT OUTPUT'; EXEC sp_executesql @sql_query, @param, @temp_result = @result OUTPUT; END 주의할 점 1. sp_executesql은 VARCHAR가 아닌 ..

    [MySQL] 제약조건을 무시하고 FOREIGN KEY 삭제하기

    foreign key를 가진 테이블을 직접 쿼리로 삭제나 업데이트를 할 때 아래와 같은 에러가 발생한다. Cannot delete or update a parent row: a foreign key constraint fails 이는 사전에 foreign key에 얽힌 데이터들의 안전성을 보장하기 위한 일종의 안전장치이다. 하지만 다음과 같은 방법을 통해 강제로 테이블의 foreign key를 삭제하거나 업데이트할 수 있다. SET foreign_key_checks = 0; ALTER TABLE ... SET foreign_key_checks = 1; 0, 1을 스위칭해주면서 강제로 테이블을 삭제할 수 있다.

    [오라클 데이터베이스] 아우터 조인(OUTER JOIN)이란?

    [오라클 데이터베이스] 아우터 조인(OUTER JOIN)이란?

    이번 포스팅에서는 아우터 조인(OUTER JOIN)에 대해 알아보겠습니다. 아우터 조인은 이너 조인(INNER JOIN)의 반대로 조인 조건에 맞지 않는 데이터들도 표현하고자 할 때 사용합니다. 아우터 조인의 종류는 LEFT, RIGHT, FULL이 있습니다. 아우터 조인은 [LEFT/RIGHT/FULL] OUTER JOIN 문법으로 사용을 할 수 있고 OUTER를 생략하고 [LEFT/RIGHT/FULL] JOIN으로도 사용할 수 있습니다. 아우터 조인을 쉽게 하는 방법은 다음과 같습니다. 합치고자(조인을 하고자)하는 테이블 두 개를 선정하여 주인공, 나머지 관계를 파악해야 합니다. 보통 A테이블과 B테이블의 관계가 1:N이라고 가정 A테이블이 주인공(부모)이고 B테이블이 나머지(자식)입니다. 하지만, ..

    [오라클 데이터베이스] 이너 조인(INNER JOIN)이란? (ANSI)

    [오라클 데이터베이스] 이너 조인(INNER JOIN)이란? (ANSI)

    * 오라클 자체 조인문이 아닌 ANSI 쿼리문으로 진행했습니다. 조인은 두 개 이상의 테이블을 서로 묶어 하나의 결과 집합으로 만들어 내는 것을 의미한다. 조인의 종류에는 INNER JOIN, LEFT/RIGHT/FULL OUTER JOIN, SELF JOIN 등이 있는데 이번 포스팅에서는 INNER JOIN에 대해 알아보겠습니다. 아래와 같은 테이블 두 개가 있다고 가정하자. 왼쪽은 MEMBER 테이블이고 오른쪽은 NOTICE 테이블이다. NOTICE 테이블의 WRITER_ID 컬럼은 MEMBER 테이블의 ID 컬럼을 참조하고 있는 상태이다. MEMBER 테이블은 NOTICE 테이블을 만들어냈기 때문에 '부모 테이블'이라고 한다. MEMBER 테이블과 NOTICE 테이블을 시각적으로 합치기 위한 방법은..

    [오라클 데이터베이스] ROW_NUMBER()을 통해 ROWNUM을 추출해보자(Feat. 서브쿼리, 윈도우 함수, 순위 함수)

    [오라클 데이터베이스] ROW_NUMBER()을 통해 ROWNUM을 추출해보자(Feat. 서브쿼리, 윈도우 함수, 순위 함수)

    가끔씩 데이터베이스에서 ROWNUM이 필요할 때가 있다. ROWNUM 추출해는 방법은 크게 서브쿼리 방식과 ROW_NUMBER() 함수를 사용하는 방식으로 나뉜다. 다음과 같은 테이블(NOTICE)과 컬럼들(ID, TITLE, HIT)이 있다. 위의 테이블에서 ROWNUM을 뽑을 때, 추출하고자 하는 데이터를 정렬하지 않고 기본적으로만 뽑아내는 방법은 간단하다. SELECT ROWNUM, ID, TITLE, HIT FROM NOTICE; 그런데 HIT(조회수)이 낮은 순으로(오름차순) 정렬을 한 이후에 ROWNUM을 뽑아내려면? 서브쿼리 방식과 ROW_NUMBER() 함수를 모르는 사람들은 다음과 같이 생각할 수 있다. SELECT ROWNUM, ID, TITLE, HIT FROM NOTICE ORDER..

    [오라클 데이터베이스] - 트랜잭션 처리를 위한 COMMIT과 ROLLBACK

    [오라클 데이터베이스] - 트랜잭션 처리를 위한 COMMIT과 ROLLBACK

    https://www.youtube.com/user/newlec1의 내용을 정리해서 포스팅합니다. [ 트랜잭션이란? ] 트랜잭션(Transaction)은 하나의 작업을 수행하기 위해 필요한 데이터베이스의 연산들을 모아놓은 것으로 업무 실행단위, 논리 명령단위라고 할 수 있다. 트랜잭션에 대해 직관적으로 이해가 되지 않기 때문에 예시를 들어보자. 성호가 은경이한테 돈을 입금한다고 하자. 성호가 은경이한테 돈을 입금하는 순간 성호 계좌와 은경이의 계좌에서 UPDATE 구문이 정상적으로 실행이 되어야 한다. 만약 성호의 UPDATE문이 정상적으로 실행됐으나 은경이의 UPDATE문이 실행되지 않는다면, 성호가 5000원을 이체했으나 은경이가 이를 받지 못해 5000원이 사라지는 모순된 상황이 발생할 것이다. 위..

    [오라클 데이터베이스] NULL 관련 함수 (NVL/NVL2/NULLIF)와 DECODE 함수

    [오라클 데이터베이스] NULL 관련 함수 (NVL/NVL2/NULLIF)와 DECODE 함수

    https://www.youtube.com/user/newlec1의 내용을 정리해서 포스팅합니다. 데이터베이스를 이용할 때 NULL로 인해 애를 먹는 상황이 가끔 발생한다. 이를 해결하기 위해 NULL 관련 함수를 알아보고 DECODE 함수를 알아보자. [ NVL(입력값, 대체값) ] - 반환 값이 NULL일 경우에 대체 값을 제공하는 함수이다. * SELECT NVL(AGE, 0) FROM MEMBERS; 나이를 조회하는데 해당 컬럼의 값이 NULL이라면 0으로 출력한다. [ NVL2(입력값, NOTNULL 대체값, NULL 대체값) 함수 ] - NVL에서 조건을 하나 더 확장한 함수이다. - NULL일 경우 대체값도 넣을 수 있고 NULL이 아닐 경우 대체 값도 넣을 수 있다. * SELECT NVL..

    [오라클 데이터베이스] 형식 변환 함수 (TO_DATE/TO_CHAR/TO_NUMBER/TO_TIMESTAMP)

    [오라클 데이터베이스] 형식 변환 함수 (TO_DATE/TO_CHAR/TO_NUMBER/TO_TIMESTAMP)

    https://www.youtube.com/user/newlec1의 내용을 정리해서 포스팅합니다. 숫자 / 문자열 / 날짜를 자유자재로 바꾸는 형식 변환 함수에 대해 알아보도록 하겠습니다. [ TO_CHAR(NUMBER) ] - NUMBER 형식을 문자열(VARCHAR2)로 변환하는 함수이다. * SELECT TO_CHAR(12345678, '$99,999,999,999.99') FROM DUAL; 두 번째 인자는 첫 번째 인자의 숫자보다 같거나 길어야 한다. 만약 더 길다면 나머지 부분에 공백이 생긴다. * SELECT TO_CHAR(12345678.345, '$99,999,999,999.99') FROM DUAL; '$12,345,678.35' 출력한다. 지정한 소숫점 자리가 2이므로 반올림돼서 출력..

    [오라클 데이터베이스] 날짜 함수 (SYSDATE/CURRENT_DATE/SYSTIMESTAMP/CURRENT_TIMESTAMP/TIME_ZONE/NLS_DATE_FORMAT/EXTRACT/ADD_MONTHS/MONTHS_BETWEEN/NEXT_DAY/LAST_DAY/ROUND/TRUNC)

    [오라클 데이터베이스] 날짜 함수 (SYSDATE/CURRENT_DATE/SYSTIMESTAMP/CURRENT_TIMESTAMP/TIME_ZONE/NLS_DATE_FORMAT/EXTRACT/ADD_MONTHS/MONTHS_BETWEEN/NEXT_DAY/LAST_DAY/ROUND/TRUNC)

    https://www.youtube.com/user/newlec1의 내용을 정리해서 포스팅합니다. [ SYSDATE / CURRENT_DATE / SYSTIMESTAMP / CURRENT_TIMESTAMP ] SYS의 의미는 현재 오라클 서버가 설치되어 있는 곳의 시간을 의미한다. CURRENT는 세션에 대한 사용자를 기반으로 해서 세션에 설정된 시간대에 따른 날짜를 얻어다주는 함수를 의미한다. SYS와 CURRENT 모두 파라미터를 사용하지 않는다. 괄호가 없을 뿐 함수이다. * SELECT SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP FROM DUAL; SYSDATE은 오라클 서버의 시간대를 얻고 싶을 때 사용 날짜에 대한 시, 분, 초까지 얻을 ..

    [오라클 데이터베이스] 숫자 내장 함수 (ABS/SIGN/ROUND/TRUNC/MOD)

    [오라클 데이터베이스] 숫자 내장 함수 (ABS/SIGN/ROUND/TRUNC/MOD)

    https://www.youtube.com/user/newlec1의 내용을 정리해서 포스팅합니다. [ ABS(n) ] - 절대값을 구하는 함수이다. * SELECT ABS(35), ABS(-35) FROM DUAL; 35가 두 개 출력된다. [ SIGN(n) ] - 양수/음수를 알려주는 함수이다. - 양수이면 1, 음수이면 -1, 0이면 0을 출력한다. * SELECT SIGN(35), SIGN(-35), SIGN(0) FROM DUAL; 1, -1, 0이 차례대로 출력된다. [ ROUND(n, i) ] - 숫자의 반올림 값을 알려주는 함수이다. - 두 번째 인자를 지정하지 않으면 소수 첫 째 자리에서 반올림을 한다. - 두 번째 인자를 지정하면 설정한 인자 값이 반올림이 된다. * SELECT ROUN..