1. 숫자 데이터 형식 BIT : 숫자 범위는 0또는 1, BOOLEAN형인 참과 거짓에 사용 INT : 정수형, 숫자 범위는 약 -21억 ~ +21억 SMALLINT : 정수형, 숫자범위는 -21,768 ~ 32,767 TINYINT : 양의 정수, 숫자범위는 0 ~ 255 BIGINT : 정수형, 숫자범위는 -2^63 ~ +2^63-1 2. 문자 데이터 형식 CHAR / NCHAR : 고정길이 문자형 VARCHAR : 가변 길이 문자형 NVARCHAR : 가변길이 문자형 ※대용량 데이터베이스를 사용하는 경우, 4글자 미만을 저장하게 될 시 CHAR / NCHAR형식으로 설정하는 것이 INSERT / UPDATE시 더 좋은 성능을 발휘한다. 3. 날짜와 시간 데이터 형식 DATETIME : “YYYY-..
뷰(VIEW) : 가상의 테이블 - 테이블과 동일하게 보이지만 실제 행 데이터를 가지고 있지 않음 - 테이블과 비슷한 역할을 하도록 SELECT 문을 이용하여 만드는 개체 - 개체가 생성되기 때문에 한번 생성하면 테이블이라고 생각하고 사용해도 될 정도로 (사용자 입장에서는 테이블과 뷰는 동일하게 취급된다.) - 뷰의 장점 1) 보안에 도움이 됨. 주민등록번호, 계정, 금융정보 2) 복잡한 쿼리를 단순화 시킬 수 있다. (WITH CTE와 유사) - 뷰의 단점 1) 일반 쿼리문보다 속도가 약간 느려질 수 있다.(과거) 2) 별도로 뷰를 관리해야 하므로 관리 차원에서 부담이 늘어난다. -- 뷰를 수정할 수 없는 경우 -- 집계 함수를 사용한 뷰 -- UNION ALL, CROSS JOIN 등을 사용한 뷰 -..
-- 테이블 정보 확인 EXEC SP_HELP userTbl; SELECT * FROM INFORMATION_SCHEMA. TABLES; SELECT * FROM SYSOBJECTS; -- 키 확인 SELECT * FROM INFORMATION_SCHEMA. TABLE_CONSTRAINTS; SELECT * FROM INFORMATION_SCHEMA. TABLE_CONSTRAINTS WHERE TABLE_NAME='userTbl'; -- sysobjects을 이용하여 제약조건, 테이블, 키 정보들을 알 수 있다. SELECT name, TYPE FROM SYSOBJECTS WHERE TYPE='D' -- 제약조건 SELECT name, TYPE FROM SYSOBJECTS WHERE TYPE='U' --..
--1. 대용량의 샘플 테이블 3개 생성(AdventureWorks에 약 12만건 data가 있는 테이블 복사) SELECT * INTO bigTbl1 FROM AdventureWorks.Sales.SalesOrderDetail; SELECT * INTO bigTbl2 FROM AdventureWorks.Sales.SalesOrderDetail; SELECT * INTO bigTbl3 FROM AdventureWorks.Sales.SalesOrderDetail; SELECT * FROM bigTbl1; SELECT * FROM bigTbl2; SELECT * FROM bigTbl3; --2. 성능 측정을 위해서 SSMS 도구 -> [SQL Server 프로파일러] 실행 -> 추적이름 '삭제비교' -> 템..
- CTE는 기존의 뷰, 파생 테이블, 임시 테이블 등으로 사용되던 것을 대신할 수 있으며, 더 간결한 식으로 보이는 장점이 있음. - CTE는 비재귀적(Non- Recursive) CTE와 재귀적(Recursive) CTE 두 가지 가 있다. * 비재귀적 CTE : 단순한 형태로 복잡한 쿼리 문장을 단순화 시키는 데 사용하기에 적합. --1) 비재귀적(Non-Recursive) CTE --A. 사용자 별 총 구매액 select userid '사용자', sum(price*amount) '총구매액' from buyTbl group by userid; --B. 사용자 별 총 구매액이 많은 사용자 순서로 정렬 출력 select userid '사용자', sum(price*amount) '총구매액' from bu..
#include #include #include int main(void) { int rotto[6] = { 0 }; int n = 0, check = 0; srand((unsigned)time(NULL)); printf("로또 번호 생성기\n"); printf("▶계속하려면 아무키나 입력하세요\n\n\n"); printf("────── [ 금주의 추천 번호 ] ──────\n"); for (int i = 0; i < 6; i++) { // 랜덤함수 발생 n = 1 + rand() % 45 + 1; for (int y = 0; y < i; y++) { // 배열 a의 y번째 인덱스의 값이 발생된 난수의 값과 같을 때 (즉 중복) if (rotto[y] == n) { i -= 1; // i의 값을 -1 해..