본문 바로가기
부트캠프

[TIL] 유데미X사람인 취업 부트캠프 13일차 / SQL 쿼리문 SELECT~GROUP BY

by 상똥 2024. 1. 2.

[1. 오늘 배운 것]

1. SELECT문

- 테이블 내에서 검색할 때 쓰이는 명령어

- 기본 구조 : SELECT column_name FROM table_name

- *(전체)를 사용하는 경우, 데이터베이스 서버와 애플리케이션 사이의 트래픽이 증가하여 결과 검색이 느려짐

- *은 전체 테이블이 꼭 필요하지 않은 이상 사용하지 않는 것이 좋음

- SELECT * FROM actor : actor라는 테이블의 전체 컬럼을 조회한다

- SELECT first_name , last_name FROM actor : actor테이블에서 first_name , last_name 컬럼을 조회한다. 컬럼의 순서는 작성한대로 출력된다

- 굳이 대문자로 작성하지 않아도 되지만 표준화된 작성법이 대문자

 

2. SELECT 연습문제

- 이메일에 작성할 고객의 성과 이름 그리고 이메일 주소 검색하기 :SELECT first_name, last_name, email FROM customer

 

3. SELECT DISTINCT

- 테이블에 중복값이 있는 열이 포함되어 있으면 중복되지 않는 고유한 값만 출력되도록 하는 것

- 기본 구조  : SELECT DISTINCT column FROM table 또는 SELECT DISTINCT(column) FROM table

 

4. SELECT DISTINCT 연습문제

- 소지한 영화의 등급 종류를 알고 싶은 경우

- SELECT DISTINCT(rating) FROM film;

 

5. COUNT

- 특정 쿼리 조건에 맞는 행의 수를 반환

- 기본 구조 : SELECT COUNT(column) FROM table;

- ex 테이블의 행의 개수를 알고 싶은 경우 :=> SELECT COUNT(*) FROM table;

- 단순히 행의 개수를 반환하는 것으로, 다른 명령어와 함께 사용할 때 유용

- ex 테이블에 고유한 고객 이름은 몇 개인가 => SELECT COUNT(DISTINCT name) FROM customer; 

 

6. SELECT WHERE

- 열에 조건을 지정하여 그에 맞는 행 반환

- 기본 구조 : SELECT column FROM table WHERE conditions;

- FROM절 바로 뒤에 오며 행을 조건에 맞게 걸러낼 때 사용

- ex 3보다 큰 수를 가지는 행을 반환 =>  SELECT * FROM table WHERE number>3;

- AND, OR, NOT 연산자와 섞어서 사용할 수 있음

- ex 이름이 David 이고 색상이 red인 행의 이름과 색상을 반환 => SELECT name, color FROM table WHERE name='David' AND color='red';

- 영화 테이블에서 rental_rate가 4보다 크고 repalcement_cost가 19.99이상이면서 rating이 R이상인 행의 title열 반환

 

7. SELECT WHERE 연습문제

- 이름이 Nancy Thomas라는 고객의 이메일 주소 찾기

- SELECT email FROM customer WHERE first_name='Nancy' AND last_name='Thomas';

- 영화 'Outlaw Hanky'의 내용 찾기

- SELECT description FROM film WHERE title = 'Outlaw Hanky';

 

8. ORDER BY

- 요청한 쿼리 결과를 정렬하는 명령어

- 오름차순 또는 내림차순으로 정렬

- ASC : 오름차순

- DESC : 내림차순

- 기본값 : 오름차순

- SELECT company, name, sales FROM table ORDER BY company, sales;

- 테이블에서 company, name, sales를 반환할 때 company순으로 정렬한 다음 sales순으로 정렬해서 반환하는 쿼리문

 

9. LIMIT 

- 반환되는 행의 개수를 제한하는 쿼리문

- 상위 몇 개의 행만 표시하려 레이아웃 파악

- 쿼리 요청의 가장 아래 부분으로 내려가며 가장 마지막에 실행되는 명령어

- ORDER BY와 함께 사용하면 유용함

- LIMIT을 호출한 후 몇 개의 행을 호출할 것인지 작성 => LIMIT 5;

 

10. ORDER BY, LIMIT 연습문제

- 처음으로 결제한 열 명의 고객들의 id 찾기

- SELECT customer_id FROM payment ORDER BY  LIMIT payment_date 10;

- 상영시간이 가장 짧은 영화 5개의 제목과 상영시간

- SELECT title, length FROM film ORDER BY length LIMIT 5;

- 상영시간이 50분 이하인 영화의 개수

- SELECT COUNT(title) FROM film WHERE length <= 50;

 

11. BETWEEN

- 낮은 값과 높은값이 모두 포함되면서 그 사이의 값

- 양쪽의 엔드포인트를 말하는 것

- 기본 구조 : value BTWEEN low AND high

- 8에서 9달러 사이에 계산된 횟수 => SELECT COUNT(*) FROM payment WHERE amount BETWEEN 8 AND 9;

- 2024년 1월 1일부터 2024년 1월 15일까지 계산한 횟수 => SELECT COUNT(*) FROM payment WHERE payment_date BETWEEN '2024-01-01' AND '2024-01-15';

 

12. IN

- 값이 어느 부분에 포함되는지 확인하는 명령어

- 기본 구조 : SELECT column FROM table WHERE column IN(value); value는 여러 값일 수 있다

- NOT IN : 그 반대의 효과를 가져옴

 

13. LIKE, ILIKE

- LIKE : 값이 같은 행을 반환하는 쿼리

- LIKE 'A%' : A로 시작하는 문자열 반환

- LIKE '%a' : a로 끝나는 문자열 반환

- ILIKE : LIKE와 달리 대소문자 구분 안함

- LIKE 'A_' : A로 시작하는 문자열 반환, 밑줄에 문자 하나만 들어갈 수 있음, 밑줄 여러 개 사용 가능

- LIKE '_her%' => Sherri, Cheryl, ...

- 기본 구조 : SELECT column FROM table WHERE column1 LIKE "value1%" AND column2 ILIKE 'value2%';

 

14. 도전과제

- 5달러 이상의 결제 거래가 이뤄진 횟수

- SELECT COUNT(amount) FROM payment WHERE amount >= 5;

- 이름이 P로 시작하는 배우는 몇명인가

- SELECT COUNT(first_name) FROM actor WHERE first_name LIKE 'P%';

- 고객 주소에서 중복되지 않는 고유한 지역은 몇 개인가?

- SELECT COUNT(DISTINCT district) FROM address;

- 영화등급이 R등급이고 가격이 5달러에서 15달러 사이인 영화의 수

- SELECT COUNT(*) FROM film WHERE rating='R' AND replacement_cost BETWEEN 5 AND 15;

- 영화 제목에 Truman이 포함된 개수

- SELECT COUNT(*) FROM film WHERE title LIKE '%Truman%';

 

15. 집계함수

- AVG() : 평균값 반환

- COUNT() : 개수를 반환

- MAX() : 최대값 반환

- MIN() : 최소값 반환

- SUM() : 총합 반환

- ROUND(value, 소수점 자리) : 반올림값 반환

 

16. GROUP BY

- 조건에 맞게 카테고리별로 구분

- 기본 구조 : SELECT column FROM table GROUP BY condition

- 날자별로 매출액 반환, 매출액을 오름차순으로 정렬

- SELECT DATE(payment_date), SUM(amount) FROM payment GROUP BY DATE(payment-date) ORDER BY SUM(amount); 

 

17. 연습 문제

- 직원별로 결제한 건수를 반환

- SELECT staff_id, COUNT(amount) FROM payment GROUP BY staff_id;

- 영화 등급별 replacement_cost의 평균값 반환

- SELECT rating, AVG(replacement_cost) FROM film GROUP BY rating;

- 결제액이 가장 많은 상위 다섯명 반환

- SELECT customer_id, SUM(amount) FROM payment GROUP BY customer_id ORDER BY SUM(amount) DESC LIMIT 5;

 

[2. 오늘 잘한 점]

데이터베이스 같은 경우는 이미 자격증도 따뒀고 잘 아는 부분이라 잘 넘어간 것 같다. 남는 시간에 Spring 공부까지 했다! 시간을 알차게 쓰고있는 것 같아서 기분이 좋다. ㅎ ㅎ ㅎ

 

[3. 개선해야할 점]

잡생각이 너무 많았고 연휴가 끝난 첫 날이라서 그런지 좀 퍼지는 느낌이 들었다. 몽고DB공부해가야하는데 걱정이 앞선다.. 하지만 할 수 있다 난 노력하는걸 제일 잘하니까! 아자아자 화이팅이닷