프로그래밍 10

[MSSQL] PIVOT, UNPIVOT (행렬 변환)

PIVOT 행렬 변환 SELECT 컬럼명 FROM 테이블명 PIVOT([집계함수]([집계컬럼명]) FOR [대상컬럼명] IN ([컬럼이될값])) AS 피벗테이블명 집계 함수 : SUM(합계), AVG(평균), COUNT(개수), MAX/MIN(최대/최소) 예제 PIVOT을 적용하여 행렬을 변환해보자 WITH TABLE_A (학년, 반, 점수) AS ( SELECT '1학년', '1반', 100 UNION ALL SELECT '1학년', '2반', 30 UNION ALL SELECT '2학년', '1반', 80 UNION ALL SELECT '2학년', '2반', 90 ) SELECT * FROM TABLE_A 원본 데이터 원본 데이터가 보기 불편하니, 아래와 같이 눈에 쉽게 들어오도록 행렬을 변환하고 싶..

프로그래밍/SQL 2021.07.01

[MS-SQL] CPU 사용율과 메모리 사용율 관련

[MSSQL] CPU 사용율과 메모리 사용율 관련 인계받은 내용을 토대로 회사 소프트웨어 및 서버 등등에 대해 공부하며 모니터링하다가Database 서버가 언젠가부터 CPU 혹은 메모리 과부화가 발생하기 시작했다.. 원인 발생 여부를 파악하기 위해 여러 검색을 통해 알아봤으나분석 후 알아낸점은... 동시다발적으로 여러 트랜잭션 및 클라이언트의 쿼리 처리 등등으로 인한복합적인 문제로 낙인...ㅠㅠ.... 결국 프로그램에서 처리해주지 않으면 안될것 같아, 개발이슈로 띄우고개발하기로 했으나.. 알아보던 과정이 너무 여기저기 널린 얘기들과 정확히 이렇다 하는 내용이 없었다..정리해두기로.. 캬.. 답이없다 답이 없어.입사 2주만에 이런 화면을 보게될 줄이야. 어딜가든 일복하나는 인정하기로 했다... Databa..

프로그래밍/SQL 2018.12.10

varchar nvarchar차이

varchar 는 비유니코드 지원 가변문자열nvarchar는 유니코드 지원 가변문자열이다. varchar는 비유니코드 지원이므로 영어, 숫자는 1byte, 그외 2byte로 저장하고nvarchar는 유니코드지원이므로 모든문자를 일괄 2byte로 저장한다. 이것의 차이는 varchar는 length를 byte기준으로 잡고 nvarchar는 문자열길이로 잡는다 예시로 varchar(3)은 3byte라 '테스트'라는 문자열이 있을 시 6byte므로 '테'만 입력되게 되고nvarchar(3)은 문자열로 계산하여 '테스트' 문자열이 정상적으로 모두 입력된다.

프로그래밍/SQL 2018.04.18

(oracle) exists와 in의 차이

일반적으로 EXISTS절이 더 우수한 성능을 보인다.IN절과 EXISTS절은 동일한 액션을 취하는 것 같지만 세세하게 따지면 다르다.EXISTS는 해당 DATA를 갖고 있는 ROW가 존재하는지만 체크하고 끝나나IN은 실제 존재하는 데이터의 값을 모두 체크한다. JOIN되는 COLUMN에 NULL을 갖는 ROW가 존재할 시에NOT EXISTS 는 TRUE, NOT IN은 FALSE를 출력한다NOT IN을 사용하면 조건에 맞는 데이터가 있어도 NULL이 있으면 NOT ROWS SELECTED가 나오게 되므로NVL을 통한 NULL처리가 필요하다. EXISTS절의 기본 형식을 아래를 따른다. SELECT COLUMNS FROM TABLES WHERE EXISTS( CHECK값 );

프로그래밍/SQL 2014.12.09

트리거

트리거란? INSERT, UPDATE, DELETE문이 TABLE에 대해 행해질 때 묵시적으로 수행되는 PROCEDURE 이다. 트리거는 TABLE과는 별도로 DATABASE에 저장 된다. 트리거는 VIEW에 대해서가 아니라 TABLE에 관해서만 정의 될 수 있다. 행 트리거 : 컬럼의 각각의 행의 데이터 행 변화가 생길때마다 실행되며, 그 데이터 행의 실제값을 제어할 수 있다. 문장 트리거 : 트리거 사건에 의해 단 한번 실행되며, 컬럼의 각 데이터 행을 제어 할 수 없다.트리거 문법- BEFORE : INSERT, UPDATE, DELETE문이 실행되기 전에 트리거가 실행 된다.- AFTER : INSERT, UPDATE, DELETE문이 실행된 후 트리거가 실행 된다.- trigger_event :..

프로그래밍/SQL 2012.11.06

프로시저(Procedure)

프로시저(Procedure)란? 특정 작업을 수행 하는, 이름이 있는 PL/SQL BLOCK 이다. 매개 변수를 받을 수 있고, 반복적으로 사용 할 수 있는 BLOCK 이다. 보통 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL BLOCK을 데이터베이스에 저장하기 위해 생성 한다.프로시저 문법 CREATE OR REPLACE procedure name IN argument OUT argument IN OUT argument IS [변수의 선언] BEGIN --> 필수 [PL/SQL Block] -- SQL문장, PL/SQL제어 문장 [EXCEPTION] --> 선택 -- error가 발생할 때 수행하는 문장 END; --> 필수 - CREATE OR REPLACE 구문을 사용하여 생성 한다..

프로그래밍/SQL 2012.11.06

Oracle View 테이블

뷰란?- 뷰는 하나의 가상 테이블이라 생각 하면 된다.- 뷰는 실제 데이터가 저장 되는 것은 아니지만 뷰를 통해 데이터를 관리 할수 있다.- 뷰는 복잡한 Query를 통해 얻을 수 있는 결과를 간단한 Query로 얻을 수 있게 한다.- 한 개의 뷰로 여러 테이블에 대한 데이터를 검색 할 수 있다.- 특정 평가 기준에 따른 사용자 별로 다른 데이터를 액세스할 수 있도록 한다.뷰의 제한 조건.- 테이블에 NOT NULL로 만든 컬럼들이 뷰에 다 포함이 되 있어야 한다.- ROWID, ROWNUM, NEXTVAL, CURRVAL등과 같은 가상컬럼에 대한 참조를 포함하고 있는 뷰에는 어떤 데이터도 INSERT 할 수 없다- WITH READ ONLY 옵션을 설정한 뷰도 데이터를 갱신 할 수 없다.- WITH C..

프로그래밍/SQL 2012.11.01

Oracle Sequence

Sequence란 유일한 값을 순차적이면서 연속적으로 만들어주기 위해서 사용되는 객체 Sequence기능? 1.자동적으로 유일번호 생성2.공유가능하고 독립된 객체(여러 table에 사용 가능)3.주로 기본키값을 생성하기 위해 사용4.메모리에 캐쉬되면 시퀀스 값을 액세스하는 효율성을 향상시킴장점:메모리에서 시퀀스 값을 캐쉬하면 이값에 대해 더 빠른 액세스를 할수 있습니다.단점:시퀀스 값들이 순차적으로 안들어간다. 예를들어 1,2,3,5,7과 값이 gap(간격)이 생긴다 시퀀스에 gap이 생기는경우 rollback발생system실패시퀀스가 다른 테이블에서 사용될때 다른 DBMS와의 차이 mysql(auto_increment)에서나 mssql(identity)에서는 해당 int형 컬럼에 순차적으로 자동으로 값..

프로그래밍/SQL 2012.11.01

오라클 고급쿼리 - 계층적 쿼리 ( connect by )

Connect by 계층적 쿼리는 오라클만이 가진 기능 중 하나로, 데이터를 선택하여 계층적인 순서 그대로 리턴하는데 사용된다.예를 들면, 아래와 같이 직원 테이블이 있다고 생각 하자. 직원 직속상사 직급--------------------철수 순희 대리순희 영희 과장길동 순희 대리영희 개똥 부장개똥 사장 기본적인 SQl을 사용하여 계층 관계를 표현하는것은 불가능하다. 하지만 재귀 PL/SQL 루틴과 connectby 를 사용한다면 표현이 가능하다.재귀 PL/SQL은개발과 처리 과정에서 다소 많은 시간이 필요로 한다는 단점이 있으며, 변경사항이 있을 때 다른 저장 프로시저를 만들거나 보다 복잡하게 변경해야한다는 점도 무시 할수 없다.이에 오라클에서는 connect by라는 확장된 select 구문을 지원..

프로그래밍/SQL 2012.10.31