스터디일지/MYSQL

[2023.08.03] SQL 1주차 & 2주차

똥쟁이핑크 2023. 8. 3. 21:25

SQL이란?

  • 구조적 쿼리 언어
  • 관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어
  • 표 형식으로 저장한다.
  • 행과 열은 다양한 데이터 속성과 데이터 값 간의 다양한 관계를 나타낸다.

 

오늘 배운 내용 (1주차 & 2주차)

1주차

예시) order라는 테이블

order 테이블 내용
order 테이블의 필드명

  •  SELECT
    • 데이터를 선택해서 가져온다.
    • order 라는 테이블에서 모든(*) 데이터를 가져온다 라는 뜻이다. 가져오면 결과는 위에 첫 번째사진 처럼 나온다.
    • email데이터만 가져오고 싶으면 SELECT 문에 email을 적어준다.
# 기본 사용
SELECT * FROM order

# email 데이터 가져오기
SELECT email FROM order

email 데이터 가져오기

  • WHERE 
    • SELECT로 가져온 데이터에 조건을 걸어준다.
# 기본 
SELECT * FROM 테이블명
 WHERE 필드명 = '찾을 데이터 값'

# 사용 예시 1 - ORDER 테이블에서 2020-07-13 에 생성된것을 찾아라
SELECT * FROM orders o  
WHERE created_at BETWEEN '2020-07-13' AND '2020-07-14'

# 사용 예시 2 - ORDER 테이블에서 웹개발 종합반이면서 결제를 CARD인 결과 뽑기
SELECT * FROM orders o  
WHERE course_title = '웹개발 종합반' 
AND payment_method = 'CARD'

사용 예시 1 결과 일부분
사용 예시 2 결과 일부분

  • WHERE과 자주 쓰는 문법
    • != : 같지 않다라는 의미
    • BETWEEN :  범위를 지정할 때 사용한다.
    • IN : 포함 하고 싶을 때 사용한다.
    • LIKE : 패턴(문자열 규칙)을 건다. → '%' 을 사용한다.
      • 'a%' - a로 시작하는 모든 데이터 
      • '%a' - a로 끝나는 모든 데이터
      • '%a%' - a를 포함하는 모든 데이터 
      • 'a%o' - a로 시작해서 o로 끝나는 모든 데이터 
# 사용 예시 1 - ORDER 테이블에서 웹개발 종합반이 아니면서 CARD로 결제한 데이터 가져오기
SELECT * FROM orders o  
WHERE course_title != '웹개발 종합반' 
AND payment_method = 'CARD'

# 사용 예시 2 - ORDER 테이블에서 25일부터 29일까지의 주문데이터를 가져오기
SELECT * FROM orders o  
WHERE created_at BETWEEN '2020-07-25' AND '2020-07-30'

# 사용 예시 3 - ORDER 테이블에서 1주차와 3주차 데이터 가져오기
SELECT * FROM checkins c 
WHERE week in (1, 3)

# 사용 예시 4 - ORDER 테이블에서 이메일이 yahoo.com으로 끝나는 데이터 가져오기
SELECT * FROM orders o 
WHERE email LIKE '%yahoo.com'

사용 예시 1 결과 일부분
사용 예시 2 결과 일부분
사용 예시 3 결과 일부분
사용 예시 4 결과 일부분

  • 유용한 문법
    • LIMIT - 일부 데이터 가져오기
    • DISTINCT - 중복데이터는 제외하고 가져오기
    • COUNT - 숫자 세기
# LIMIT 사용 예시 - 286개 데이터중에 6개만 가져오기
SELECT * FROM orders o 
LIMIT 6

# DISTINCT 사용 예시 - payment_method에서 중복제거한 데이터 가져오기
SELECT DISTINCT (payment_method) FROM orders o 

# COUNT 사용 예시 - ORDER 테이블의 데이터 개수 세기
SELECT COUNT(*) FROM orders o 

# DISTINCT와 COUNT 사용 예시 - USER 테이블에서 중복되지 않은 성씨 개수 세기 - 54개의 성씨가 있다.
SELECT COUNT(DISTINCT(name)) FROM users u

LIMIT 사용 예시 결과
DISTINCT 사용 예시 결과
DISTINCT와 COUNT의 사용 예시 결과

 

 

2주차

데이터베이스의 저장된 데이터를 의미있는 정보로 변환시켜야 한다.

  • GROUP BY 
    • 동일한 범주의 데이터를 묶는다.
    • 쿼리 실행 순서 - 1) FROM → 2) GROUP BY → 3) SELECT
    • MIN - 최솟값을 구한다.
    • MAX - 최대값을 구한다.
    • AVG - 평균을 구한다.
    • SUM - 합계를 구한다.
# 사용 예시 1 - 성씨별로 몇 명인지 셀 수 있다.
SELECT name, COUNT(*)  FROM users u 
GROUP BY name

# 사용 예시 2 - likes의 최솟값을 구할 수 있다. MIN 대신 MAX, AVG, SUM 을 쓸 수 있다.
SELECT week, MIN(likes)  FROM checkins c 
GROUP BY week

사용 예시 1 결과

 

사용 예시 2 결과

  • ORDER BY
    • 데이터를 정렬한다.
    • 기본 값은 오름차순
    • 쿼리 실행 순서 - 1) FROM → 2) GROUP BY → 3) SELECT → 4) ORDER BY
# 사용 예시 1 - 성씨의 COUNT를 오름차순으로 정렬
SELECT name, COUNT(*)  FROM users u 
GROUP BY name 
ORDER BY COUNT(*) 

# 사용 예시 2 - 성씨의 COUNT를 내림차순으로 정렬
SELECT name, COUNT(*)  FROM users u 
GROUP BY name 
ORDER BY COUNT(*) DESC

사용 예시 1 결과
사용 예시 2 결과

 

  • WHERE, GROUP BY, ORDER BY  같이 사용해보기
    • WHERE로 조건을 하나 추가해준다.
    • 쿼리 실행 순서 - 1) FROM → 2) WHERE → 3) GROUP BY → 4) SELECT 
# 사용 예시 1
SELECT name, COUNT(*)  FROM users u 
WHERE name = '최**'
GROUP BY name

# 사용 예시 2
SELECT * FROM users u 
ORDER BY email

사용 예시 1 결과
사용 예시 2 결과

 

  • 유용한 문법
    • Alias - 별칭 
    • orders뒤에 o가 Alias가 되어 WHERE 절에서 o.course_title로 쓸 수 있다.
    • COUNT뒤에 as를 붙이고 별칭 cnt를 붙여 주면 출력시 COUNT 가 아닌 cnt로 나온다
# 사용 예시 - orders o의 o는 alias, as의 cnt도 alias
SELECT payment_method, COUNT(*) as cnt FROM orders o 
WHERE o.course_title  = '웹개발 종합반'
GROUP BY payment_method

사용 예시 결과