본문 바로가기
Database/MariaDB

MariaDB : WHERE 조건문에 대해서

by 코딩쥐 2024. 10. 11.

SELECT문에 WHERE 절을 추가하면 특정 조건을 만족하는 데이터만 추출할 수 있다. 조건문에서 문자 데이터나 날짜를 조회할 때는 반드시 단일따옴표(' ')를 사용해야하며, 날짜 데이터의 경우에는 MariaDB에서 형변환 없이 비교가 가능하다.

  • SELECT 칼럼명 FROM 테이블명 WHERE 컬럼명 연산자 비교대상값;

 

연산자

비교연산자

연산자 설명
= 같다
> 보다 크다
< 보다 작다
>= 보다 크거나 같다
<= 보다 작거나 같다
<>, !=, ^= 다르다
# deptno(부서번호)가 10인 데이터 
SELECT * FROM emp WHERE deptno=10; 

# sal(급여)가 1000 미만인 데이터
SELECT * FROM emp WHERE sal<1000;

# sal(급여)가 3000 이상인 데이터
SELECT * FROM emp WHERE sal>=3000;

# deptno(부서번호)가 30이 아닌 데이터
SELECT * FROM emp WHERE deptno <> 30;

# ENAME(사원이름)이 ADAMS인 사원의 EMPNO(직원번호)와 DEPTNO(부서번호) 출력
SELECT ename, empno, deptno FROM emp WHERE ename='ADAMS';

# hiredate(입사일자)가 1982-01-01 이후인 사원 출력
SELECT * FROM emp WHERE hiredate >= '1982-01-01';
#'1982/01/01', '19820101' 둘 다 가능

 

다중조건문 (논리 연산자)

조건이 2개 이상인 경우에는 논리 연산자를 통해서 특정 조건을 만족하는 데이터를 추출할 수 있다. 

연산자 설명
AND 두 가지 조건을 모두 만족해야 한다
OR 두 가지 조건 중에서 한 가지만 만족해도 검색한다
NOT 조건에 만족하지 못하는 것만 검색한다
# deptno(부서번호)가 10이고 ENAME(사원이름)이 KING인 사원 
SELECT * FROM emp WHERE deptno=10 AND ename='KING';

# sal(급여)가 1000이하거나 3000이상인 사원
SELECT * FROM emp WHERE sal<=1000 OR sal>=3000;

# deptno(부서번호)가 20이 아닌 사원
SELECT * FROM emp WHERE NOT deptno=20;

 

IN 연산자

특정 컬럼의 값이 지정한 목록 중 하나와 일치하는지를 검사하여 데이터를 필터링할 때 사용한다. 여러 개의 OR 연산자를 사용하는 대신 IN을 사용하여 코드를 간결하게 작성할 수 있다.

  • SELECT 칼럼명 FROM 테이블명 WHERE 컬럼명 IN (비교값1, 비교값2, ... );
# deptno(부서번호)가 10이거나 20이거나
SELECT * FROM emp WHERE deptno IN(10,20);


BETWEEN 연산자

특정 칼럼의 값이 지정한 범위에 속해있는지를 확인하여 데이터를 추출한다. 

 

  • SELECT 칼럼명 FROM 테이블명 WHERE 컬럼명 BETWEEN 비교값1 AND 비교값2; 
# sal(급여)가 1500이상 3000이하인 사원
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000;
# 다르게 작성 : SELECT * FROM emp WHERE sal>=1500 AND sal<=3000; 

# sal(급여)가 1500이상 3000이하가 아닌 사원
SELECT * FROM emp WHERE NOT sal BETWEEN 1500 AND 3000;

 

LIKE 연산자

LIKE 연산자는 검색하고자 하는 값을 정확히 모를 경우에 검색 가능하도록 한 연산자다. 

  • SELECT 칼럼명 FROM 테이블명 WHERE 컬럼명 LIKE '패턴';

패턴을 기술할 때에는 두 가지 와일드카드를 사용한다. 

  • % : 문자가 없어도 되고, 하나 이상의 문자에 어떤 값이 와도 상관없음을 의미
  • _ : 하나의 문자가 와야하고, 어떤 값이 와도 상관 없음을 의미
# ENAME(사원명)이 A로 시작하는 사원
SELECT * FROM emp WHERE ename LIKE 'A%';

# ENAME(사원명)에서 세번째 글자가 A인 사원
SELECT * FROM emp WHERE ename LIKE '__A%';

 

NULL 연산자

NULL값의 경우에는 산술연산자나 비교연산자로 판단을 할 수가 없다. 따라서 NULL 값인지 아닌지를 판단하는 연산자는 IS NULL을 사용해야 한다. 

  • SELECT 칼럼명 FROM 테이블명 WHERE 컬럼명 IS NULL; 
#comm이 NULL인 항목
SELECT * FROM emp WHERE comm IS NULL;

#comm이 NULL이 아닌 애들 
SELECT * FROM emp WHERE comm IS NOT NULL;