백엔드/DB

[MySQL] MySQL 퀴즈

tero1115 2023. 6. 12. 01:53

전화번호가 6이 첫번째로 나오는위치 출력(INSTR)

-- TEL 컬럼 사용해서 GRADE가 2와 4인 학생,
-- 전화번호가 6이 첫번째로 나오는위치 출력
SELECT NAME 
	 , GRADE
     , TEL
     , INSTR(TEL,'6') AS '6'
  FROM STUDENT
  WHERE GRADE IN ('2','4');


전화번호중 앞자리만 출력(SUBSTR, INSTR)

SELECT NAME
	 , TEL
     , SUBSTR(TEL,INSTR(TEL,')')+1,(INSTR(TEL,'-')-1-INSTR(TEL,')')))
     FROM STUDENT
     WHERE DEPTNO1 = 101;


급여에 따라 GRADE 설정(CASE WHEN THEN)

SELECT NAME
		 , PAY
     , CASE WHEN PAY BETWEEN 1 AND 300 THEN 'GRADE1'
						WHEN PAY BETWEEN 301 AND 400 THEN 'GRADE2'
            WHEN PAY BETWEEN 401 AND 500 THEN 'GRADE3'
            WHEN PAY > 500 THEN 'GRADE4'
		END GRADE
  FROM PROFESSOR
  ORDER BY PAY DESC;


직업의 세번째글자에 속하는 알파벳을 ‘?’로 변경(REPLACE)

SELECT ENAME
	 , JOB
     , REPLACE(JOB,SUBSTR(JOB,3,1),'?')
  FROM EMP
  WHERE DEPTNO = 20;


대출액을 대출코드와 대출지점별로 누적합계(SUM() OVER())

SELECT L_CODE AS "대출종목코드"
	 , L_STORE AS "대출지점"
     , L_DATE AS "대출일자"
     , L_QTY AS "대출건수"
     , L_TOTAL AS "대출액"
     , SUM(L_TOTAL) OVER(PARTITION BY L_CODE, L_STORE ORDER BY L_DATE) AS "누적대출금액"
  FROM LOAN;


EMP테이블에서 특정 컬러 가져와서 새로운 테이블 생성(CREATE TABLE)

CREATE TABLE NEW_EMP2
AS
SELECT EMPNO, ENAME, HIREDATE
  FROM EMP;

→ 특정 컬럼만 복사해서 새로운 테이블 생성

SELECT * FROM NEW_EMP2;


학생 테이블과 교수테이블을 JOIN하여 각각 이름출력(JOIN)

-- 코드1
SELECT A.NAME AS 'STU_NAME'
     , B.NAME AS 'PROF_NAME'
  FROM STUDENT A JOIN PROFESSOR B
 WHERE A.PROFNO = B.PROFNO;
-- 코드2
SELECT A.NAME AS 'STU_NAME'
     , B.NAME AS 'PROF_NAME'
  FROM STUDENT A JOIN PROFESSOR B
    ON A.PROFNO = B.PROFNO;


1전공(DEPTNO1)이 101번인 학생의 이름과 지도교수 이름(JOIN)

-- 코드1
SELECT A.NAME AS 'STU_NAME'
	 , B.NAME AS 'PROF_NAME'
  FROM STUDENT A JOIN PROFESSOR B
 WHERE A.PROFNO = B.PROFNO
   AND A.DEPTNO1 =101;
-- 코드2 안시조인
SELECT A.NAME AS 'STU_NAME'
	 , B.NAME AS 'PROF_NAME'
  FROM STUDENT A JOIN PROFESSOR B
    ON A.PROFNO = B.PROFNO
 WHERE A.DEPTNO1 =101;


CUSTOMER테이블과 GIFT테이블을 JOIN해서 포인트별 상품 출력(JOIN)

SELECT CUST.GNAME, CUST.POINT, GIFT.GNAME
  FROM CUSTOMER AS CUST, GIFT
 WHERE CUST.POINT BETWEEN GIFT.G_START AND GIFT.G_END
ORDER BY CUST.POINT;


학생,점수,학점 테이블 3개 JOIN해서 점수계산(JOIN)

SELECT STU.NAME,SCORE.TOTAL,H.GRADE AS CREDIT
  FROM STUDENT AS STU, SCORE, HAKJUM AS H
 WHERE (STU.STUDNO = SCORE.STUDNO) AND (SCORE.TOTAL BETWEEN H.MIN_POINT AND H.MAX_POINT)
ORDER BY SCORE.TOTAL DESC;


STUDENT 페이지 키 랭킹 매기기(RANK)

SELECT NAME
	   , HEIGHT
     , RANK() OVER(ORDER BY HEIGHT DESC) AS 'RANK'			-- 순위
     , DENSE_RANK() OVER(ORDER BY HEIGHT DESC) AS 'RANK2'	-- 순위(중복이어도 다음순위 다음번호)
     , ROW_NUMBER() OVER(ORDER BY HEIGHT DESC) AS 'RANK3'	-- 순위(중복일때 순서대로 순서매김)
  FROM STUDENT
  WHERE HEIGHT >= 170;

'백엔드 > DB' 카테고리의 다른 글

[MariaDB] DBeaver 세팅  (0) 2023.07.07
[MariaDB] MariaDB, DBeaver 설치  (0) 2023.07.07
[MySQL] MySQL 프로시저, 사용자 지정 함수  (0) 2023.06.12
[MySQL] MySQL 서브쿼리  (0) 2023.06.12
[MySQL] MySQL 뷰  (0) 2023.06.12