일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Redis
- 정보처리기사
- 영속성 컨텍스트
- MongoDB
- spring security
- 스프링 부트
- SQL
- 깃허브
- NoSQL
- document database
- 정처기
- VMware
- 동적계획법
- github
- Spring Boot
- 스프링 시큐리티
- JPA
- 다이나믹프로그래밍
- 분할정복
- 호이스팅
- 자바의 정석
- 레디스
- 게시판
- sqld
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 스프링부트
- 캐시
- 실행 컨텍스트
- in-memory
- 이벤트루프
- Today
- Total
FreeHand
[MySQL] SELECT 절 본문
목차
1. 데이터 조회
1.1 SELECT
1.2 Alias
1.3 DISTINCT
2. 필터링
2.1 조건 연산자
2.2 BETWEEN
2.3 IN
2.4 와일드카드
2.5 Null
3. 프로그래머스 실습
1. 데이터 조회
1.1 SELECT
테이블 내의 정보를 조회하려면 SELECT 문을 사용해야 한다. SELECT 문의 기본적인 구성은 다음과 같다.
SELECT 칼럼명 FROM 테이블명 [WHERE 조건식]
실습을 위해 sakila 샘플 데이터베이스를 사용한다.
USE sakila;
SHOW tables;
SELECT actor_id, first_name, last_name
FROM actor;
actor 테이블에서 200개의 행이 조회되었다.
다음과 같이 LIMIT를 사용하면 원하는 개수만 조회할 수 있다.
SELECT actor_id, first_name, last_name
FROM actor
LIMIT 5;
1.2 Alias
반환되는 테이블의 열에 새로운 label을 지정하고 싶으면 별칭(alias)를 사용하면 된다.
AS 키워드를 사용해서 별칭을 지정했다. 별칭을 사용하면 출력 내용을 이해하기 쉽고, 모호한 열 이름으로 인한 충돌을 피할 수 있다. AS 키워드는 생략 가능하다.
1.3 DISTINCT
영화에 출연한 모든 배우의 ID를 조회하는 쿼리를 실행하면 다음과 같다.
SELECT actor_id
FROM film_actor
ORDER BY actor_id;
한 편 이상의 영화에 출연한 배우들의 ID가 중복으로 출력된다.
이렇게 중복된 데이터를 제거하려면 SELECT 뒤에 DISTINCT 키워드를 사용하면 된다.
SELECT DISTINCT actor_id
FROM film_actor
ORDER BY actor_id;
5462개 행이 조회된 기존 결과와 달리 200개 행만 조회되었다. 중복이 제거되어 배우의 수만큼(200명) 조회된 것이다.
2. 필터링
전체 행을 조회하는 것이 아닌 특정 조건을 만족하는 행만 조회하는 경우가 더 많다.
이때는 WHERE 절을 사용하여 원하는 데이터만 조회할 수 있다.
2.1 조건 연산자
여러 조건 연산자를 사용해서 원하는 결과를 얻을 수 있다.
아래 쿼리는 이름이 STEVEN인 고객만 조회하는 쿼리이다.
SELECT customer_id, first_name
FROM customer
WHERE first_name = 'STEVEN';
이처럼 동등, 부등, AND, OR, NOT 등 여러 연산자를 사용해서 원하는 데이터만 조회할 수 있다.
2.2 BETWEEN
범위의 상한과 하한 기준이 모두 있는 경우 between 연산자를 활용할 수 있다.
다음은 2005년 6월 15일부터 2005년 6월 16일 사이에 영화를 대여한 고객의 ID를 조회하는 쿼리이다.
SELECT customer_id, rental_date
FROM rental
WHERE rental_date BETWEEN '2005-06-15' AND '2005-06-16'
ORDER BY rental_date;
시간을 지정하지 않으면 기본적으로 자정으로 설정되어 15일 00:00:00부터 16일 00:00:00까지 조회된다.
즉 위 쿼리는 15일에 대여한 고객을 조회하는 쿼리이다.
2.3 IN
다음 쿼리는 등급이 'G' 또는 'PG'인 영화를 조회한다.
SELECT film_id, title, rating
FROM film
WHERE rating = 'G' OR rating = 'PG';
만약 위 쿼리에서 OR 조건이 늘어나면 where 절이 길어진다.
이런 경우 IN 연산자를 사용할 수 있다.
SELECT film_id, title, rating
FROM film
WHERE rating IN ('G', 'PG');
동일하게 373개 행이 조회되었다.
2.4 와일드카드
와일드카드 문자를 사용하면 문자열로 필터링을 할 수 있다.
와일드카드 문자
- - : 한 문자
- % : 개수 상관없이 모든 문자
다음은 제목이 A로 시작하고 N으로 끝나는 영화를 조회하는 쿼리이다.
SELECT film_id, title
FROM film
WHERE title LIKE 'A%N';
와일드카드로 표현이 충분하지 않으면 정규 표현식으로 검색식을 작성할 수도 있다.
2.5 Null
null을 조회할 때는 is null 연산자를 사용한다.
SELECT rental_id, customer_id, return_date
FROM rental
WHERE return_date IS NULL;
위 쿼리는 rental_date가 null인, 즉 반납되지 않은 대여 정보를 조회한다.
반대로 IS NOT NULL을 사용하면 null이 아닌 데이터를 조회할 수 있다.
null을 다룰 때는 =(등호)를 사용하지 않고 반드시 is null과 is not null을 사용해야 한다.
3. 프로그래머스 실습
SELECT factory_id, factory_name, address
FROM food_factory
WHERE address LIKE '강원도%'
ORDER BY factory_id
SELECT COUNT(user_id) AS users
FROM user_info
WHERE age IS NULL
'Database' 카테고리의 다른 글
[MySQL] INSERT (0) | 2023.10.31 |
---|---|
[MySQL] GROUP BY와 집계 함수 (0) | 2023.10.30 |
[MySQL] 테이블 복사 (0) | 2023.10.30 |
[MySQL] 서브쿼리와 ANY, ALL (0) | 2023.10.30 |
키의 종류 (0) | 2023.07.31 |