Window 함수란 무엇인가? 기존 관계형 데이터베이스는 칼럼과 칼럼간의 연산, 비교, 연결이나 집합에 대한 집계는 쉬운 반면, 행과 행간의 관계를 정의하거나, 행과 행간을 비교, 연산하는 것을 하나의 SQL문으로 처리하는 것은 매우 어려운 일이었다. 하지만, 윈도우 함수를 이용한다면 행과 행사이의 관계를 쉽게 정의할 수 있다. "윈도우 함수"(window function)란, 함수가 기반으로 하는 쿼리로부터 나오는 행들의 서브 집합을 대상으로 각 행별로 계산을 해서 스칼라 값을 출력하는 함수를 말한다. 행들의 서브집합을 윈도우 라고 하며, 현재 행과 관련된 윈도우 설정을 기반으로 한다. 윈도우 함수 문법에는 OVER라는 절이 포함된다. 간단히 말해서 집합을 대상으로 계산한 다음 단일 값을 출력하는 것이..
포인터 변수는 * (aesterisk) 를 사용하여 선언한다. #include using namespace std; int main() { int *ptr;//포인터 변수 선언 int num = 20;// int형 변수를 선언하고 20을 저장 ptr = #//num의 메모리 주소를 포인터 변수에 저장 printf("%p\n",ptr);//포인터 변수 ptr 의 값이 출력 => num 의 주소맨 앞자리 출력 printf("%p\n",&num);//num 변수의 주소를 출력 위의 값과 동일 printf("%p\n",&ptr);//포인터의 주소를 출력 &ptr != ptr printf("%d\n",*ptr);//ptr 주소를 찾아가서 해당 주소내에 저장되어 있는 값을 출력 즉 num 의 값. } 포인터..
자바에서 일반적인 데이터의 비교는 == 연산자를 사용한다. 그리고 String 문자열의 값을 비교할때에는 equals() 라는 메소드를 사용하여 비교한다. "equals" 와 "==" 는 어떠한 차이가 있을까? equals 는 데이터 값을 비교해주고, == 는 주소값을 비교해주는 연산자이다. 단순하게 말하면 "==" 연산자는 int, boolean 과 같은 primitive type에 대해서 비교해준다. String 과 같은 reference type 에 대해서는 주소값을 비교한다. String과 같은 reference type 을 생성할 때에는 두가지 방법이 존재한다. 1. 리터럴을 이용한 생성 방식 2. new 연산자를 이용한 생성 방식 리터럴을 사용하게 되면 해당 데이터가 Heap 내부에 있는 st..
MSSQL 도 다른 RDBMS와 마찬가지로 테이블이나 프로시저와 같은 개체들을 CREATE(생성) , ALTER(수정), DROP(삭제) 할 수 있다. 1. CREATE -- 테이블 의 경우 -- 형식 CREATE TABLE (소유자).테이블명 ( 컬럼명 타입(크기) identity(시작시퀀스,증가시퀀스) -- 자동시퀀스 지정 ,컬럼명 타입(크기) null허용유무 ,컬럼명 타입 DEFAULT(값) -- 초기값 지정 ) ALTER TALBE (소유자).테이블명 PK명 PRIMARY KEY (PK로 지정할 열 이름) -- PK 값 지정 --EX) CREATE TABLE dbo.TESTTBL ( seq bigint identity(1,1) -- 자동증가 시퀀스 열 ,name nvarchar(5) not nul..
데이터베이스 내의 각 오브젝트에 액세스 하는 방법과 순서는 쿼리 옵티마이저가 결정한다. 옵티마이저에 따라서 가장 효율적으로 데이터에 액세스 하기 위한 수단을 결정하고, 그 결정에 기초한 순서대로 데이터를 취득한다. 쿼리 옵티마이저의 동작 자체도 매우 흥미롭지만, 여기서는 우선 쿼리 옵티마이저가 데이터에 액세스 하는 수단을 결정한 후에 어떤 알고리즘으로 실제의 데이터를 취득하는지 소개한다. 인덱스가 사용되는 경우 각 인덱스 페이지는 동일 계층의 앞 페이지와 다음 페이지의 포인터를 각각 갖고 있다. 또한 인덱스의 각 계층도 링크 리스트로 링크되어 있다. 목적하는 데이터를 취득하기 위해 인덱스를 스캔해야 하는 경우 매우 심플한 알고리즘으로 데이터를 취득할 수 있다. 인덱스 페이지 계층의 상위에서 하위로 링크 ..
1.페이지와 익스텐트 데이터베이스를 구성하는 데이터 파일은 내부적으로 페이지라고 하는 8KB의 논리 단위로 구분되어 사용된다. 페이지는 테이블 등의 오브젝트에 저장된 데이터를 읽고 쓸 때의 최소 I/O 단위다. 그러나 오브젝트에 새로운 영역을 할당해야 하는 경우에는 페이지가 아니라 익스텐트라는 단위가 사용된다. 익스텐트는 8KB 페이지가 8개로 구성되어 있다. 테이블에 할당된 모든 페이지에 빈 용량이 없어지면 테이블에는 새로운 익스텐트가 할당된다. 2.단일 익스텐트와 혼합 익스텐트 익스텐트의 종류는 하나의 오브젝트에 8페이지 모두를 점유하는 단일 익스텐트와 복수의 오브젝트를 공유하는 혼합 익스텐트가 존재한다. SQL 서버는 2014까지 디폴트 동작으로 오브젝트의 초기 구성에 혼합 익스텐트를 할당했다. 디..
https://www.acmicpc.net/problem/18223 18223번: 민준이와 마산 그리고 건우 입력의 첫 번째 줄에 정점의 개수 V와 간선의 개수 E, 그리고 건우가 위치한 정점 P가 주어진다. (2 ≤ V ≤ 5,000, 1 ≤ E ≤ 10,000, 1 ≤ P ≤ V) 두 번째 줄부터 E개의 줄에 걸쳐 각 간선의 정보 www.acmicpc.net 해당 문제는 다익스트라 알고리즘을 사용하여 해결하는 문제이다. 일단 문제는 아래와 같이 두 분류로 나눌 수 있다. 1. 첫째 노드로 시작해서 V번째 노드로 끝나는 최단거리 D1 2. 첫째노드로 시작해서 P 노드를 지나서 V 번째 노드에 도착하는 최단거리 D2 그런데 여기서 D2 의 경로는 두개의 경로로 나눌 수 있다. D2_1 = 첫째노드로 시작..
1. 외부 조인(Outer Join)의 기본개념 외부 조인은 ANSI SQL-92에서 소개되었으며, 내부 조인이나 크로스 조인과는 달리 단 하나의 표준 문법만을 가지고 있다. 즉 테이블들 간에 JOIN 키워드를 사용하는 방식으로, 조인 조건이 ON절에 지정되는 방식이다. 외부 조인은 내부 조인에서 처리되는 두 개의 논리적 프로세싱 단계(카티전 곱과 ON 필터) 외에도 외부 조인에서만 존재하는 세 번째 단계인 외부 행을 추가하는 단계를 수행하게 된다. 외부 조인에서는 테이블 이름 사이에 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN 키워드를 사용해서 테이블들 중 하나를 "보존되는" 테이블로 지정해야 한다. OUTER 키워드는 선택적으로 사용 가능하다. LEFT ..
오늘은 네이버나 카카오등 여러 서비스에서 지원하는 QR 코드 로그인을 따라해(?) 볼것이다. 일단 해당 내용은 토이프로젝트성으로 진행된 것이다. QR 로그인 기능을 구현하기 위해서 일단 SPRING TOOL 을 사용할 것이며, DB 는 내가 자주 쓰는 SQL SERVER 를 채택하였다. 위의 그림처럼 현재 모바일 환경이 아닌 데스크탑 pc 에서 QR 코드인증을 통하여 로그인을 구현해볼 것이다. QR 코드 인증을 위해서는 위와 같이 해당 사이트에서 인가가 된 모바일 기기가 필요하다. pom.xml 에서는 아래 두개는 필수적으로 추가해줘야 QR 로그인을 따라할 수 있다. 일단 기본적으로 토이성 프로젝트인만큼 로그인 기능등 여러가지 기능이 구현되어 있다는 걸 가정한다. 일단 해당 QR 코드 로그인을 사용하기 ..
1. 내부조인 (Inner Join) 내부조인은 두 개의 논리적 쿼리 프로세싱 단계를 수행한다. 우선, 두 입력 테이블간에 카티션 곱을 적용한 후, 지정한 술어에 따라 행들을 필터링 한다. 크로스 조인과 같이 내부 조인 역시 ANSI SQL-92 및 ANSI SQL-89 두개의 표준 문법 형태로 사용할 수 있다. 예시를 위해 아래와 같은 테이블을 생성하여 연습해보자. -- 회원 테이블 CREATE TABLE dbo.TB_CUST( cust_no INT NOT NULL, --회원번호 cust_name NVARCHAR(100) NOT NULL --회원이름 CONSTRAINT PK_TB_CUST PRIMARY KEY(cust_no) ); INSERT INTO TB_CUST(cust_no, cust_name) ..