프로젝트/데이터베이스 13

프로그래머스 - 오랜 기간 보호한 동물(1)

내가 뽑아내야 하는 데이터는 다음과 같다. 들어온 동물의 데이터와 나간 동물의 데이터를 조인을 걸어야한다. 하지만 들어온 정보는 있지만 나간 정보는 없는 데이터를 골라야 함으로left join 을 걸어야한다. 그래서 left join 이후 검색 결과를 조회해보면 다음과 같다.  전체 조회를 하기위해 *을 사용했다. 이제 여기서 날짜순으로 오래된 id들 중 상위 3개를 뽑아내야 한다.    이렇게 사용하여 오래된 id들 중 상위 3개를 뽑아냈다.   정답!

MS-SQL에서 (NOLOCK) 이란?(트랜젝션 격리 수준)

기본설명 MS-SQL 을 보다 보면 테이블 명 뒤에 (NOLOCK)을 적어주는 경우를 확인할 수 있다. 해당 이유는 MS-SQL의 기본 격리수준이 Read Committed 이기 때문이다. 이 뜻은 한 A라는 테이블을 조회 할 경우 이 A 라는 테이블에 대해 'Insert', 'Update', 'delete' 등이 발생한 후 조회가 가능하다는 뜻이다. 이를 방지하기 위해 테이블 명 뒤에 NOLOCK을 적을 수 있는데 이를 사용하면 Read Uncommitted 와 같아진다. 이 뜻은 테이블이 작업 중(잠겨있음)이어도 기다리지 않고 조회(더티 리드) 하겠다는 뜻이다. 장점은 이를 통해 조회 성능이 올라가고, 데드락을 방지 할 수 있다. 단점은 커밋되지 않은(수정 전) 데이터를 읽기 때문에 트랜잭션이 롤백될..

[MS-SQL] "where 1 = 1 "을 왜 쓰는 걸까?

프로젝트 중 쿼리를 분석하다 보니 where 1 =1 이 맨 끝에 자주 붙어있는 것을 확인 할 수 있었다. 처음에는 뭔가 필요없는 코드인가 싶었는데 계속 보다보니 궁금증이 생겼다. 그래서 구글링해서 찾아보니 필요한 코드였다. 내가 참고한 블로그 주소이다. https://hyjykelly.tistory.com/5 [MSSQL] WHERE 1=1이 뭐야? 왜 쓰는 거야? 회사에 입사하고 쿼리를 사용하면서 종종 보지만, 잘 이해가 가지 않는 구문이 생겼어요. WHERE 1=1 바로 요놈! 오늘 공부해보도록 할게요. Chapter 1. WHERE 1=1이 뭐야?? 우선, WHERE는 조회하려는 데이터 hyjykelly.tistory.com 쉽게 말해서 쿼리만으로 조회하는 게 아니라 자바에서 조건을 걸어서 쿼리를..

트리거를 이용한 실습문제(1번)

트리거를 이용한 문제 EMP 테이블에 데이터가 입력되면 EMP_OLD 테이블이 있다면 이 테이블에 INSERT 없다면 EMP_OLD 테이블을 만들고 이 테이블에 INSERT 하는 행 레벨 트리거를 작성하시오. (입력되는 SAL 값이 3000보다 큰 경우에만 트리거가 동작하도록) CREATE OR REPLACE TRIGGER homework_trigger AFTER INSERT ON EMP FOR EACH ROW WHEN (new.sal > 3000) /*트리거 작동 조건*/ DECLARE is_tbl varchar2(20) := null; v_sql1 varchar2(500); v_sql2 varchar2(1000); v_sql3 varchar2(1000); BEGIN BEGIN SELECT table_..

[ORACLE] 트리거 사용 예시

트리거 기본 문법 CREATE [OR REPLACE] TRIGGER 트리거이름 [AFTER/BEFORE] [update or delete] ON 테이블 이름 [FOR EACH ROW] /*행 트리거 여부를 결정, DML의 영향을 받는 레코드마다 트리거 동작*/ [WHEN 조건] DECLARE 선언부 BEGIN 트리거 실행코드 EXCEPTION END; 이러한 문법을 가지고 있는 트리거. 아래 예시 코드로 어떻게 쓰이는 지 확인. 기본 트리거 예시코드 아래 코드는 주말 오전 10시에서 오후 6시 사이 EMP 테이블에 DML 사용 못하게 하는 트리거이다. CREATE OR REPLACE TRIGGER emp_dml_YHY BEFORE INSERT OR UPDATE OR DELETE ON emp BEGIN I..

[ORACLE] 프로시저 기본 사용 예시

프로시저 기본 문법 물류업무를 하다보니 데이터베이스 SQL 이 가장 중요하다는 것을 깨달았고, 다중 조인은 기본에 프로시저 트리거를 모르면 업무가 불가능하다는 것을 깨달았다. 그래서 내가 이해할겸 프로시저 문법을 정리한다. 스칼라 변수 선언 V_EMPNO NUMBER(4) := 100; V_ENAME VARCHAR2(20) := "lks"; 여기서 NUMBER(p, s ) 형식에 대해 추가 설명을 하겠다. p 는 최대 유효숫자 자릿수를 나타낸다. 유효숫자란 0이아닌 수가 몇개인지를 뜻한다. s 는 소수점 기준 자리수를 나타낸다. 예시로 123.74라는 숫자가 있다. 이 숫자에 대해 타입지정을 하나씩 해보겠다. NUMBER(3) 으로 하면 결과는 124가 찍힌다. 이유는 P는 3으로 명시했지만 S 는 명시..

[ORACLE] 오라클 데이터 복구 방법(TIMESTAMP)

오라클 작업중 실수로 데이터를 날렸을 때 방법이다. 오라클 9버전부터 FLASH BACK 이라는 기능이 추가 됬는데. 휴지통 개념이라고 생각하면 된다. 사용방법은 다음과 같다. SELECT * FROM test_table AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE) WHERE id = '1234'; 단위는 SECOND, MINUTE, HOUR, DAY 등이 있고 원하는 단위로 바꿔서 쓸 수 있다.

[ORACLE] 프로시저와 트리거 차이

프로시저 저장 프로시저는 미리 데이터베이스 서버에 SQL 명령을 두고 프로시저를 실행하여 SQL 명령을 실행할 수 있도록한다. 프로시저 안에는 제어 명령이나 반복문을 사용할 수 있기에 프로그램도 만들 수 있다. 트리거 트리거는 테이블에 작성한다. 어떤 테이블에 행을 삽입한다든지, 행을 변경, 삭제했을 때 트리거가 설정되어 있으면, 트리거의 SQL 문이 자동으로 실행. 프로시저 트리거 CREATE PROCEDURE 문법 CREATE TRIGGER 문법 생성시 소스코드 실행코드 생성 생성시 소스코드 실행코드 생성 EXECUTE 명령어로 실행 생성 후 자동실행 COMMIT, ROLLBACK 실행가능 COMMIT, ROLLBACK 실행 불가능

[ORACLE] 데이터베이스 문제 사이트 추천

데이터베이스 실력을 끌어올리기 위한 사이트 모음 https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all SQL Tryit Editor v1.6 WebSQL stores a Database locally, on the user's computer. Each user gets their own Database object. WebSQL is supported in Chrome, Safari, Opera, and Edge(79). If you use another browser you will still be able to use our Try SQL Editor, but a different ver www.w3schools.com 1. 이미 ..