2022.07.26 - SQL(1) (복습문제)

sofia·2022년 7월 26일
0

SQL

목록 보기
4/13
post-thumbnail

📙복습

📖문제 1

교수테이블에서 이름, 아이디, 이메일 출력
select NAME, ID, EMAIL from professor;

📖문제 2

교수 테이블에서 PROFNO,NAME,POSITION,HPAGE 칼럼을 출력
(단,"교수번호","위치","홈페이지" 칼럼 별명 부여)

	, name"교수명"	
    , position"위치"
    , hpage"홈페이지" from professor;

📖문제 3

교수 테이블에서 합성 연산자 사용하여 다음과 같이 출력

SELECT name||'교수의 이메일은 '||email||'이고, 홈페이지는 '||hpage||'이다.' from professor;

📖문제 4

교수 테이블에서 교수이름, 월급, 연봉 출력
(연봉 : 월급*12)

	, pay
    ,pay*12 "Y_PAY"
    FROM professor;

📖문제 5

월급이 2000보다 큰 사원의 이름, 직업, 월급 출력하되 월급이 큰 순으로 출력

SELECT ENMAE
	, JOB
    , SAL FROM EMP
WHERE SAL > 2000
ORDER BY SAL DESC;

📖📖문제 6

20번 부서 사원 중에서 월급이 1000이상인 사원의 이름, 부서번호, 월급 출력

SELECT ENMAE
	, DEPTNO
    , SAL FROM EMP
WHERE DEPTNO = 20 AND SAL >= 1000;

📖문제 7

사원 중 이름이 ja로 시작되는 사원이름, 직업, 부서번호 출력

select ename
	, job
    ,deptno from emp
where ename like 'JA%';

여기서 이름은 데이터 값 그대로 작성해야함(대문자 소문자 구별!)

📖문제 8

커미션을 받지 않는 사원의 이름, 직업, 부서번호 출력

SELECT ENAME
	, JOB
    , DEPTNO FROM EMP
WHERE COMM IS NULL;

📖문제 9

EMP 테이블에서 이름, 부서번호, 금여, 연봉 출력하되 부서번호와 연봉으로 정렬

(부서번호는 내림차순으로 연봉은 오름차순)

SELECT ENAME
	, DEPTNO
    , SAL
    , SAL*12 FROM EMP
    ORDER BY DEPTNO DESC,SAL*12;

📖문제 10

급여가 1000이상이면서 커미션을 받거나 급여가 3000이상인 사원 이름, 급여, 커미션 출력

SELECT ENAME
	, SAL
    ,COMM FROM EMP 
    WHERE (SAL>=1000 AND COMM >0)
    OR SAL>=3000;

📖문제 11

교수 테이블에서 홈페이지가 있는 교수 중 교수번호, 교수명, 홈페이지 주소, 홈페이지에서 .이 두번째로 오는 위치 출력하시오

SELECT PROFNO
	, NAME
    , HPAGE
    , INSTR(HPAGE,'.',1,2)"HTTP" 
FROM  professor
WHERE HPAGE IS NOT NULL;

📖문제 12

교수 테이블에서 이메일이 있는 교수 중에서 교수번호, 교수명, 이메일 아이디 출력하시오.(이메일 아이디는 이메일 이용해서 구하기)

SELECT PROFNO
	,NAME
	,SUBSTR(EMAIL,1,INSTR(EMAIL,'@')-1) "EMAIL_ID"
    FROM PROFESSOR
	WHERE EMAIL IS NOT NULL;

📖문제 13

교수 테이블에서 이메일이 있는 교수들의 이름과 ID, POSITION, EMAIL 길이를 출력하시오
(이름은 대문자, ID는 소문자, POSITION은 첫글자만 대문자로 출력)

SELECT UPPER(NAME)"NAME"
, LOWER(ID)"ID"
, INITCAP(POSITION)"POSITION"
,LENGTH(EMAIL)"EMAIL_SIZE"
FROM PROFESSOR;

📖문제 14

고객 테이블에서 JUMIN 컬럼을 사용해서 포인트가 10만 이상인 고객의 이름, 태어난 년도, 포인트 출력(포인트는 큰 순서대로 정렬)

SELECT GNAME
	, SUBSTR(JUMIN,1,2)"YEAR"
    ,POINT 
    FROM CUSTOMER
WHERE POINT >=100000
ORDER BY POINT DESC;

📖문제 15

교수 테이블에서 EMAIL 컬럼 사용해서 이메일이 있는 교수의 이름과 이메일,’@’가 나오는위치 출력

SELECT NAME,
	EMAIL,
    INSTR(EMAIL,'@')"@" 
    FROM PROFESSOR
WHERE EMAIL IS NOT NULL;

📖문제 16

SUBSRT, INSTR 문제
교수테이블 참고하여 이메일이 있는 교수의 이름과 이메일과 이메일에 있는 도메인의 회사 이름 출력

SELECT NAME
	, EMAIL
    ,SUBSTR(EMAIL, INSTR(EMAIL,'@')+1, INSTR(EMAIL,'.')-INSTR(EMAIL,'@')-1)
"DOMAIN"
FROM PROFESSOR
WHERE EMAIL IS NOT NULL;

  • 참고로
SELECT NAME, EMAIL,
SUBSTR(EMAIL, INSTR(EMAIL,'@'), INSTR(EMAIL,'.')-INSTR(EMAIL,'@'))
"DOMAIN"
FROM PROFESSOR;

인 경우

SUBSTR(EMAIL, INSTR(EMAIL,'@')+1, INSTR(EMAIL,'.')-INSTR(EMAIL,'@'))
"DOMAIN"
FROM PROFESSOR;

SELECT NAME, EMAIL,
SUBSTR(EMAIL, INSTR(EMAIL,'@'), INSTR(EMAIL,'.')-INSTR(EMAIL,'@')-1)
"DOMAIN"
FROM PROFESSOR;

이케 나옴

📖문제 17

DEPT 테이블에서 부서들의 이름은 총 9자리로 출력하되 왼쪽 빈자리에는 해당 자리수에 해당되는 숫자가 출력되고 , 위치명들의 오른쪽 빈자리에는 해당자리수의 숫자가 출력되도록 하기

SELECT DNAME
	, LPAD(DNAME,9,'123456789')"LPAD"
	, LOC
	, RPAD(LOC,9,SUBSTR('123456789',LENGTH(LOC)+1))
"RPAD"
FROM DEPT;

📖📖문제 18

고객 테이블에서 아래와 같이 주민등록번호가 77년생보다 나이가 많은 고객들의 이름과 주민번호와 4-6번째 글자만 '337'로 변경하여 출력하시오

SELECT GNAME
	, JUMIN
    , REPLACE(GNAME,SUBSTR(GNAME,4,3),'337')"337"
    FROM CUSTOMER
    WHERE SUBSTR(JUMIN,1,2) < '77';

📖문제 19

교수 테이블에서 홈페이지가 있는 교수들의 이름과 홈페이지와 '.'이 2번째 오는 곳 뒤부터 2글자를 'OK'로 변경해서 출력

SELECT NAME
	, HPAGE
	, REPLACE(HPAGE
    ,SUBSTR(HPAGE,INSTR(HPAGE,'.',1,2)+1,2),'OK') "OK"
	FROM PROFESSOR
	WHERE HPAGE IS NOT NULL;

📖문제 20

교수 테이블의 HIREDATE 컬럼을 사용하여 입사 일자가 3,8,10월인 교수의 이름과 HIREDATE를 아래 화면과 같이 출력하세요

SELECT NAME
	, HIREDATE 
    FROM PROFESSOR
	WHERE TO_CHAR(HIREDATE,'MM')
    IN ('03','08','10');

📖문제 21

SELECT NAME
, TO_CHAR(HIREDATE,'YYYY-MM-DD')"HIREDATE"
, PAY
, BONUS
, TO_CHAR((PAY12)+BONUS,'$999,999') "TOTAL"
, TO_CHAR(((PAY12)+BONUS)0.9,'$999,999') "10%DOWN"
, TO_CHAR(((PAY12)+BONUS)0.91200,'999,999,999') "WON"
FROM PROFESSOR
WHERE BONUS IS NOT NULL;

📖문제 22

SELECT ENAME
, SAL
,NVL(COMM,0)"COMM"
,TO_CHAR(SAL*12+NVL(COMM,0),'999,999')"TOTAL"
FROM EMP
WHERE DEPTNO =30;


📖DECODE 복습 1

SELECT DECODE('A','B',DECODE('A','B','1',NULL)) FROM DUAL;
-- 출력 : NULL
SELECT DECODE('A','A',DECODE('A','B','1',NULL)) FROM DUAL;
-- 출력 : NULL
SELECT DECODE('A','A',DECODE('A','A','1',NULL)) FROM DUAL;
-- 출력 : 1

📖문제 23

SELECT DEPTNO
	, NAME
	, DECODE(DEPTNO,'101',DECODE(NAME,'Audie Murphy','BEST!')) "ETC"
FROM PROFESSOR;

📖DECODE 복습 2

SELECT DECODE('A','B',DECODE('C','D','1','2')) FROM DUAL;
-- 출력 NULL
SELECT DECODE('A','A',DECODE('C','D','1','2')) FROM DUAL;
-- 출력 2
SELECT DECODE('A','A',DECODE('C','C','1','2')) FROM DUAL;
-- 출력 1

📖문제 24

SELECT DEPTNO
	, NAME
	, DECODE(DEPTNO,'101',DECODE(NAME,'Audie Murphy','BEST!','GOOD!')) "ETC"
FROM PROFESSOR;

📖DECODE 복습 3

SELECT DECODE('A','B',DECODE('C','D','1','2'),'3') FROM DUAL;
-- 출력 3
SELECT DECODE('A','A',DECODE('C','D','1','2'),'3') FROM DUAL;
-- 출력 2
SELECT DECODE('A','A',DECODE('C','C','1','2'),'3') FROM DUAL;
-- 출력 1

📖문제 25

SELECT DEPTNO
	, NAME
	, DECODE(DEPTNO,'101',DECODE(NAME,'Audie Murphy','BEST!','GOOD!'),'N/A') "ETC"
FROM PROFESSOR;

📖문제 26

SELECT NAME, JUMIN, DECODE(SUBSTR(JUMIN,7,1),1,'MAN','2','WOMAN') "Gender"
FROM STUDENT
WHERE DEPTNO1 =101;

📖문제 27

SELECT NAME
    ,TEL
    ,DECODE(SUBSTR(TEL,1,INSTR(TEL,')',1,1)-1),'02','SEOUL'
    ,'031','GTEONGGI'
    ,'051','BUSAN'
    ,'052','ULSAN'
    ,'055','GYEONGNAM') "LOC"
    FROM STUDENT
    WHERE DEPTNO1 = 101;

동일한 방법

SELECT CASE '01' WHEN '01' THEN 'A'
                WHEN '02' THEN 'B'
                WHEN '03' THEN 'C'
                ELSE 'ETC'
       END"TEST"
   FROM DUAL;
-- A
SELECT CASE '01' WHEN '02' THEN 'A'
                WHEN '01' THEN 'B'
                WHEN '03' THEN 'C'
                ELSE 'ETC'
       END"TEST"
   FROM DUAL;
--B
SELECT CASE '01' WHEN '03' THEN 'A'
                WHEN '02' THEN 'B'
                WHEN '01' THEN 'C'
                ELSE 'ETC'
       END"TEST"
   FROM DUAL;
--C

SELECT CASE '11' WHEN '03' THEN 'A'
                WHEN '02' THEN 'B'
                WHEN '01' THEN 'C'
                ELSE 'ETC'
       END"TEST"
   FROM DUAL;
--ETC


0개의 댓글