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 |