[SQL 1-4강] IN, BETWEEN, LIKE, IS NULL, CAST

2021. 5. 14.·🤓 기술 학습 & 공부 기록/컴퓨터 일반

[강의명]
패스트캠퍼스 SQL 100제 + 자격증 완성 온라인 완주반

 

[수강목록]

11. 데이터 조회와 필터링 - 07. IN 연산자
12. 데이터 조회와 필터링 - 08. BETWEEN 연산자
13. 데이터 조회와 필터링 - 09. LIKE 연산자
14. 데이터 조회와 필터링 - 10. IS NULL 연산자
15. 데이터 조회와 필터링 - 11. 실습 문제 - 1

 

[강의내용]

 

11. 데이터 조회와 필터링 - 07. IN 연산자

특정 집합(컬럼 혹은 리스트)에서 특정 집합 혹은 리스트가 존재하는지 판단하는 연산자이다.

문법

SELECT *
FROM TABLE_NAME
WHERE COLUMN_NAME IN (VALUE1, VALUE2, ... );


COLUMN_NAME이 가지고 있는 집합에서 VALUE1, VALUE2 등의 값이 존재하는지 확인

SELECT *
FROM TABLE_NAME
WHERE COLUMN_NAME IN
(SELECT COLUMN_NAME2 FROM TABLE_NAME2)


COLUMN_NAME이 가지고 있는 집합에서 TABLE_NAME2 테이블의 COLUMN_NAME2의 집합이 존재하는지 확인

실습

SELECT customer_id, rental_id, return_date
FROM rental
WHERE customer_id IN (1, 2)
ORDER BY return_date DESC;

 

customer_id가 1 또는 2인 행을 출력한다.
그 결과를 return_date 컬럼 기준 내림차순으로 출력한다.

쿼리 결과


SELECT customer_id, rental_id, return_date
FROM rental
WHERE customer_id NOT IN (1, 2) -- 1또는 2의 의미 (OR, && '='와 같음)
ORDER BY return_date DESC;

SELECT customer_id, rental_id, return_date
FROM rental
WHERE customer_id NOT IN (1, 2)
ORDER BY return_date DESC;


customer_id가 1도 아니고 2도 아닌 행을 출력한다. 그 결과를 return_date 컬럼 내림차순으로 출력한다.

 

쿼리 결과

내림차순이기 때문에 null 값이 등장할 수 있다.

 

SELECT customer_id
FROM rental
WHERE CAST (return_date AS DATE) = '2005-05-27';


return_date가 2005년 5월 27일인 customer_id를 출력한다.
CAST는 return_date를 DATE타입으로 바꿔준다.

 

쿼리 결과

이번에는 서브쿼리를 사용해본다

 

SELECT first_name, last_name
FROM customer
WHERE customer_id IN (
	SELECT customer_id 
	FROM rental
	WHERE CAST (return_date AS DATE) = '2005-05-27'
	);


return_date가 2005년 5월 27일인 customer_id의 first_name, last_name을 출력한다.

메인쿼리 : customer_id의 first_name, last_name을 출력한다

서브쿼리 : return_date가 2005년 5월 27일인 customer_id를 출력한다

그리고 WHERE ~ IN으로 연결한다.

 

쿼리 결과


효율적으로 쿼리를 처리하기 위해 서브쿼리 사용.

 

12. 데이터 조회와 필터링 - 08. BETWEEN 연산자

 

특정 집합에서 어떠한 컬럼의 값이 특정 범위 안에 들어가는 집합을 출력하는 연산자이다.

SELECT *
FROM TABLE_NAME
WHERE COLUMN_NAME
BETWEEN VALUE_A AND VALUE_B;


COLUMN_NAME 컬럼의 값이 VALUE_A와 VALUE_B 사이에 있는 집합을 출력한다.
즉 COLUMN_NAME은 VALUE_A보다 크거나 같고 VALUE_B보다는 작거나 같다.

SELECT *
FROM TABLE_NAME
WHERE COLUMN_NAME
NOT BETWEEN VALUE_A AND VALUE_B;


COLUMN_NAME 컬럼의 값이 VALUE_A와 VALUE_B 사이에 있지 않은 집합을 출력한다.
즉 COLUMN_NAME은 VALUE_A보다 작거나 VALUE_B 보다 크다.

실습

SELECT customer_id, payment_id, amount
FROM payment
WHERE amount BETWEEN 8 AND 9;

 

쿼리 결과

 

SELECT customer_id, payment_id, amount
FROM payment
WHERE amount NOT BETWEEN 8 AND 9;

 

쿼리 결과

13. 데이터 조회와 필터링 - 09. LIKE 연산자

특정 집합에서 어떠한 컬럼의 값이 특정 값과 유사한 패턴을 갖는 집합을 출력하는 연산자이다.

문법

SELECT *
FROM TABLE_NAME
WHERE COLUMN_NAME
LIKE 특정패턴


COLUMN_NAME 컬럼의 값이 특정 패턴과 유사한 집합을 출력한다.

SELECT *
FROM TABLE_NAME
WHERE COLUMN_NAME
NOT LIKE 특정패턴


COLUMN_NAME 컬럼의 값이 특정 패턴과 유사하지 않은 집합을 출력한다.

* 특정 패턴에서 '%'는 어떤 문자 혹은 문자열이든지 매칭되었다고 판단한다.
* 특정 패턴에서 '_'는 한 개의 문자가 어떤 문자이든지 매칭되었다고 판단한다.

실습

SELECT first_name, last_name
FROM customer
WHERE first_name LIKE 'Jen%';

 

쿼리 결과

 

first_name이 'Jen'으로 시작하는 모든 값을 출력한다.

 

SELECT 'FOO' LIKE 'FOO', -- TRUE
'FOO' LIKE 'F%', -- TRUE
'FOO' LIKE '_O_', -- TRUE
'BAR' LIKE 'B_' -- FALSE (3자리라서 안됨)


'BAR' LIKE ~ 가 참이 되게 하려면 'B__' 또는 'B%'가 와야 한다.

 

SELECT first_name, last_name
FROM customer 
WHERE first_name LIKE '_her%';

 

쿼리 결과

 

SELECT first_name, last_name
FROM customer 
WHERE first_name NOT LIKE 'Jen%';

쿼리 결과

 

14. 데이터 조회와 필터링 - 10. IS NULL 연산자

특정 컬럼 혹은 값이 널 값인지 아닌지를 판단하는 연산자이다. IS NULL 혹은 IS NOT NULL로 널 유무를 판단한다.

문법

 

SELECT *
FROM TABLE_NAME
WHERE COLUMN_NAME IS NULL;


COLUMN_NAME 컬럼의 값이 널인 집합을 출력한다. ( = NULL 사용 불가)

SELECT *
FROM TABLE_NAME
WHERE COLUMN_NAME IS NOT NULL


COLUMN_NAME 컬럼의 값이 널이 아닌 집합을 출력한다. ( != NULL 사용 불가)

15. 데이터 조회와 필터링 - 11. 실습 문제 - 1

payment 테이블에서 단일 거래의 amount의 액수가 가장 많은 고객들의 customer_id를 추출하라. 단, customer_id의 값은 유일해야 한다.

가장 큰 amount값을 찾고, 해당 값을 가진 customer_id를 찾아야 함.

 

먼저 메인쿼리에 customer_id를 찾는 쿼리를 작성한다. DISTINCT를 부여해야 한다.

SELECT DISTINCT customer_id
FROM payment
WHERE 

서브쿼리를 작성한다. 가장 큰 amount값을 찾는데, 내림차순과 LIMIT를 이용한다.

 

SELECT amount
FROM payment 
ORDER BY amount DESC 
LIMIT 1

이제 연결한다.

 

SELECT DISTINCT customer_id
FROM payment
WHERE amount = (
	SELECT amount
	FROM payment 
	ORDER BY amount DESC 
	LIMIT 1
	);

 

쿼리 결과

'🤓 기술 학습 & 공부 기록/컴퓨터 일반' 카테고리의 다른 글
  • [SQL 2-1강 (1)] JOIN, INNER, OUTER, LEFT, RIGHT
  • [SQL 1-5강] CASE, SUBSTRING, AND, OR
  • [SQL 1-3강 (2)] LIMIT, FETCH, OFFSET
  • [SQL 1-3강 (1)] DISTINCT, WHERE, COUNT, UPPER
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (516)
      • 🎨 프론트엔드 공부 (253)
        • JS & TS (92)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
[SQL 1-4강] IN, BETWEEN, LIKE, IS NULL, CAST
상단으로

티스토리툴바