프로그래밍 언어
[SQL] 피봇에 대해 알아보자 (PIVOT, UNPIVOT)
1. PIVOT (Oracle, SQL Server Only)피봇 연산자는 행으로 나열되어 있는 데이터를 열로 나열하여 보기 쉽게 가공하는 것이다. 시간순으로 차곡차곡 쌓이는 값이나 대규모 인원의 정보는 세로로 길어 한 눈에 알아보기 어렵다. 피봇은 세로행을 가로 열로 가독성을 향상한다.SELECT 필드목록 FROM 테이블PIVOT(집계함수 FOR 대상필드 IN (필드값 목록)) 별명 대상 필드의 값 목록을 새로운 열로 만들고 각 열에 대해 집계 함수를 호출하여 결과셋을 만든다./* Oracle */SELECT * FROM tSeasonPIVOT (MAX(sale) FOR season IN ('봄', '여름', '가을', '겨울')) pvt;/* SQL Server */SELECT * FROM tSeas..
MS SQL IDE (Server Management Studio) 설치 및 오류 해결
SQL Server 설치우선은 아래 사이트에 들어가 서버부터 다운로드 한다SQL Server Downloads | Microsoft Basic을 선택해준다 끝나면 아래 창이 뜰텐데 Close 누른다SQL IDE 설치Download SQL Server Management Studio (SSMS) - SQL Server Management Studio (SSMS) | Microsoft Learn오류 해결일단은 인스턴스가 잘 실행 되고있는지 확인한다 접속시도 해보지만 아래와 같이 오류가 뜬다 53은 이름이 달라서, 0은 신뢰된 SSL가 없기 때문 Server type Database Engine으로 설정해주고Server name은 현재 컴퓨터 이름으로 하면 된다 아래와 같이 뜨면 정상적으로 설치된거다
Visual Studio SQL 설치 및 사용 방법
데이터 스토리지 및 처리에서 SQL Server Data Tools을 설치한다 설치가 완료 됐으면 보기에서 개체 탐색기를 띄워준다 위 localdb 가 두개 뜰텐데 로컬 서버가 두개여서이다, 쿼리문을 작성하고 난 뒤 선택해주면 된다 MSSQLLocalDB로 선택했다.아래 쿼리문을 작성한 뒤 실행시키면 위에 봤듯이 dbo.Traffic이 생성된다create database dbTest;use dbTest;create table Traffic( number int not null, line varchar(5), hour int, car varchar(10), traffic int); select * from dbo.Traffic; 속성을 조회할려면 dbo.Traffic 두번 클릭해주면 아래와 같이 뜬다
[SQL] count 함수는 null을 포함할까?
count(컬럼명) null 값을 제외하고 countcount(*) null 값을 포함하여 count 빈 문자열은 모두 포함빈 문자열을 count에 포함하지 않으려면 빈 문자열을 null로 바꾼 후 count 실행 count(distinct(컬럼명)) null을 제외한 중복되지 않는 값만 count [SQL] sql에서 count()에 null.. : 네이버블로그 (naver.com)
[SQL] foreign key(외래키) 추가, 삭제, 확인 방법
추가alter table [추가할테이블명] add constraint [제약조건명] foreign key(컬럼명)references [부모테이블명] (PK컬럼명) [ON DELETE CASCADE / ON UPDATE CASECADE]; ON DELETE CASCADE외래 키에서 참조하는 키가 포함된 행을 삭제하려고 하면 해당 외래 키가 포함되어 있는 모든 행도 삭제 ON UPDATE CASCADE외래 키에서 참조하는 키 값이 포함된 행에서 키 값을 업데이트 하면 해당 외래 키를 구성하는 모든 값도 키에 지정된 새 값으로 업데이트 되도록 지정삭제alter table [테이블명] drop foreign key [제약조건명];확인테이블 기준 확인select * from information_schema.ta..
[SQL] 데이터 타입 CHAR, VARCHAR
MySQL 4.1 이후 버전부터는 CHAR(n), VARCHAR(n)에서 n은 바이트가 아니라 글자 수를 의미한다 또한 4글자 이하의 VARCHAR는 CHAR로 자동으로 변환된다. CHAR는 길이가 고정된 문자열 타입이다. 최대 길이 255지정된 크기만큼 데이터가 들어오지 않는 경우 남은 공간을 공백(trailing space)으로 채워 넣는다.예를 들어서 CHAR(5)로 정의된 컬럼에 'ab'라는 2자리 문자열을 넣게 되면 남은 3자리는 'ab ' 다음과 같이 공백으로 채워진다, 결국 데이터의 크기는 항상 처음 선언된 5 바이트가 소요되고 데이터의 낭비가 발생한다. VARCHAR는 가변의 문자열 타입이다. 최대 길이 65,535Variable Character Field라는 이름의 의미처럼 가변의..
[SQL] 인덱스 힌트 / 옵티마이저 힌트 사용 방법 (주석, 튜닝)
기본적으로 쿼리를 실행하면 DBMS 내의 옵티마이저가 여러개의 실행 계획을 만들고 그 안에서 제일 비용이 적게 소요되는 실행계획을 선택하여 실행이 되지만 옵티마이저를 믿지 못하거나 특정 방법으로 실행 계획을 하고 싶을 시에는 옵티마이저 힌트를 사용하면 된다. 기본적으로 사용법은 아래와 같다. OPTIMIZER_MODE 지정가능 값/* + ALL_ROWS */목적 : Best Throughput용도 : 전체 RESOURCE 소비를 최소화 시키기 위한 힌트. Cost-based 접근 방식으로 ALL_ROWS는 Full Table Scan을 선호하며 CBO (Cost Based Optimization)는 default로 ALL_ROWS를 선택한다. /*+ FIRST_ROWS */목적: Best Response..
[Python] 아스키 코드 (Ascii Code) 사용하기
파이썬에서는 ord()와 chr() 함수를 통해 문자를 아스키코드로, 아스키코드를 문자로 변환할 수 있다. print(ord("A"))print(ord("B"))print(ord("C"))# 65# 66# 67print(chr(65))print(chr(66))print(chr(67))# A# B# C 각 문자에 대한 아스키코드를 모두 외울 필요는 없지만, 알파벳의 아스키코드는 대문자가 소문자보다 더 작다는 것과 알파벳의 순서에 따라 아스키코드의 숫자가 1씩 증가한다는 특징 정도는 알아둘 필요가 있다.바로 이 특징을 이용하면 특정 알파벳에서 N번째 후의 알파벳을 구할 수 있다.# A에서 두 번째 후의 숫자print(chr(ord("A") + 2))# C 이번엔 Z에서 1번째 후의 알파벳을 구하고자 한다.Z..
[Python] 포메팅 format
'%'를 사용한 포멧팅변수 타입에 따라서 %s, %d, %f 구분해서 써줘야 함 기본적으로 %s는 문자열, %d는 정수, %f는 실수를 받아온다. 아래 예제에서 %f는 하나의 변수를 그대로 받아온 것이 아니라, one_length와 E의 곱의 결과를 받아왔다. 즉 포메팅을 하면서 연산의 결과를 받아올 수도 있다. 그리고 %f와 %.2f의 차이는 %.2f는 실수를 받아올 때 소수점 둘째 자리까지만 표현되도록 하라는 의미다 즉 %.3f라고 되어있으면 소수점 셋째자리까지 표현된다.something = '볼펜'EA = 2one_length = 5.343scale = 'cm'print('%s %d개의 길이는 %f%s 입니다.' % (something, EA, one_length*EA, scale))#실수 소수점 ..
[SQL] 정규화(Normalization)와 반정규화(De-Normalization)
정규화란?정규화는 데이터의 일관성, 최소한의 데이터 중복, 최소한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.정규화된 모델은 테이블이 분해된다. 테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 조인(join)을 수행하며 하나의 합집합으로 만들 수 있다.정규화를 하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.절차문제점정규화는 데이터 조회(select) 시에 조인(join)을 유발하기 때문에 CPU와 메모리를 많이 사용한다.아래 코드를 프로그램화 한다면 중첩된 루프(Nested Loop)를 사용해야 한다.[ANSI JOIN}select 사원번호, 부서코드, 부서명, 이름, 전화번호, 주소from 직원, 부서where 직원.부서코드 = 부서.부서코드;s..