컴퓨터 공학 분야 별 지식/database

[DB, SQL 문법 정리] SQL Operations<연산자>(String, between, union, intersect, except)

N돌핀 2022. 4. 8. 04:15

SQL Operations(String, between, union, intersect, except)

이번 포스팅에서는 예제와 함께 간단한 SQL operation(연산자)을 정리하겠습니다!

String operation

  • SQL에 있는 문자열 매칭 오퍼레이터로 비교하게 해주는 연산
  • ‘like’ 연산자를 이용
  • sensitive(대소문자 구분)하게 찾아낸다

special character인 ‘%’ 이용

  • ‘like’ 연산자와 special character인 ‘%’를 이용
  • 양 끝에 사용하면 해당 문자가 들어간 row를 찾을 수 있다
select name from worker where name like '%Park%'

--worker 테이블에서 name속성에 'Park'이라는 substring이 들어간 String을 찾아라
  • 맨 뒤에 써서 시작하는 글자를 찾을 수도 있다
select name from worker where name like 'Park%'

--worker 테이블에서 name속성에 'Park'으로 시작하는 String을 찾아라

special character인 ‘_’(언더바) 이용

  • ‘like’ 연산자와 special character인 ‘_’를 이용
  • ‘_’의 개수는 글자 수를 의미한다
select name from worker where name like '___'

--worker 테이블에서 name속성에 3글자 String을 찾아라
  • ‘_’ + ‘%’ 조합으로 최소 몇 글자 이상도 찾을 수 있다
select name from worker where name like '___%'

--worker 테이블에서 name속성에 최소 3글자 이상 String을 찾아라

SQL에서의 String operations 내용 추가 정리

  • % 기호를 쓰고 싶다면 escape code ‘를’ 사용해서 쓸 수 있다. EX) \%
  • Concatenation 연산자 ‘||’를 이용해서 여러 개를 포함하는 것을 찾을 수도 있다
  • upper, lower 연산 존재 EX) UPPER(’asdasd’)

Learn SQL UPPER Function By Practical Examples

  • 문자열 길이 구하기도 가능
  • LENGTH(): Byte 길이를 가져오므로 영어는 글자 수를 확실하게 알 수 있다 (1글자 1BYTE)
  • CHAR_LENGTH(): 단순 문자의 길이를 알려주므로 한글도 글자 길이를 알 수 있다
  • 오라클에서는 LENGTH()가 문자의 길이, LENGTHB가 BYTE길이를 나타낸다

between operation

  • ‘between ~~ and ~~’ 형식으로 between의 뜻 그대로 해주는 연산
  • where절 뒤에 붙여서 사용
where salary between 100 and 200

set operation

  • 집합 개념 operation
  • 집합 연산이므로 기본적으로 중복은 삭제된다
  • 중복이 허용되는 SQL에서 distinct를 통해 중복을 없앴던 것처럼 all을 이용해 중복을 살릴 수 있다

union

  • 테이블 두 개 합집합 연산
(select name from worker where salary > 200)
union
(select name from worker where home = 'seoul') 

-- worker에서 salary가 200보다 큰 이름들과 worker에서 home값이 'seoul'인 사람들을 합집합

intersect

  • 테이블 두 개 교집합 연산
(select name from worker where salary > 200)
intersect
(select name from worker where home = 'seoul') 

-- worker에서 salary가 200보다 큰 이름들과 worker에서 home값이 'seoul'인 사람들을 교집합
-- seoul에 살고 salary가 200보다 큰 사람들

except

  • 테이블 두개 차집합 연산
(select name from worker where salary > 200)
except
(select name from worker where home = 'seoul') 

-- worker에서 salary가 200보다 큰 이름들과 worker에서 home값이 'seoul'인 사람들을 차집합
-- salary가 200보다 큰 사람 중에 서울에 살지 않는 사람