[강의명]
패스트캠퍼스 SQL 100제 + 자격증 완성 온라인 완주반
[수강목록]
16. 데이터 조회와 필터링 - 12. 실습 문제 - 2
생각대로 SQL - 2
[강의내용]
16. 데이터 조회와 필터링 - 12. 실습 문제 - 2
[문제]
CUSTOMER 테이블에서 고객의 EMAIL주소를 추출하고, 이메일 형식에 맞지 않는 이메일 주소는 제외시켜라. (이메일 형식은 ‘@’가 존재해야 하고 ‘@’로 시작하지 말아야 하고 ‘@’로 끝나지 말아야 한다.)
SELECT email
FROM customer
WHERE email LIKE '%@%'
AND email NOT LIKE '@%'
AND email NOT LIKE '%@';
LIKE '%@%' 에서는 email 값에 @가 존재하는 모든 값이 선택되고 (위치 상관없음)
NOT LIKE '@%' 에서는 email 값이 @로 시작하는 값들을 걸러준다.
NOT LIKE '%@' 에서는 email 값이 @로 끝나는 값들을 걸러준다.
생각대로 SQL - 2
문제19번) Actor 테이블을 이용하여, 이름이 Nick 이거나 성이 Hunt 인 배우의 id 와 이름, 성을 확인해주세요.
actor 테이블을 확인해본다.
SELECT actor_id, first_name, last_name
FROM actor
WHERE first_name = 'Nick'
OR last_name = 'Hunt';
문제2번) actor의 성이 Jo로 시작하는 사람의 id 값이 가장 낮은 사람 한 사람에 대하여, 사람의 id값과 이름, 성을 알려주세요
우선 성이 Jo로 시작하는 사람들의 정보를 찾아보자
SELECT actor_id, first_name, last_name
FROM actor
WHERE last_name LIKE 'Jo%';
그리고 id가 가장 낮은 한 사람을 뽑기 위해 id순으로 오름차순 정렬한 후 LIMIT를 걸어준다.
SELECT actor_id, first_name, last_name
FROM actor
WHERE last_name LIKE 'Jo%'
ORDER BY actor_id
LIMIT 1;
문제3번) film 테이블을 이용하여, film 테이블의 아이디값이 1~10 사이에 있는 모든 컬럼을 확인해주세요.
내 풀이
SELECT *
FROM film
ORDER BY film_id
LIMIT 10;
모범답안
SELECT *
FROM film
WHERE film_id BETWEEN 1 AND 10;
두 쿼리 모두 결과는 동일하지만 짧고 간결한 쿼리를 작성하는 습관을 들이기 위해 모범답안을 따르자
문제7번) address 테이블을 이용하여, 우편번호(postal_code) 값이 두번째글자가 1인 우편번호의 address_id, address, district ,postal_code 컬럼을 확인해주세요.
postal_code는 5개 숫자로 이루어져 있고 텍스트 타입이다.
postal_code의 2번째 값을 추출하기 위해 substring 함수를 이용한다.
substring(postal_code, 1, 1) >> postal_code의 1번째 자리부터 1번째 자리의 값을 가져온다
substring(postal_code, 2, 1) >> postal_code의 2번째 자리부터 1번째 자리의 값을 가져온다
SELECT address_id, address, district, postal_code
FROM address
WHERE substring(postal_code, 2, 1) = '1';
문제9번) payment 테이블을 이용하여, 고객번호가 355에 해당 하는 사람의 결제 금액이 1~3원 사이에 해당하는 모든 결제 내역을 확인해주세요.
SELECT *
FROM payment
WHERE customer_id = 355
AND amount > 1
AND amount < 3;
문제11번) film 테이블을 이용하여, film의 길이가 100~120 에 해당하거나 또는 rental 대여기간이 3~5일에 해당하는 film 의 모든 정보를 확인해주세요.
SELECT *
FROM film
WHERE length BETWEEN 100 AND 120
OR rental_duration BETWEEN 3 AND 5;
문제12번) address 테이블을 이용하여, postal_code 값이 공백('') 이거나 35200, 17886 에 해당하는 address 에 모든 정보를 확인해주세요.
''과 NULL은 다름에 주의한다.
NULL은 어떤 정보도 입력되지 않은 빈 칸의 상태
공백은 ''이라는 값이 입력된 상태임
SELECT *
FROM address
WHERE postal_code = ''
OR postal_code = '35200'
OR postal_code = '17886';
* case 절 설명
기본 WHEN 구문은 더 추가할 수도 있다.
문제16번) address 테이블을 이용하여, postal_code 값이 35200, 17886이거나 address2가 빈 값(NULL)에 해당하는 모든 정보를 확인해주세요.
NULL을 다룰때는 =이 아닌 IS NULL을 사용해야함에 주의한다.
SELECT *
FROM address
WHERE address2 IS NULL
OR postal_code = '35200'
OR postal_code = '17886';
문제17번) 고객의 성에 John 이라는 단어가 들어가는, 고객의 이름과 성을 모두 찾아주세요.
SELECT first_name, last_name
FROM customer
WHERE last_name LIKE '%John%';
문제18번) 주소 테이블에서, address2 값이 null 값인 row 전체를 확인해볼까요?
SELECT *
FROM address
WHERE address2 IS NULL;