[내일배움캠프] SQL 기초 - 데이터 조회 및 필터링
이번 주차에 배운 SQL을 통한 데이터 조회 및 필터링 (SELECT, WHERE, LIKE, IN, BETWEEN) 에 대해 정리해보았다.
DBeaver - MySQL 을 사용했고 스파르타코딩캠프에서 제공해주신 데이터를 활용했다는 점 참고~
- SELECT / FROM
SELECT *
FROM payments;
SELECT 는 조회할 컬럼을 선택하고, FROM은 어떤 테이블로 부터 가져올 건지를 명시한다.
이때 SELECT 뒤에 ' * ' 와 같이 별표를 붙이면 모든 컬럼을 조회할 수 있따
· 실행결과
여기서 품목의 id만 조회하려고 하는데, 컬럼 이름이 order_id 인게 맘에 안들어서 id 로 고쳐서 조회하고 싶다면?
SELECT order_id as id
FROM payments;
SELECT order_id id
FROM payments;
위와 같이 둘 중 한가지의 방법을 선택할 수 있다. 나 같은 경우는 AS를 쓰는게 편하고 보기도 좋아서 전자를 주로 쓴다
- WHERE을 이용한 필터링
테이블에서 조건을 통해 원하는 컬럼만 뽑아서 쓰고 싶다면, WHERE 절을 통한 조건을 줘서 필터링할 수 있다.
ex) food_order 테이블에서 주문 금액 20,000 ~ 30,000 사이 고객 조회
사이의 값을 조회해야 한다면 BETWEEN a AND b 구문을 활용하자.
SELECT price
FROM food_orders
WHERE price BETWEEN 20000 AND 30000;
이때, 20000 AND 30000 이면 20000 이상 30000 이하의 값이 뽑힌다. 이상 / 이하의 개념이라는 것 인지
ex) food_order 테이블에서 'B' 로 시작하는 상점의 주문 조회하기
B로 시작하는 문자를 뽑아야하기 때문에 LIKE 절을 활용하면 된다.
SELECT *
FROM food_orders
WHERE restaurant_name LIKE "B%";
이때 만약에, 정확하게 8글자여야 하고 B로 시작해야 된다면? => ' _ ' 언더바를 활용할 수 있따!
SELECT *
FROM food_orders
WHERE restaurant_name LIKE "B_____";
ex) 상품 준비시간이 20~30분 사이인, 한국음식점의 식당명과 고객번호 조회하기
비슷한 문제인데, WHERE 절 내에서 조건을 여러 개를 넣고 싶다면 AND로 이어주면 된다는 것만 알면 쉽게 풀 수 있다.
SELECT restaurant_name ,customer_id
FROM food_orders
WHERE food_preparation_time BETWEEN 20 AND 30
AND cuisine_type = "Korean";
· 관련 예제 풀이
id
|
name
|
position
|
salary
|
hire_date
|
1
|
르탄이
|
개발자
|
30000
|
2022-05-01
|
2
|
배캠이
|
PM
|
40000
|
2021-09-25
|
3
|
구구이
|
파트장
|
35000
|
2023-06-01
|
4
|
이션이
|
팀장
|
50000
|
2021-07-09
|
SELECT name, position
FROM sparta_employees;
2. 중복 없이 모든 직급(position)을 선택하는 쿼리를 작성
SELECT DISTINCT position
FROM sparta_employees;
컬럼의 값이 중복되지 않게 추출하고 싶다면 'DISTINCT' 를 SELECT 절의 추출하고 싶은 컬럼명 앞에 넣어주면 중복되지 않는 값만 추출할 수 있다!
3. 연봉(salary)이 40000, 60000 사이의 직원들을 선택하는 쿼리를 작성
SELECT *
FROM sparta_employees
WHERE salary BETWEEN 40000 AND 60000;
4. 입사일(hire_date)이 2023년 1월 1일 이전인 모든 직원들을 선택하는 쿼리를 작성
SELECT *
FROM sparta_employees
WHERE hire_date < '2023-01-01';
DATE 도 비교 연산자를 활용가능하다는 점 숙지하자!