연산자

 

 

SQL 연산자는 데이터베이스에서 데이터를 조작하거나 비교하기 위해
사용되는 기호나 키워드 입니다.

연산자는 숫자, 문자열, 논리값 등을 다룰 때 필수적인 도구로, 다양한 연산을 수행할 수 있도록 도와줍니다.

 

SQL 에서는 산술연산자, 비교연산자, 관계 연산자, 패턴 연산자 등이 있습니다.

이 내용에서는 비교연산자, 관계 연산자, 패턴연산자를 설명하겠습니다.

 

비교연산자

두 개의 값을 비교할 때 사용하는 연산자를 비교 연산자 라고 합니다.

=

두 값이 같은지 확인하는 연산자입니다.

SELECT * FROM students WHERE grade = 90;
-- grage 값이 90인 학생을 선택합니다.

 

!=

두 값이 서로 다른지 확인하는 연산자 입니다. 같지 않을 때 true 입니다.

SELECT * FROM students WHERE grade != 90;
-- grade 값이 90이 아닌 학생을 선택합니다.

 

^=

!= 와 동일합니다.

SELECT * FROM students WHERE grade ^= 90;
-- grade 값이 90이 아닌 학생을 선택합니다.

 

<>

!= 와 동일합니다.

SELECT * FROM students WHERE grade <> 90;
-- grade 값이 90이 아닌 학생을 선택합니다.

 

>

왼쪽 값이 오른쪽 값보다 크면 참(true) 입니다.

SELECT * FROM students WHERE grade > 90;
-- grade 값이 90보다 큰 학생을 선택합니다.

 

<

오른쪽 값이 왼쪽 값보다 작으면 참(true) 입니다.

SELECT * FROM students WHERE grade < 90;
-- grade 값이 90보다 작은 학생을 선택합니다.

 

>=

왼쪽 값이 오른쪽 값보다 크거나 같으면 참(true) 입니다.

SELECT * FROM students WHERE grade >= 90;
-- grade 값이 90 이상인 학생을 선택합니다.

 

<=

왼쪽 값이 오른쪽 값보다 작거나 같으면 참(true) 입니다.

SELECT * FROM students WHERE grade <= 90;
-- grade 값이 90 이하인 학생을 선택합니다.

 

IS NULL

값이 NULL 인지 확인합니다. NULL 은 값이 없음을 의미합니다.

SELECT * FROM students WHERE address IS NULL;
-- address가 없는 학생을 선택합니다.

 

IS NOT NULL

값이 NULL 이 아니면 참(true) 입니다.

SELECT * FROM students WHERE address IS NOT NULL;
-- address가 있는 학생을 선택합니다.

 

관계 연산자

관계 연산자는 SQL 에서 조건을 결합하거나 특정 범위 내에서 값을 확인할 때 사용됩니다.

 

 

NOT

조건이 거짓(false) 인 경우 참(true) 로 평가됩니다.

특정 조건을 반대로 만들고 싶을 때 사용합니다.

SELECT * FROM students WHERE NOT grade = 90;
-- grade가 90이 아닌 학생을 선택합니다.

 

AND

두 조건이 모두 참(true) 일 경우에만 참(true) 으로 평가됩니다.

여러 조건을 결합할 때 사용합니다.

SELECT * FROM students WHERE grade > 80 AND grade < 90;
-- grade 가 80보다 크고 90보다 작은 학생을 선택합니다.

 

OR

하나 이상의 조건이 참(true) 이면 참(true) 으로 평가됩니다.

여러 조건 중 하나만 만족하면 되는 경우 사용합니다.

SELECT * FROM students WHERE grade = 90 OR grade = 95;
-- grade가 90이거나 95인 학생을 선택합니다.

 

BETWEEN

값이 두 값 사이에 있는지 확인합니다.

SELECT * FROM students WHERE grade > 80 AND grade < 90;
-- 두 구문이 똑같습니다.
SELECT * FROM students WHERE BETWEEN 80 AND 90;

-- 날짜 계산
SELECT * FROM orders WHERE order_date BETWEEN

 

IN 

값이 지정된 목록 중 하나와 일치하면 참(true) 으로 평가됩니다.

여러 값을 비교할 때 사용하면 가독성이 좋아집니다.

SELECT * FROM students WHERE grade IN (85, 90, 95);
-- grade가 85, 90, 95 중 하나인 학생을 선택합니다.

 

결합해서 사용하기

SELECT * FROM students 
WHERE (grade BETWEEN 80 AND 90) AND (name IN ('John', 'Jane')) AND NOT address IS NULL;
-- 조건:
-- 1. grade는 80 이상 90 이하
-- 2. name이 'John' 또는 'Jane'
-- 3. address가 NULL이 아님

 

패턴 연산자

SQL 에서 문자열 데이터를 검색할 때 특정 패턴과 일치하는 데이터를 찾기 위해 사용됩니다.

대표적으로 LIKE, %, _ 연산자가 있으며, 이를 사용하면 유사한 문자열을 검색할 수 있습니다.

 

간혹 아래와 같은 코드처럼 실수하는 분들이 있습니다. 이런점을 주의해야 합니다.

SELECT * FROM students WHERE name = 'A%'
-- name 이 A% 인 모든 학생 이름을 검색합니다.

 

LIKE

특정 문자열 패턴과 일치하는 데이터를 검색합니다.

보통 %, _ 와 함께 사용합니다.

SELECT * FROM students WHERE name LIKE 'A%';
-- 'A'로 시작하는 모든 학생 이름을 검색합니다.
SELECT * FROM students WHERE name NOT LIKE 'A%';
-- 'A'로 시작하지 않는 모든 학생 이름을 검색합니다.

 

%

0개 이상의 문자를 대체합니다.

LIKE 'A%' : A 로 시작하는 문자열을 검색
LIKE '%A' : A 로 끝나는 문자열을 검색
LIKE '%A%' : A 가 포함된 문자열을 검색
SELECT * FROM students WHERE name LIKE '%John%';
-- 이름에 'John'이 포함된 모든 학생을 검색합니다.

 

_

하나의 문자를 대체합니다.

정확히 몇 글자를 대체할지 제어할 수 있습니다.

LIKE 'J_n' : J 로 시작하고 세 번째 글자가 n 인 문자열 검색
LIKE '_ar' : 두 번째 글자가 a 이고 세 번째 글자가 r 인 문자열 검색
SELECT * FROM students WHERE name LIKE 'J_n';
-- 이름이 'Jan', 'Jon', 'Jim'과 같은 패턴을 가지는 학생 검색.

 

정규표현식

데이터를 정규표현식을 사용하여 문자열이 특정 패턴과 일치하는지 확인하는 SQL 연산자 입니다.

일반적인 LIKE 연산자보다 더 복잡하고 세밀한 패턴을 처리할 수 있습니다.

이 연산자는 Oracle, MySQL(8.0 이상) 등에서 지원되며, 텍스트 데이터의 정교한 검색에 유용합니다.

Regular Expression Library
미리 패턴이 만들어진 다양한 정규표현식을 사용하실 수 있습니다.

 

REGEXP_LIKE

정규표현식을 사용할 때  REGEXP_LIKE 문법을 사용합니다.

REGEXP_LIKE(column_name, 'pattern', 'match_parameter')

 

column_name : 검사할 열 또는 값

pattern : 정규 표현식으로 지정된 패턴

match_parameter : 선택 사항으로, 패턴의 대소문자 구분 및 동작 방식을 제어합니다.

i 는 대소문자 구분하지 않고 c 는 대소문자 구분, m 은 여러 줄 모드 입니다.

-- 예를 들어 핸드폰 번호를 찾고 싶을 때
SELECT * FROM NOTICE WHERE REGEXP_LIKE(TITLE, '01[016-9]-\d{3,4}-\d{4}';

 

'SQL' 카테고리의 다른 글

SQL Developer 으로 Tablespace 생성  (1) 2024.12.09
변환함수 - TO_CHAR, TO_DATE, TO_NUMBER  (0) 2024.12.09
SQL AS : 필드, 테이블 명을 다시 지을 때  (0) 2024.12.05
문자열 함수, 숫자형 함수  (0) 2024.12.05
DDL, DML, DCL, TCL  (0) 2024.12.04