728x90

SQL Server 2014: 실습9 SELECT, FROM, WHERE, BETWEEN, AND, IN, LIKE, ANY, ALL 등

–앞으로 사용할 DB 생성–

 

sqlDB 데이터베이스 생성

 

–사용할 테이블 생성–

테이블 userTbl, buyTbl 작성

–데이터 입력–

데이터 입력.

userTbl 정보

buyTbl 정보

–DB 백업–

USE tempdb;
BACKUP DATABASE sqlDB TO DISK=’D:\DB_Backup\sqlDB2016.bak’ WITH INIT;

참고로 백업 및 복원은 https://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은 같은 의미.

 

 

참고 사이트

https://archmond.net/?p=7181

728x90

+ Recent posts