SQL WHERE Clause
WHERE Clause(절)은 특정한 기준에 맞는 레코드들만 출력할 때 사용한다.
SELECT 문을 사용해서 출력을하는데, 특정 조건에 맞는 칼럼만 출력하겠다는 의미이다.
SQL WHERE Syntax
WHERE 문의 문법은 다음과 같다.
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
SELECT문을 사용할때와 비슷하지만 끝에 WHERE절이 붙는다.
특정 테이블에서 column_name을 선택할 것인데, operator value에 해당하는 column_name 만을 출력한다는 뜻이다.
SQL WHERE 예문
이전에 사용한 쇼핑몰 데이터베이스의 Customers 테이블이다.
자, 나는 여기에서 나라가 멕시코인 사람의 이름을 알고싶다. 라고 했을때는 어떻게 해야할까?
SELECT CustomerName FROM Customers WHERE Country = 'Mexico';
라고 하면된다.
결과를 보면
국적이 Mexico인 사람 5명의 이름이 추출되었다.
국적이 멕시코인 사람이 5명이기 때문에 레코드의 수는 5개이다.
이 사람들의 모든정보(칼럼)을 알고싶다면 어떻게 해야할까?
이전 SELECT 포스팅을 잘 본 사람이라면 어렵지않게 알 수 있을것이다.
답은 SELECT * FROM Customers WHERE Country = 'Mexico'; 이다.
역시 레코드는 5이지만 이번엔 모든 칼럼의 내용들이 출력된 것을 볼 수 있다.
그럼 이번에는 Customers 테이블에서 CustomerID가 1인 사람의 CustomerName을 찾아보자.
쉽게 생각해보면
SELECT CustomerName FROM Customers WHERE CustomerID = '1'; 이라고 생각할 것이다.
하지만 위처럼 입력하면 나오지 않는다.
이렇듯 에러가 난다.
정확한 답은
SELECT CustomerName FROM Customers WHERE CustomerID = 1;
이다.
정확히 CustomerID가 1인 사람의 CustomerName을 출력한 것을 볼 수 있다.
SQL은 text로 된 values(값)에는 작은 따옴표(')를 요구한다.(대부분의 DB시스템에서는 큰따옴표도 제공한다.)
하지만 숫자로 되있을 경우에는 따옴표를 쓰면 안된다.
Operators in the WHERE Clause
WHERE절에서 사용하는 연산자는
Operator |
Description |
A=B |
A는 B와 같다. |
A<>B |
A는 B와 다르다. ( 어떤 버전에서는 !=라고도 쓰인다.) |
A>B |
A가 B보다 크다. |
A<B |
A가 B보다 작다. |
A>=B |
A가 B보다 크거나 같다. |
A<=B |
A가 B보다 작거나 같다. |
BETWEEN A AND B |
A와 B의 사이에 해당하는 값 |
LIKE A |
값의 일부분이 A인 값 (M으로시작하는 2글자 : M%) |
IN A,B |
값 중 A와 B인것 (나라가 MEXICO 또는 KOREA : IN (MEXICO,KOREA) 반대는 NOT IN |
등등이 있다.
AND & OR Operator
AND와 OR 연산자는 하나 이상의 조건으로 레코드를 필터링 하기 위해 사용한다.
위에서 나온 =, ><, LIKE 등등의 연산자는 하나의 조건을 사용하는데 이용하는 것이라면
AND와 OR는 2개 이상의 복합적인 조건을 넣을 때 사용하는 것이다.
AND 연산자는 첫번째 조건과 두번째 조건이 모두 참인 값만 출력하는것이고
OR 연산자는 첫번째 조건과 두번째 조건 중 하나만 참이어도 출력하는것이다.
AND & OR Operator 예문
Customers 테이블에서, 국가가 Germany이고 도시가 Berlin인 사람의 Record값을 출력하게 하는 방법은
SELECT * FROM Customers WHERE Country = 'Germany' AND City = 'Berlin'; 이라고 하면 된다.
Germany의 Berlin에 사는 고객 1명이 출력된 것을 볼 수 있다.
다음으로, 국가가 Germany이거나, Mexico인 사람의 Record를 검색해보자.
두개의 조건중 하나만 일치하면 되는것이므로 OR 연산자를 사용해야한다.
쿼리문은 SELECT * FROM Customers WHERE Country = 'Germany' OR Country = 'Mexico'; 이다.
결과를 보면 Country 칼럼에서 값이 Germany이거나 Mexico 인 Record가 출력되는 것을 볼 수 있다.
여기서 주의할 점이 있다.
만약
SELECT * FROM Customers WHERE Country = 'Germany' OR 'Mexico';
이렇게 입력한다면 어떻게 될까?
이렇게 해도 Country가 'Germany'이거나 'Mexico'인 Record만 출력이 될까??
공부를 하던 중 궁금해져서 테스트 해본 결과는 다음과 같다.
모든 레코드가 나온 것을 볼 수 있다.
그 이유는 다음과 같다.
WHERE절을 보면 조건이 OR를 기준으로 2개가 있다.
WHERE Country = 'Germany' OR 'Mexico';
하나는 Country = 'Germany', 또 하나는 'Mexico'
왼쪽의 조건은 Country가 Germany인 것만 참이 되지만
오른쪽의 조건은 Mexico의 비교대상이 없기 때문에 무조건 참이 되버린다.
(SQL 서버는 0 또는 값이 없음을 False(거짓)으로 보고 1이나 값이 조금이라도 있으면 True로 본다.)
따라서 조건문을 해석해보면
나라가 독일 이거나(OR) 참인 Record만 출력을 하게 되는것이다.
뒤의 조건은 모든 레코드를 뜻하게 되고 그래서 모든 레코드가 출력이 되는것이다.
AND와 OR 연산자를 괄호를 사용하여 혼합 사용도 가능하다.
예를들어 Customers 테이블에서 Country가 Germany이고, City가 Berlin이거나 Mannheim인 Record 전체를 출력하고싶다면
SELECT * FROM Customers WHERE Country = 'Germany' AND (City = 'Berlin' OR 'Mannheim);이라고 하면된다.
결과는 위와 같다.
연산자가 여러개 쓰이므로 괄호를 통해서 연산자 우선순위를 잘 지정해야하는 것을 잊으면 안된다.
괄호 하나를 잘못써서 출력 값이 전혀 달라질수도 있기 때문이다.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
본 게시물은 공부한 내용을 바탕으로 작성한 글로써, 점차 수정 및 추가를 통해 내용을 발전시킬 계획입니다.
따라서 오타 및 내용상의 오류, 추가할 내용 등이 있을 경우 주저 없이 알려주시면 감사하겠습니다.
궁금한점을 물어보시면 제가 아는 선에서 최대한으로 알려드리겠습니다.
참고한 사이트
'Database.' 카테고리의 다른 글
SQL Syntax(SQL 문법) - ORDER BY (0) | 2016.09.22 |
---|---|
SQL Syntax(SQL 문법) - SELECT(DISTINCT) (0) | 2016.09.06 |
SQL Syntax(SQL 문법) intro (4) | 2016.09.06 |
데이터베이스 & SQL이란? (2) | 2016.09.06 |