[DB_SQL활용] WHERE절과 연산자

예지성준·2024년 5월 8일

DB

목록 보기
5/19
post-thumbnail

더 정확하고 다양하게 결과를 출력하는 WHERE절과 연산자

필요한 데이터만 쏙 출력하는 WHERE절

원하는 데이터만 가져올 수 있음

1. 문법

SELECT ...FROM 테이블 명 WHERE 조건식;

참고) 조건식 - 참/거짓 판별식
주로 많이 사용하는 연산: 비교연산, 논리연산

👩‍🏫참고

  • 오라클 테이블: 대문자
    오라클 컬럼명: 대문자
    -> 인식시 대소문자 구분없이 조회
    컬럼명: ORDER_COUNT
  • MYSQL: 테이블, 컬럼명: 대소문자 구분
    테이블명
    윈도우즈 - 대소문 구분X
    리눅스(맥)- 대소문자 구분
    컬럼명: orderCount

2. 실습

여러 개 조건식을 사용하는 AND, OR 연산자

  • 다른 연산자를 한번에 여러개 사용하는 경우 사용
  1. AND 연산자
    모든 조건이 참일때 참

  2. OR 연산자
    하나라도 참일경우 참

단락회로평가

🔽그룹화🔽

연산자 종류와 활용 방법 알아보기

1. 산술 연산자

+, -, /, * -> 숫자일때

  • 값이 있을때만 연산 가능

    • null상태는 연산 불가
      --null
      SELECT 100 + NULL FROM DUAL;
  • nvl(컬럼명,null일때 대체 값)

참고) DUAL 테이블: 가상 테이블, 값을 연산시 사용

2. 비교 연산자

>, >=, <, <=

3. 등가 비교 연산자

=: 같다

--문자일때는 작은따옴표를 입력해줘야한다.
SELECT * FROM EMP WHERE JOB = 'CLERK';

같지않다
!= <> ^=

SELECT * FROM EMP WHERE DEPTNO != 20;

4. 논리 부정 연산자

NOT 연산자: 참인조건 -> 거짓으로

--CLERK, SALESMAN이 아닌 직원 목록 조회
SELECT * FROM EMP WHERE JOB NOT IN ('CLERK','SALESMAN')
ORDER BY JOB;
--SAL가 3000 미만인 직원 목록 조회
SELECT * FROM EMP WHERE NOT SAL >= 3000 ORDER BY SAL;
--사실 비교연산자 바꿔주면 됨ㅎㅎ

5. IN 연산자

  • OR 연산자를 대체
  • DEPTNO IN(10,20,30) -> DEPTNO가 10,20,30 중에 포함되어 있으면 참
-- OR연산으로 쓸 경우 구조가 복잡해진다.
SELECT * FROM EMP 
WHERE (DEPTNO = 20 OR DEPTNO = 30 OR DEPTNO = 10)
AND SAL >= 2000
ORDER BY DEPTNO;

🔽

6. BETWEEN A AND B 연산자

--1981년도에 고용된 직원들 조회
SELECT * FROM EMP 
WHERE HIREDATE >= '1981-01-01' AND HIREDATE <= '1981-12-31';

7. LIKE 연산자와 와일드 카드

1) 문법
컬럼명 LIKE '키워드'
-> 컬럼명과 키워드가 일치하는 경우
컬럼명 LIKE '키워드%'
-> 키워드로 시작하는 패턴

컬럼명 LIKE '%키워드'
-> 키워드로 끝나는 패턴

컬럼명 LIKE '%키워드%'
-> 키워드가 포함된 패턴

-- NA가 포함된 직책을 가지고 있는 직원 목록
SELECT * FROM EMP WHERE JOB LIKE '%NA%';

2) -, %

_: 글자 1개
ENAME LIKE '_L%' -> 2번째 단어가 L로 시작하는 이름

-- 이름의 2번째 문자가 L로 시작하는 직원 목록
SELECT * FROM EMP WHERE ENAME LIKE '_L%';

3) 와일드 카드 문자가 데이터의 일부일 경우 - ESCAPE 절 사용

  • ex) _ %를 문자 그대로의 패턴으로 인식하고 싶은 경우

👩‍🏫참고
테이블 데이터를 복사해서 생성
CREATE TBLE 테이블명 AS SELECT ...

ESCAPE기능 활용

8. IS NULL 연산자

NULL은 값이 없는 상태 -> 연산이 불가능함(산술, 비교, 논리 ...)

컬럼명 IS NULL: 컬럼이 NULL인 상태

👩‍🏫참고
컬럼명 IS NOT NULL: 컬럼이 NULL이 아닌 상태

  • 오라클: 비어있는 문자열 입력-> NULL로 들어감
  • MySQL: 빈 문자열 -> 비어있는 문자열로 들어감
    (컬럼명 <> " AND 컬럼명 IS NOT NULL)

9. 집합 연산자

SQL: 관계 대수 + 집합 이론

1) UNION: 합집합
중복되는 데이터는 하나만 출력

SELECT * FROM EMP WHERE SAL >= 2000
UNION 
SELECT * FROM EMP WHERE SAL <= 2500;

⚠주의
컬럼 합칠경우 컬럼의 개수 같아야한다.

2) UNION ALL

  • 중복 허용 합집합

3) MINUS: 차집합

-- 차집합 출력, DEPTNO 10만 출력
SELECT * FROM EMP WHERE DEPTNO IN (10,20)
MINUS
SELECT * FROM EMP WHERE DEPTNO IN (20,30);

4) INTERSECT: 교집합

-- 20번 부서 공통적 (교집합 출력)
SELECT * FROM EMP WHERE DEPTNO IN (10,20)
INTERSECT
SELECT * FROM EMP WHERE DEPTNO IN (20,30);

참고) MySQL - MINUS, INTERSECT 없음

profile
꽁꽁 얼어붙은 한강 위로 😺

0개의 댓글