MSSQL

[MSSQL] WHERE 사용법

쓰봥 2022. 1. 24. 22:20
SMALL

오늘 다뤄볼 주제는 SQL Query 문법 중 하나인 "WHERE" 절 이다.

 

앞에서 다뤘듯이 WHERE 는 RUD(Read, Update, Delete) 뒤에 붙는 조건 절이다.

(INSERT 구문 뒤에는 조건이 붙을 수 없다.....)

 

특정한 값을 가진 데이터 만을 조회한다거나, 특정 조건을 가진 데이터만 수정이나 삭제 를 할 경우 사용한다.

 

WHERE 은 데이터 베이스 운용시 속도 개선의 중요한 키가 되기도 한다.

데이터 베이스 초기 사용 당시 데이터의 수가 그렇게 많지 않은 경우에는 속도 개선의 필요성을 느끼지 못할 수도 있다.

하지만 데이터가 점점 쌓여가고, 상황에 맞는 조건을 주지 못하고 데이터를 조회 하지 못 할 경우 

데이터 베이스의 응답 속도는 현저히 느려질 수 밖에 없다.

 

그만큼 WHERE 절은 중요한 역활을 한다고 생각한다.

 

그러면 하나씩 알아보자


SELECT(조회) 

SELECT 구문은 데이터를 조회 하는 절(Query) 이다.

예를 들어 보기위에 아래와 같은 데이터를 준비 했다.

 

Table 명 :  [Codes]

type item code
BANK 신한은행 P
BANK 하나은행 P
BANK 국민은행 Q
물품분류 사무용품 Q
물품분류 라이센스 R
물품분류 생활용품 T

 

위와 같은 정보를 가진 데이터 테이블이 있다고 가정하자.

여기서 우선 type 이 BANK 인 데이터만을 조회하려고 하면

SELECT type, item, code FROM Codes
WHERE type = 'BANK'
type item code
BANK 신한은행 P
BANK 하나은행 P
BANK 국민은행 Q

WHERE 뒤에 type 컬럼에 대한 조건을 주면 된다.

 

이번엔 조금 더 다른 방식으로 조건을 줄 수 도 있는데,

WHERE 절 뒤에 또 다른 Query 문을 조건으로 줄 수가 있는데 그걸 "서브쿼리" 라고 한다.

 

구문만 간단하게 먼저 살펴보면

 

SELECT type, item, code FROM CODES
WHERE code = ( SELECT [column] FROM [Table 명] WHERE [서브쿼리 조건])

이렇게 WHERE 조건 뒤에 또 다른 조건을 붙였는데, 여기서 주의할 사항이 있다.

만약 서브쿼리의 결과 값이 2개 이상일 경우, 그 쿼리는 오류가 발생한다. 

만약 그렇게 사용하고자 하면 다중연산자 (IN, ALL, ANY, EXIST) 를 사용하여야 하는데

자세한 이야기는 추후에 한번더 다뤄보는것으로 하자.

 

UPDATE(수정) 

Table 명 : [Person]

name age address phone
James 23 부산 010-xxxx
Alice 24 울산 011-xxxx
Sophia 29 서울 012-xxxx

UPDATE 구문은 위의 테이블을 예를 들어 사용해 보도록 하자.

 

여기서 name이 'Alice' 인 사용자의 [address] 정보가 잘못 등록되어 수정 해야 한다. 이때 UPDATE 구문을 쓰면 되는데,

여기서 name = 'Alice' 라는 조건을 주지않고 주소지를 '대전' 으로 변경하는 UPDATE 구문을 날리게 되면.......

끔찍한 일이 일어난다. 현재 테이블상의 데이터는 3개가 들어 있는 매우 작은 테이블이다.

하지만, 여러분의 정보가 들어있는 회사의 데이터 테이블에 조건을 주지 않고 UPDATE 구문을 날리게 되면........

모든 사용자의 [address] 정보가 '대전' 으로 변경되기 때문이다. 그렇기 때문에 WHERE  이라는 조건이 중요하다.

 

그렇다면 올바른 구문은

UPDATE Person SET address = '대전'
WHERE name = 'Alice'

이렇게 Query 를 날리게 되면 name = 'Alice' 에 맞는 데이터에 한해서 address 정보가 '대전' 으로 변하게 된다.

 

 

DELETE(삭제) 

Table 명 : [Person]

name age address phone
James 23 부산 010-xxxx
Alice 24 울산 011-xxxx
Sophia 29 서울 012-xxxx

DELETE 구문은 UPDATE 구문보다 조금더 조심해서 써야한다.

물론 회사나 조직에서 DB 관리자가 주기적으로 DB 를 BackUp 할 테지만,

실수는 왠만하면 하지 않는게 좋은것 이기 때문이다.

 

우선 DELETE 도 뒤에 특정 조건을 주지 않으면 해당 테이블 내의 데이터가 모두 삭제 된다.

 

이번에는 name = 'James' 라는 사용자가 이번에 그룹을 탈퇴 하게 되어 데이터를 관리할 필요가 없어 삭제 하려고 한다.

그때 의 쿼리는

DELETE FROM Person
WHERE name = 'James'

 

오늘은 WHERE 조건에 대해 간단하게 알아보았다.

WHERE 는 데이터 베이스를 사용하는데 필수적인 내용인 만큼,

기본적은 개념은 알아두고 사용하는 것이 중요하다고 생각한다.