상세 컨텐츠

본문 제목

MY SQL - SQL 실전 문제 ( 1 )

경험 리뷰/한국경제 with Tossbank

by shok11 2024. 7. 12. 17:26

본문

728x90
반응형



0. 실전 문제 풀어보기

 

강사님께서 문제 20개를 만들어 주셔서 풀어보고 풀이 진행할게요!

많이 부족하지만 열심히!

 

 


 

 

01. SELECT 조건 고객포인트 테이블의 모든 필드를 검색한다.

SELECT * 
FROM  TB_POINT;

 

02. SELECT 조건 고객포인트 테이블에서 고객코드, 포인트내용, 포인트를 검색한다. 

SELECT CUSTOMER_CD, POINT_MEMO, POINT
FROM   TB_POINT;

 

03. SELECT 조건  고객포인트 테이블에서 고객코드, 포인트내용, 포인트 필드 제목을 한글로 출력한다. 

SELECT CUSTOMER_CD AS "고객코드", 
       POINT_MEMO AS "포인트 내용",
       POINT AS "포인트"
FROM   TB_POINT;

 

04. WHERE 조건 고객관리 테이블에서 누적포인트가 10,000 미만인 데이터의 고객코드, 고객명, 이메일, 누적포인트 필드를 검색한다.

SELECT CUSTOMER_CD, CUSTOMER_NM, EMAIL, TOTAL_POINT
FROM   TB_CUSTOMER
WHERE  TOTAL_POINT < 10000;

 

05. WHERE-AND 조건 고객포인트 테이블에서 고객코드가 ‘2017053’이면서 일련번호가 2인 데이터의 고객코드, 일련번호, 포인트 필드를 검색한다.

SELECT CUSTOMER_CD,
       SEQ_NO,
       POINT
FROM   TB_POINT
WHERE  CUSTOMER_CD = '2017053'
AND    SEQ_NO = 2;

 

06. WHERE-OR 성적 테이블에서 반코드가 ‘A’ 또는 ‘B’이거나 국어, 영어, 수학 점수가 모두 80점 이상인 학생 필드를 검색한다.

UPDATE TB_GRADE
SET    TOT = KOR + ENG + MAT,
       AVG = ROUND((KOR + ENG + MAT) / 3,1);
SELECT * FROM TB_GRADE;

SELECT *
FROM   TB_GRADE
WHERE  (CLASS_CD = 'A' OR  CLASS_CD = 'B') OR 
        (KOR >= 80 AND ENG >= 80 AND MAT >= 80);

 

07. WHERE BETWEEN 조건 고객포인트 테이블에서 등록일시가 2018년 내에 있고, 포인트가 10,000에서 50,000 포인트 범위의 데이터를 검색한다.

SELECT *
FROM   TB_POINT
WHERE  REG_DTTM BETWEEN '20180101000000' AND '20181231235959'
AND    POINT BETWEEN 10000 AND 50000;

 

08. 비교연산자 고객 테이블에서 누적포인트가 20,000 이상인 1980년대 남성 고객의 고객코드, 고객명, 성별, 생년월일, 누적포인트를 검색한다.

SELECT CUSTOMER_CD,
       CUSTOMER_NM,
       MW_FLG,
       BIRTH_DAY,
       TOTAL_POINT
FROM   TB_CUSTOMER
WHERE  TOTAL_POINT >= 20000
AND    BIRTH_DAY >= '19800101' AND BIRTH_DAY <= '19891231'
AND    MW_FLG = 'M';

 

09. LIKE 고객 테이블에서 남성이면서 생년월일 중 월이 5, 6, 7월인 고객의 고객코드, 고객명, 성별, 생년월일, 누적포인트를 검색한다.

SELECT CUSTOMER_CD,
       CUSTOMER_NM,
       MW_FLG,
       BIRTH_DAY,
       TOTAL_POINT
FROM   TB_CUSTOMER
WHERE  MW_FLG = 'M'
AND    (BIRTH_DAY LIKE '____05__'
OR      BIRTH_DAY LIKE '____06__'
OR      BIRTH_DAY LIKE '____07__');

 

10. LIKE 고객 테이블에서 고객코드가 ‘2017’로 시작하면서 남성인 고객 또는 고객코드가 ‘2019’로 시작하면서 여성인 고객을 구하고, 그 중 누적포인트가 30000 이하인 데이터를 검색한다.

SELECT CUSTOMER_CD,
       CUSTOMER_NM,
       MW_FLG,
       BIRTH_DAY,
       TOTAL_POINT
FROM   TB_CUSTOMER
WHERE  ((CUSTOMER_CD LIKE '2017%'
AND      MW_FLG = 'M')
OR      (CUSTOMER_CD LIKE '2019%'
AND      MW_FLG = 'W'))
AND    TOTAL_POINT <= 30000;

 

11. IN 연산자 품목정보 테이블에서 품목코드가 'S01’, ‘S04’, ‘S06’, ‘S10’인 데이터를 검색한다.

SELECT * 
FROM   TB_ITEM_INFO
WHERE  ITEM_CD IN ('S01','S04','S06','S10');

 

12. IN 연산자 고객포인트 테이블에서 고객코드가 ‘2017042’ 또는 ‘2018087’ 또는 '2019095' 이면서 포인트내용에 ‘구매’ 문자가 포함된 데이터를 검색한다.

SELECT * 
FROM   TB_POINT
WHERE  CUSTOMER_CD IN ('2017042','2018087','2019095')
AND    POINT_MEMO LIKE '%구매%';

 

13. ORDER BY 고객포인트 테이블에서 등록일이 '2019'년이고 포인트내용에 '구매'가 포함된 데이터를 포인트가 큰 순서대로 검색한다.

SELECT *
FROM   TB_POINT
WHERE  REG_DTTM LIKE '2019%'
AND    POINT_MEMO LIKE '%구매%'
ORDER  BY POINT DESC;

 

14. ORDER BY성적 테이블에서 ‘B’반의 국어, 영어, 수학 점수의 합계가 높은 순으로 검색한다.

UPDATE TB_GRADE
SET    TOT = KOR + ENG + MAT,
       AVG = ROUND((KOR + ENG + MAT) / 3,1);
SELECT * FROM TB_GRADE;

SELECT KOR, ENG, MAT, TOT AS 합계
FROM   TB_GRADE
WHERE  CLASS_CD = 'B'
ORDER  BY KOR + ENG + MAT DESC;

 

15. GROUP BY 판매 테이블에서 판매일이 ‘20190802’ 또는 ‘20190803’을 대상으로 판매일과 상품명으로 그룹화해 총판매수를 구하고 판매일과 상품명은 가나다 순으로 보인다.

SELECT SALES_DT,
       PRODUCT_NM,
       SUM(SALES_COUNT) AS "총판매수"
FROM   TB_SALES
WHERE  SALES_DT IN ('20190802','20190803')
GROUP  BY SALES_DT,
          PRODUCT_NM
ORDER  BY SALES_DT,
          PRODUCT_NM;

 

16. DISTINCT 판매 테이블에서 '20190801'에서 ‘20190802’ 기간에 판매한 상품명을 가나다 순으로 중복없이 검색한다.

SELECT DISTINCT PRODUCT_NM
FROM   TB_SALES
WHERE  SALES_DT BETWEEN '20190801' AND '20190802'
ORDER  BY PRODUCT_NM;

 

17. JOIN 고객 테이블의 고객코드가 2019069 데이터를 고객포인트 테이블과 연관 검색하여 고객 테이블에서는 고객코드, 고객명, 성별을 검색한 후 고객포인트 테이블에서는 일련번호, 포인트내용, 포인트를 검색한다.

SELECT CU.CUSTOMER_CD,
       CU.CUSTOMER_NM,
       CU.MW_FLG,
       PT.SEQ_NO,
       PT.POINT_MEMO,
       PT.POINT
FROM   TB_CUSTOMER CU,
       TB_POINT PT
WHERE  CU.CUSTOMER_CD = '2019069'
AND    CU.CUSTOMER_CD = PT.CUSTOMER_CD;

SELECT CU.CUSTOMER_CD,
       CU.CUSTOMER_NM,
       CU.MW_FLG,
       PT.SEQ_NO,
       PT.POINT_MEMO,
       PT.POINT
FROM   TB_CUSTOMER CU
JOIN   TB_POINT PT
ON     CU.CUSTOMER_CD = PT.CUSTOMER_CD
WHERE  CU.CUSTOMER_CD = '2019069';

 

18. CASE 고객 테이블에서 누적포인트가 1,000에서 20,000미만이면 “실버”, 20,000에서 50,000미만 이면 “골드”, 50,000이상이면 “VIP” 등급을 보이고 위 조건에 해당 없으면 “일반” 등급을 보인다.

SELECT CUSTOMER_CD,
       CUSTOMER_NM,
       TOTAL_POINT,
       CASE WHEN TOTAL_POINT BETWEEN 1000 AND 19999 THEN '실버'
            WHEN TOTAL_POINT BETWEEN 20000 AND 49999 THEN '골드'
            WHEN TOTAL_POINT >= 50000 THEN 'VIP'
            ELSE '일반'
       END AS "고객 등급"
FROM   TB_CUSTOMER;

 

19. ROWNUM 성적 테이블에서 반코드가 ‘A’ 또는 ‘C’반의 학생을 대상으로 모든 필드와 순차적인 행번호를 검색한다. PDF에서 TOT AVG는 무시한다. 

SELECT @ROWNUM:=@ROWNUM+1 AS ROWNUM,
       GD.*
FROM   TB_GRADE GD, (SELECT @rownum:=0) TMP
WHERE  GD.CLASS_CD IN ('A','C');

 

20. NULL (답지랑 다를 수 있음) 고객 테이블에서 고객코드가 ‘2018’ 또는 ‘2019’로 시작하고, 생일이 1990년 또는 2000년 대인 고객 중 전화번호가 설정되어 있는 데이터를 검색한다. AND 조건 HINT : TRIM(IFNULL(PHONE_NUMBER,'')) <> ''

SELECT *
FROM   TB_CUSTOMER
WHERE  (CUSTOMER_CD LIKE '2018%'
OR      CUSTOMER_CD LIKE '2019%')
AND    (BIRTH_DAY LIKE '199%'
OR      BIRTH_DAY LIKE '200%')
AND    TRIM(IFNULL(PHONE_NUMBER,'')) <> ''
;

 

 


 

쉽지 않다.

 

2024.07.12 - [MLOps 과정 : 한국경제 with Toss bank/MY SQL] - MY SQL - SQL 기초 문법 ( 2 )

 

MY SQL - SQL 기초 문법 ( 2 )

1. SQL Syntax SQL 데이터베이스에서 필요한 형태의 데이터를 추출 또는 가공하기 위해 사용하는 언어- SELECT : 칼럼, 계산 값- FROM : 테이블 명- WHERE : 조건- GROUP- BY : 그룹화- HAVING : 그룹화에 사용되는

shok11.tistory.com

 

다시 화이팅!

728x90
반응형

관련글 더보기