개발일지/SQL

SQL 문법 다지기

프린스 알리 2024. 10. 2.

아래와 같은 employees(직원) 테이블이 있다.

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

 

문제

  1. employees 테이블에서 모든 직원의 이름(name)과 직급(posiotion)을 선택하는 쿼리를 작성해주세요.
  2. employees 테이블에서 중복 없이 모든 직급(position)을 선택하는 쿼리를 작성해주세요.
  3. employees 테이블에서 연봉(salary)이 40000과 60000 사이인 직원들을 선택하는 쿼리를 작성해주세요.
  4. employees 테이블에서 입사일(hire_date)이 2023년 1월 1일 이전인 모든 직원들을 선택하는 쿼리를 작성해주세요.

 

문제 풀이

 

데이터베이스와 테이블 생성하기

 

1번

employees 테이블에서 모든 직원의 이름(name)과 직급(posiotion)을 선택하는 쿼리를 작성해주세요.

 

이전 게시글에 정리한 SQL기초 문법에서 데이터를 조회하는 명령어는 SELECT...FROM...이었다. 따라서 다음과 같이 쿼리를 작성해 보았다.

SELECT name, position FROM employees;

 

정답 확인 :

2번

employees 테이블에서 중복 없이 모든 직급(position)을 선택하는 쿼리를 작성해주세요.

 

데이터를 중복 없이 조회하는 명령어는 아직 익히지 못했다.
구글의 도움을 받아보자. 검색어는 ‘SQL 중복 없이 조회’

 

 

 

검색 결과 DISTINCT라는 명령어가 보인다.

이제 W3Schools(W3Schools Online Web Tutorials)의 도움을 받아보자.

 

검색어는 ‘SQL DISTINCT’

다음과 같은 설명이 나온다.

 

 

 

즉, DISTINCT 명령어는 중복되는 데이터들 사이에서 구별되는 값(Distinct values)들만 추려내는 명령어다.

 

 

 

예를 들어 보자.
여기 내 데이터베이스가 있다.
Customers라는 테이블 속에는 총 91명의 고객의 레코드가 들어있다.

만약 고객들의 국가를 중복 없이 추려내고 싶다면 어떻게 해야 할까.
당연히 새로이 배운 SELECT DISTINCT...FROM... 명령어를 쓰면 가능할 것이다.

정답 :

SELECT DISTINCT Country FROM Customers;

결과 :

 

Country 필드에서 중복된 값을 제거한 결과물이 추려졌다.

DISTINCT 명령어를 충분히 이해했다면 다시 2번 문제로 돌아가자.
배운 것을 토대로 employees 테이블에서 중복 없이 모든 직급(position)을 선택할 수 있게 되었다.

 

정답 :

SELECT DISTINCT position FROM employees;

 

 

3번

employees 테이블에서 연봉(salary)이 40000과 60000 사이인 직원들을 선택하는 쿼리를 작성해주세요.

 

이전 게시글에 정리한 SQL기초 문법에서, 특정 조건에 맞는 데이터를 조회할 땐 WHERE을 사용했다.

 

정답 :

SELECT * FROM employees WHERE salary > 40000 AND salary < 60000;

 

정답 확인 :

 

 

그런데,
힌트를 확인 했을 때 BETWEEN 명령어를 사용하란 내용을 보게 되었다.

 

 

BETWEEN은 또 무엇일까? W3School의 도움을 받아보자.

 

BETWEEN은 선택한 값을 주어진 범위 내에서 조회해주는 명령어였다.
다만 시작점과 끝점이 포함되므로 내 코드의 결과값보다 더 큰 범위를 도출해낼 것이다.
출제자의 의도에 걸맞게 BETWEEN 명령어를 사용하여 코드를 다시 짜보도록 하겠다.

정답 :

SELECT * FROM employees WHERE salary BETWEEN 40000 AND 60000;

 

정답 확인 :

 

4번

employees 테이블에서 입사일(hire_date)이 2023년 1월 1일 이전인 모든 직원들을 선택하는 쿼리를 작성해주세요.

 

SQL에서 date 자료형에 비교 연산자를 쓸 수 있을까?
내심 안 될 거라고 생각했지만 일단은 써보았다.

 

정답 :

SELECT * FROM employees WHERE hire_date <= '2023-01-01';

 

정답 확인 :

 

놀랍게도 됐다. 얼른 챗gpt한테 가서 물어봤다.

“mysql의 date 자료형도 연산이 되던데 어디까지 가능한 거야?”라고.

 

 

챗gpt의 답변 :


MySQL에서 DATE 자료형은 날짜를 저장하고 날짜와 관련된 다양한 연산을 수행할 수 있습니다. 다음은 MySQL의 DATE 자료형을 사용할 때 가능한 주요 연산과 기능입니다:

1. 날짜 비교

  • 날짜를 비교하여 특정 날짜가 이전인지, 이후인지 확인할 수 있습니다. 
  • SELECT * FROM events WHERE event_date > '2024-01-01';

2. 날짜 추가 및 빼기

  • DATE_ADD()DATE_SUB() 함수를 사용하여 날짜에 일수, 월수, 연수를 더하거나 뺄 수 있습니다.
    SELECT DATE_ADD('2024-01-01', INTERVAL 10 DAY); -- 2024-01-11
    SELECT DATE_SUB('2024-01-01', INTERVAL 1 MONTH); -- 2023-12-01

3. 날짜 차이 계산

  • DATEDIFF() 함수를 사용하여 두 날짜 간의 차이를 일수로 계산할 수 있습니다.
    SELECT DATEDIFF('2024-01-01', '2023-12-25'); -- 7

4. 현재 날짜와 시간

  • CURDATE() 또는 CURRENT_DATE() 함수를 사용하여 현재 날짜를 얻을 수 있습니다.
    SELECT CURDATE(); -- 현재 날짜 반환

5. 날짜 형식 변경

  • DATE_FORMAT() 함수를 사용하여 날짜를 원하는 형식으로 변환할 수 있습니다.
    SELECT DATE_FORMAT('2024-01-01', '%Y-%m-%d'); -- '2024-01-01'

6. 날짜 범위 쿼리

  • 날짜를 기준으로 특정 범위의 데이터를 선택할 수 있습니다.
    SELECT * FROM sales WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31';

7. 기타 함수

  • YEAR(), MONTH(), DAY(), WEEK(), QUARTER() 등의 함수를 사용하여 날짜의 특정 부분을 추출할 수 있습니다.
    SELECT YEAR(event_date), MONTH(event_date) FROM events;

이와 같이 MySQL의 DATE 자료형은 다양한 날짜 연산을 지원하며, 날짜를 효과적으로 관리하고 쿼리할 수 있는 기능을 제공합니다. 더 궁금한 점이나 특정 기능에 대해 알고 싶으신 것이 있으면 말씀해 주세요!


하루를 되돌아 보며

배운 것을 바탕으로 문제를 푸는 게 꽤 재밌었고, SQL이 얼마나 강력한 도구인지 실감해보는 하루였다.

'개발일지 > SQL' 카테고리의 다른 글

SQL 문법 다지기(5)  (4) 2024.10.07
SQL 문법 다지기(4)  (0) 2024.10.04
SQL 문법 다지기(3)  (1) 2024.10.03
SQL 문법 다지기(2)  (5) 2024.10.02
SQL 기초  (3) 2024.09.30

댓글