뇌를 자극하는 SQL Server 2012 기본편 201페이지
–앞으로 사용할 DB 생성–
sqlDB 데이터베이스 생성
–사용할 테이블 생성–
테이블 userTbl, buyTbl 작성
–데이터 입력–
데이터 입력.
userTbl 정보
buyTbl 정보
–DB 백업–
USE tempdb;
BACKUP DATABASE sqlDB TO DISK=’D:\DB_Backup\sqlDB2016.bak’ WITH INIT;
참고로 백업 및 복원은 http://archmond.net/?p=7083 에서 알아봤음.
–기본 WHERE 절–
WHERE절은 조회 시 조건을 줄 수 있다.
USE sqlDB;
SELECT * FROM userTbl WHERE name=’김경호’;
김경호 사용자만 추출
SELECT * FROM userTbl WHERE birthYear >= 1970 AND height >= 182;
1970년 이후 출생, 182cm 이상인 사람
SELECT userID, name FROM userTbl WHERE birthYear >= 1970 OR height >= 182;
1970년 이후 출생 or(또는) 182cm 이상인 사람은 7명
–BETWEEN, AND 사용–
SELECT userID, name FROM userTbl WHERE height >= 180 AND height <= 183;
키가 180에서 183cm인 사람 찾기
SELECT userID, name FROM userTbl WHERE height BETWEEN 180 AND 183;
동일한 값을 찾기 위해 BETWEEN A AND B를 사용함.
–IN 사용–
SELECT userID, name FROM userTbl WHERE addr=’경남’ OR addr=’전남’ OR addr=’경북’;
지역이 경남, 전남, 경북인 사람 찾기
–LIKE–
SELECT name, height FROM userTbl WHERE name LIKE ‘김%’;
성이 김씨인 사람 찾기
SELECT name, height FROM userTbl WHERE name LIKE ‘_종신’;
앞 한 글자 + 종신 이라는 이름을 가진 사람 찾기. %는 무엇이든. _는 한 글자. 도서에 의하면 검색 문자열의 앞에 _나 %가 들어가면 SQL Server 성능에 나쁜 영향을 끼칠 수 있다고 함.(name 열의 인덱스가 있어도 전체 데이터를 검색한다고 함)
–서브쿼리(SubQuery, 하위쿼리)–
쿼리문 속에 또다시 쿼리문이 있는 서브쿼리.
먼저 김경호의 키는 177이다.
SELECT name, height FROM userTbl WHERE height > (SELECT height FROM userTbl WHERE name=’김경호’);
김경호보다 키가 큰 사람 출력.
김경호가 177cm이므로 방금 전 쿼리와 동일한 결과가 나옴.
–ANY구문–
SELECT name, height FROM userTbl WHERE height >= (SELECT height FROM userTbl WHERE addr=’경남’);
지역이 경남인 사람보다 키가 크거나 같은 사람을 찾기. 오류가 난다. 하위 쿼리가 값을 둘 이상 반환했다고 알려줌.
서브쿼리가 173, 170 이렇게 두 개의 값을 반환하기 때문.
SELECT name, height FROM userTbl WHERE height >= ANY (SELECT height FROM userTbl WHERE addr=’경남’);
>= 연산자 뒤에 ANY를 넣는 것으로 170, 173cm보다 큰…(결국 170보다 큰) 사람을 반환함
–ALL구문–
이번엔 ALL을 써보자. 7명만 출력됨. 170보다 크거나 같을 뿐 아니라, 173보다도 크거나 같아야 한다 -> 결국 173보다 크거나 같은 사람만 반환.
–ANY 구문–
SELECT name, height FROM userTbl WHERE height = ANY (SELECT height FROM userTbl WHERE addr=’경남’);
170이거나 173cm인 사람을 출력.
–IN 구문–
SELECT name, height FROM userTbl WHERE height IN (SELECT height FROM userTbl WHERE addr=’경남’);
=ANY와 IN은 같은 의미.