[MySQL] programmers SQL 고득점 Kit: SELECT

Jnary·2024년 1월 31일
0

Database

목록 보기
11/14
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/parts/17042

Lv 1. 평균 일일 대여 요금 구하기

  • CAR_RENTAL_COMPANY_CAR 테이블
    • CAR_ID
    • CAR_TYPE : 세단, SUV, 승합차, 트럭, 리무진
    • DAILY_FEE
    • OPTIONS : 주차감지센터, 스마트키, 네비게이션, 통풍시트, 결선시트, 후방카메라, 가죽시트 (콤마로 구분하여 여러개 가능)
  • 문제
    • CAR_TYPE = ‘SUV’ 평균 DAILY_FEE 출력
    • 소수 첫 번째 자리에서 반올림
      SELECT ROUND('수치값', '반올림 자릿수')
           , ROUND(123.567, 2) //123.570
    • 칼럼명 : AVERAGE_FEE → SELECT에서 ‘as’ 사용하기
SELECT ROUND(AVG(daily_fee), 0) as AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR as C
WHERE C.car_type = 'SUV'
SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV'

💡 배운 점
1. SELECT … as ~ : 칼럼명 변경
2. ROUND : 반올림

Lv 1. 조건에 맞는 도서 리스트 출력하기

  • BOOK 테이블
    • BOOK_ID
    • CATEGORY : 경제, 인문, 소설, 생활, 기술
    • AUTHOR_ID
    • PRICE
    • PUBLISHED_DATE : DATE
  • 문제
    • 2021년에 출판된 ‘인문’ 카테고리에 속하는 도서 리스트
      • 2021년 출판 : String 비교 연산 제공 like
        Select name
        from professor
        where name like '%j_';
        //_ : 길이가 1인 임의 스트링(한 문자)
        //% : 길이에 무관한 임의 스트링
      • 인문 카테고리
    • BOOK_ID, PUBLISHED_DATE 출력
      • DATE 포맷 수정
        DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d')
    • 출판일 오름차순 정렬
      • ORDER_BY (내림차순은 desc 추가)
  • 내 제출
    SELECT BOOK_ID, PUBLISHED_DATE
    FROM BOOK
    WHERE PUBLISHED_DATE like '2021%' and CATEGORY = '인문'
    ORDER BY PUBLISHED_DATE
  • 정답
    SELECT BOOK_ID, 
    DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
    FROM BOOK
    WHERE CATEGORY = '인문' AND YEAR(PUBLISHED_DATE) = 2021
    ORDER BY PUBLISHED_DATE;

💡 배운 점
1. DATE 포맷 수정 : DATEFORMAT(…, ‘%Y-%m-%d’)
2. 정렬 : ORDER_BY
3. String 비교 연산 : like ‘%

4. DATE 자료형 특정 부분 추출 : YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND(), TIME()

Lv 1. 12세 이하인 여자 환자 목록 출력하기

  • PATIENT 테이블
    • PT_NO 환자 번호
    • PT_NAME 환자 이름
    • GEND_CD 성별 코드
    • AGE 나이
    • TLNO 전화번호, NULL 가능
  • 문제
    • 12세 이하
      WHERE AGE <= 12
    • 여자환자
      WHERE GEND_CD = 'W'
    • 환자 이름, 환자번호, 성별코드, 나이, 전화번호 조회
      SELECT PT_NAME, PT_NO, GEND_CD, AGE, TLNO
    • 전화번호 없으면 NONE 출력
      SELECT CASE 
                 WHEN TLNO IS NULL THEN 'NONE'
                 ELSE TLNO
             END AS TLNO
      SELECT IFNULL(TLNO, 'NONE') AS TLNO
    • 나이 기준 내림차순
      ORDER BY AGE desc
    • 나이 같다면 환자이름 기준 오름차순
      ORDER BY AGE desc, PT_NAME
  • 정답
    SELECT PT_NAME, PT_NO, GEND_CD, AGE,
    		   IFNULL(TLNO, 'NONE') as TLNO
    FROM PATIENT
    WHERE AGE <= 12 and GEND_CD = 'W'
    ORDER BY AGE desc, PT_NAME

💡 배운 점
1. IFNULL : NULL값 대체
2. ORDER BY A, B : A가 같다면 B 기준

Lv 2. 3월에 태어난 여성 회원 목록 출력하기

  • MEMBER_PROFILE 테이블
    • MEMBER_ID
    • MEMBER_NAME
    • TLNO
    • GENDER
    • DATE_OF_BIRTH : DATE
  • 문제
    • 생일이 3월
      WHERE MONTH(DATE_OF_BIRTH) = 3
    • 여성 회원
      WHERE GENDER = 'W'
    • 회원 ID, 이름, 성별, 생년월일 출력
      SELECT MEMBER_ID, MEMBER_NAME, GENDER, DAT_FORMAT(...)
    • 전화번호 NULL인 경우 제외
      WHERE TLNO != 'NULL'
    • 회원 ID 기준 오름차순 정렬
      ORDER BY MEMBER_ID
  • 정답
    SELECT MEMBER_ID, MEMBER_NAME, GENDER,
            DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') as DATE_OF_BIRTH
    FROM MEMBER_PROFILE
    WHERE MONTH(DATE_OF_BIRTH) = 3
    			and GENDER = 'W'
    			and TLNO != 'NULL'   // TLNO IS NOT NULL
    ORDER BY MEMBER_ID

💡 배운 점
IS NOT NULL, IS NULL : NULL 여부 확인

Lv 1. 인기있는 아이스크림

  • FIRST_HALF 아이스크림 가게의 상반기 주문 정보 테이블
    • SHIPMENT_ID 출하 번호
    • FLAVOR 아이스크림 맛
    • TOTAL_ORDER 총주문량
  • 문제
    • 총주문량 기준 내림차순 정렬
    • 총주문량 같다면 출하 번호 기준으로 오름차순 정렬
    • 아이스크림 맛 출력
  • 정답
    SELECT FLAVOR
    FROM FIRST_HALF
    ORDER BY TOTAL_ORDER desc, SHIPMENT_ID

Lv 1. 흉부외과 또는 일반외과 의사 목록 출력하기

  • DOCTOR 종합병원에 속한 의사 정보 테이블
    • DR_NAME 의사이름
    • DR_ID 의사ID
    • LCNS_NO 면허번호
    • HIRE_YMD 고용일자, DATE
    • MCDP_CD 진료과코드, NULL
    • TLNO 전화번호, NULL
  • 문제
    • 진료과코드 = ‘CS’ or ‘GS’
    • 의사이름, 의사ID, 진료과코드, 고용일자 출력
    • 고용일자 기준 내림차순 정렬, 같다면 이름 기준 오름차순 정렬
  • 정답
    SELECT DR_NAME, DR_ID, MCDP_CD,
           DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') as HIRE_YMD
    FROM DOCTOR
    WHERE MCDP_CD = 'CS' or MCDP_CD = 'GS'
    ORDER BY HIRE_YMD desc, DR_NAME

Lv 1. 조건에 부합하는 중고거래 댓글 조회하기

  • USED_GOODS_BOARD 중고거래 게시판 정보 테이블
    • BOARD_ID 게시글 ID
    • WRITER_ID 작성자 ID
    • TITLE 게시글 제목
    • CONTENTS 게시글 내용
    • PRICE 가격
    • CREATED_DATE 작성일, DATE
    • STATUS 거래상태
    • VIEWS 조회수
  • USED_GOODS_REPLY 중고거래 게시판 첨부파일 정보 테이블
    • REPLY_ID 댓글 ID
    • BOARD_ID 게시글 ID
    • WRITER_ID 작성자 ID
    • CONTENTS 댓글 내용, NULL
    • CREATED_DATE 작성일, DATE
  • 문제
    • 2022년 10월에 작성
    • 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일 출력
    • 댓글 작성일 기준 오름차순 정렬, 같다면 게시글 제목 기준 오름차순 정렬
  • 오답
    SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS, DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') as CREATED_DATE
    FROM USED_GOODS_BOARD as B, USED_GOODS_REPLY as R
    WHERE YEAR(R.CREATED_DATE) = 2022 and MONTH(R.CREATED_DATE) = 10
    ORDER BY R.CREATED_DATE, B.TITLE
    • FROM A, B : 카테시안 곱을 의미
      Select *
      from professor, teaches;
    • INNER JOIN 필요
      FROM 
          USED_GOODS_BOARD as B
      INNER JOIN 
          USED_GOODS_REPLY as R ON B.BOARD_ID = R.BOARD_ID
    • 2022년 10월이 게시글 작성 기준인지? 댓글 작성 기준인지? 모호 → 모호할 땐 가장 첫 번째 나오는 단어 수식하도록

💡 배운 점
INNER JOIN .. ON ~ : 카테시안 곱이 되지 않게 주의!

Lv 1. 과일로 만든 아이스크림 고르기

  • FIRST_HALF 상반기 주문 정보 테이블
    • SHIPMENT_ID 출하 번호
    • FLAVOR 아이스크림 맛, pk
    • TOTAL_ORDER 총주문량
  • ICECREAM_INFO 성분에 대한 정보를 담은 테이블
    • FLAVOR 아이스크림 맛, pk(FIRST_HALF 테이블 FLAVOR 의 외래키)
    • INGREDIENT_TYPE 성분 : sugar_based, fruit_based
  • 문제
    • 총주문량 > 3000
    • INGREDIENT_TYPE = ‘fruit_based’
    • 아이스크림 맛 출력
    • 총주문량 기준 내림차순 정렬
  • 정답
    SELECT H.FLAVOR
    FROM FIRST_HALF as H
    INNER JOIN ICECREAM_INFO as I on H.FLAVOR = I.FLAVOR
    WHERE H.TOTAL_ORDER > 3000
          and I.INGREDIENT_TYPE = 'fruit_based'
    ORDER BY H.TOTAL_ORDER desc

Lv 4. 서울에 위치한 식당 목록 출력하기

  • REST_INFO 식당 정보 테이블
    • REST_ID 식당 ID
    • REST_NAME 식당 이름
    • FOOD_TYPE 음식 종류, NULL
    • VIEWS 조회수, NULL
    • FAVORITES 즐겨찾기 수, NULL
    • PARKING_LOT 주차장 유무, NULL
    • ADDRESS 주소, NULL
    • TEL 전화번호, NULL
  • REST_REVIEW 식당 리뷰 정보 테이블
    • REVIEW_ID 리뷰 ID
    • REST_ID 식당 ID, NULL
    • MEMBER_ID 회원 ID, NULL
    • REVIEW_SCORE 점수, NULL
    • REVIEW_TEXT 리뷰 텍스트, NULL
    • REVIEW_DATE 리뷰 작성일, DATE, NULL
  • 문제
    • REST_INFO.ADDRESS = ‘서울%’
      WHERE I.ADDRESS like '서울%'
    • 식당ID, 식당 이름, 음식종류, 즐겨찾기수, 주소, 리뷰평균점수 출력
      SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE,
      			 I.FAVORITES, I.ADDRESS, AVG(R.REVIEW_SCORE)
    • 리뷰 평균점수 : 소수점 세번째 자리에서 반올림
      SELECT ROUND(..., 2)
    • 평균점수 기준 내림차순 정렬, 같다면 즐겨찾기 순 기준 내림차순 정렬
  • 오답
    SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS,
           ROUND(AVG(R.REVIEW_SCORE), 2) as SCORE
    FROM REST_INFO as I
    INNER JOIN REST_REVIEW as R on I.REST_ID = R.REST_ID
    WHERE I.ADDRESS like '서울%'
    ORDER BY ROUND(AVG(R.REVIEW_SCORE), 2) desc, I.FAVORITES desc
  • 정답
    SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS,
           ROUND(AVG(R.REVIEW_SCORE), 2) as SCORE
    FROM REST_INFO as I
    INNER JOIN REST_REVIEW as R on I.REST_ID = R.REST_ID
    GROUP BY I.REST_ID
    HAVING I.ADDRESS like '서울%'
    ORDER BY SCORE desc, I.FAVORITES desc
    SELECT REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS,
           ROUND(AVG(REVIEW_SCORE), 2) as SCORE
    FROM REST_INFO
    NATURAL JOIN REST_REVIEW
    WHERE ADDRESS like '서울%'
    GROUP BY REST_ID
    ORDER BY SCORE desc, FAVORITES desc
  • GPT 두 SQL 쿼리는 비슷한 결과를 반환하기 위해 작성되었지만, 중요한 차이점이 있습니다. 이 차이점들은 쿼리의 실행 방식과 결과에 영향을 미칩니다.

    첫 번째 쿼리:

    SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS,
           ROUND(AVG(R.REVIEW_SCORE), 2) as SCORE
    FROM REST_INFO as I
    INNER JOIN REST_REVIEW as R on I.REST_ID = R.REST_ID
    WHERE I.ADDRESS like '서울%'
    ORDER BY ROUND(AVG(R.REVIEW_SCORE), 2) desc, I.FAVORITES desc
    
    1. WHERE 절 사용: WHERE 절이 JOIN 연산 후에 적용됩니다. 즉, 먼저 REST_INFOREST_REVIEWJOIN 한 후, 그 결과에서 ADDRESS가 '서울%'인 레코드를 필터링합니다.

    2. 그룹화 없음: 이 쿼리에는 GROUP BY 절이 없습니다. 이는 SQL 표준에 따르면 잘못된 접근 방식일 수 있으며, 일부 SQL 시스템에서는 오류를 일으킬 수 있습니다. GROUP BY 절 없이 집계 함수(AVG)를 사용하고 있으며, 이는 일반적으로 전체 결과 세트에 대한 단일 평균을 계산합니다.

      두 번째 쿼리:

      SELECT A.REST_ID, B.REST_NAME, B.FOOD_TYPE, B.FAVORITES, B.ADDRESS, ROUND(AVG(A.REVIEW_SCORE),2) AS SCORE
      FROM REST_REVIEW A
      JOIN REST_INFO B ON A.REST_ID = B.REST_ID
      GROUP BY A.REST_ID
      HAVING B.ADDRESS LIKE '서울%'
      ORDER BY SCORE DESC, B.FAVORITES DESC
      
    3. GROUP BY 절 사용: 이 쿼리는 GROUP BY 절을 사용하여 REST_REVIEW 테이블의 REST_ID 별로 그룹화합니다. 이는 각 식당에 대한 평균 점수를 계산하는 올바른 방법입니다.

    4. HAVING 절 사용: HAVING 절은 그룹화 후에 필터링을 적용합니다. REST_INFOADDRESS 필터링은 그룹화된 데이터에 적용됩니다.

      주요 차이점:

    • 그룹화의 유무와 위치: 첫 번째 쿼리는 GROUP BY 절을 사용하지 않고 있으며, 이는 기술적으로 문제가 될 수 있습니다. 두 번째 쿼리는 올바르게 GROUP BY를 사용하여 각 식당에 대한 리뷰 점수의 평균을 계산합니다.

    • 필터링의 위치: 첫 번째 쿼리는 WHERE 절을 사용하여 조인 전에 필터링을 적용합니다. 두 번째 쿼리는 HAVING 절을 사용하여 그룹화 후에 필터링을 적용합니다.

      일반적으로, 집계 함수를 사용할 때는 GROUP BY 절을 사용하는 것이 적절하며, 이를 통해 그룹별로 정확한 집계 결과를 얻을 수 있습니다. 첫 번째 쿼리의 경우, 특정 SQL 시스템에서는 오류를 발생시킬 수 있거나 예상치 못한 결과를 반환할 수 있습니다.


💡 배운 점
1. GROUP BY : JOIN 테이블에 대한 집계연산 시에는 HAVING으로 필터링
2. WHERE : 필터링 후에 JOIN 연산 진행됨.
3. SELECT에서 as로 명명한 것 ORDER BY 절 등에서 재사용 가능

Lv 1. 강원도에 위치한 생산공장 목록 출력하기

  • FOOD_FACTORY 식품공장 정보 테이블
    • FACTORY_ID 공장 ID
    • FACTORY_NAME 공장 이름
    • ADDRESS 주소
    • TLNO 전화번호, NULL
  • 문제
    • 강원도에 위치
      WHERE ADDRESS like '강원도%'
    • 공장ID, 공장 이름, 주소 출력
      SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
    • 공장ID 기준 오름차순 정렬
      ORDER BY FACTORY_ID

Lv 2. 재구매가 일어난 상품과 회원 리스트 구하기

  • ONLINE_SALE 테이블
    • ONLINE_SALE_ID 온라인 상품 판매 ID
    • USER_ID 회원 ID
    • PRODUCT_ID 상품 ID
    • SALES_AMOUNT 판매량
    • SALES_DATE 판매일
    • pk : {날짜, 회원ID, 상품ID}
  • 문제
    • 동일한 회원이 동일한 상품을 재구매한 데이터 구하기
      GROUP BY USER_ID, PRODUCT_ID
      HAVING count(*) >= 2
    • 재구매한 USER_ID, PRODUCT_ID 출력
      SELECT USER_ID, PRODUCT_ID
    • USER_ID 기준 오름차순 정렬 → 같다면 PRODUCT_ID 기준 내림차순 정렬
      ORDER BY USER_ID, PRODUCT_ID desc
  • 정답
    SELECT USER_ID, PRODUCT_ID
    FROM ONLINE_SALE
    GROUP BY USER_ID, PRODUCT_ID
    HAVING count(*) >= 2
    ORDER BY USER_ID, PRODUCT_ID desc

💡 배운 점
그룹별로 HAVING 조건을 만족하는 것만 SELECT

Lv 1. 모든 레코드 조회하기

  • ANIMAL_INS 동물 보호소에 들어온 동물 정보 테이블
    • ANIMAL_ID 동물의 아이디
    • ANIMAL_TYPE 생물 종
    • DATETIME 보호 시작일, DATETIME
    • INTAKE_CONDITION 보호 시작 시 상태
    • NAME 이름, NULL
    • SEX_UPON_INTAKE 성별 및 중성화 여부
  • 문제
    • ANIMAL_ID 순으로 조회
  • 정답
    SELECT *
    FROM ANIMAL_INS
    ORDER BY ANIMAL_ID

Lv 4. 오프라인/온라인 판매 데이터 통합하기

  • ONLINE_SALE 온라인 상품 판매 정보 테이블
    • ONLINE_SALE_ID 온라인 상품 판매 ID
    • USER_ID 회원 ID
    • PRODUCT_ID 상품 ID
    • SALES_AMOUNT 판매량
    • SALES_DATE 판매일, DATE
    • pk : {날짜, 회원ID, 상품ID}
  • OFFLINE_SALE 오프라인 상품 판매 정보 테이블
    • OFFLINE_SALE_ID 오프라인 상품 판매 ID
    • PRODUCT_ID 상품 ID
    • SALES_AMOUNT 판매량
    • SALES_DATE 판매일, DATE
    • pk : {날짜, 상품ID}
  • 문제
    • 2022년 3월
      WHERE SALES_DATE like '2022-03%'
    • 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량 출력
      • join이 아니다. 가로로 합치는 것 X
      • 세로로 합치기 → union 활용
    • 오프라인 유저ID : NULL
      SELECT IFNULL(USER_ID, "NULL") as USER_ID
    • 판매일 기준 오름차순 정렬 → 같다면 상품ID 기준 오름차순 → 유저ID 기준 오름차순 정렬
      ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
  • 오답
    SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE,
            PRODUCT_ID,
            IFNULL(USER_ID, "NULL") as USER_ID,
            SALES_AMOUNT
    FROM (SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
          FROM ONLINE_SALE
          union all
          SELECT SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT
          FROM OFFLINE_SALE
         ) as SUB
    WHERE SALES_DATE like '2022-03%'
    ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
  • 정답
    SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE,
            PRODUCT_ID, USER_ID,
            SALES_AMOUNT
    FROM (SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
          FROM ONLINE_SALE
          union all
          SELECT SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT
          FROM OFFLINE_SALE
         ) as SUB
    WHERE SALES_DATE like '2022-03%'
    ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
    • “NULL”이 아닌 NULL 임을 유의!
    • 이 문제 절대 잊지 않으리…
    • 해당 문제에선 union 도 가능

💡 배운 점
1. "NULL” ≠ NULL
2. JOIN이 아닌 UNION도 있다! (vstack 같은 거)

Lv 1. 역순 정렬하기

  • ANIMAL_INS 동물 보호소에 들어온 동물 정보 테이블
    • ANIMAL_ID 동물의 아이디
    • ANIMAL_TYPE 생물 종
    • DATETIME 보호 시작일, DATETIME
    • INTAKE_CONDITION 보호 시작 시 상태
    • NAME 이름, NULL
    • SEX_UPON_INTAKE 성별 및 중성화 여부
  • 문제
    • ANIMAL_ID 역순으로 조회
  • 정답
    SELECT NAME, DATETIME
    FROM ANIMAL_INS
    ORDER BY ANIMAL_ID desc

Lv 1. 아픈 동물 찾기

  • 문제
    • 아픈 동물의 아이디, 이름 출력
      SELECT ANIMAL_ID, NAME
      WHERE INTAKE_CONDITION = "Sick"
    • 아이디 순서로 정렬
      ORDER BY ANIMAL_ID
  • 정답
    SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS
    WHERE INTAKE_CONDITION = "Sick"
    ORDER BY ANIMAL_ID

Lv 1. 어린 동물 찾기

  • 문제
    • 젊은 동물
      WHERE INTAKE_CONDITION != "AGED"
    • 아이디, 이름 출력
    • 아이디 순서로 정렬
  • 정답
    SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS
    WHERE INTAKE_CONDITION != "AGED"
    ORDER BY ANIMAL_ID

Lv 1. 동물의 아이디와 이름

  • 정답
    SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS
    ORDER BY ANIMAL_ID

Lv 1. 여러 기준으로 정렬하기

  • 정답
    SELECT ANIMAL_ID, NAME, DATETIME
    FROM ANIMAL_INS
    ORDER BY NAME, DATETIME desc

Lv 1. 상위 n개 레코드

  • 정답
    SELECT NAME
    FROM ANIMAL_INS
    ORDER BY DATETIME desc
    LIMIT 1

💡 배운 점
limit 3 offset 1 : 최고를 제외한 3인 검색

Lv 1. 조건에 맞는 회원수 구하기

  • USER_INFO 의류 쇼핑몰에 가입한 회원 정보 테이블
    • USER_ID 회원 ID
    • GENDER 성별, NULL, 0남자 1여자
    • AGE 나이, NULL
    • JOINED 가입일, DATE
  • 문제
    • 2021년에 가입
      WHERE JOINED like '2021%'
    • 나이가 20세 이상 29세 이하
      WHERE AGE >= 20 and AGE <= 29
    • 몇 명인지 출력
      SELECT count(*)
  • 정답
    SELECT count(*) as USERS
    FROM USER_INFO
    WHERE AGE >= 20 and AGE <= 29 and JOINED like '2021%'
profile
숭실대학교 컴퓨터학부 21

0개의 댓글