728x90

 

상당히 복잡한...

복붙해도 써도 되겠지만 안에 메커니즘을 이해하기 위해

손코딩 반복해보자

 

<h2>1.서버 쪽 컨트롤러로 값 보내기</h2>
    <button id="test1">테스트</button>
    <script>
        $('#test1').on('click',function(){
            $.ajax({

                url: 'test1.do',
                data:{name:'강건강', age:20},
                type: 'post',
                success: function(data){
                    console.log(data);
                    if(data = 'ok'){
                        alert('전송 성공');
                    }else{
                        alert('전송 실패');
                    }
                },
                error: function(data){
                    console.log(data);

                }
            });
        });
    </script>

 

728x90
반응형
728x90

1.매개인자로 전달하기

2.매개인자로 스스로를 전달하기

3.함수의 리턴처리

4.매개변수로 함수 전달

5.함수 리턴

 

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>04_Function_p</title>


    <h3>매개인자로 스스로를 전달하기</h3>
    <button onclick="funcPara1('매개인자로 스스로를 전달하기1')">매개인자로 스스로를 전달하기11</button>
    <script>
        function funcPara1(parameter){
            alert(parameter);   // 매개인자로 스스로를 전달하기1
        }
    </script>
    <button onclick="funcPara2(this)">매개인자로 스스로를 전달하기22</button>
    <script>
        function funcPara2(parameter2){
            alert(parameter2);  // [object HTMLButtonElement]
            alert(parameter2.innerHTML);  // 매개인자로 스스로를 전달하기22
        }
    </script>
    <br><br>
    <button onclick="a1('b1');">a1</button>
    <script>
        function a1(para){
            alert(para); // b1
        }
    </script>
    <button onclick="c1(this);">d1</button>
    <script>
        function c1(para){
            alert(para.innerHTML); // d1
        }
    </script>
    
    
    <br><br><br>

    <button onclick="retur();">함수의 리턴 : 리턴값있는 다른 함수 호출하기</button>
    <script>
        function retur(){
            var getReturn = returFunc();
            alert(getReturn);
        }
        function returFunc(){
            return Math.random() * 10 + 1;  // 9.213956197609749
        }
    </script>
    <button onclick="aaa();">함수의 리턴처리</button>
    <script>
        function aaa(){
            var ref = returFunc();  // 9.213956197609749
            alert(ref);
        }
        
    </script>

<br><br>

    <h3>매개변수로 함수 전달</h3>       
    <button onclick="try1(callfunc);">매개변수로 함수 전달</button>
    <script>
        function try1(parameter){
            parameter();      // 매개변수로 함수를 호출함
        }
        function callfunc(){
            alert("매개변수로 함수를 호출함");
        }
    </script>
    <button onclick="try2(try2_1);">매개변수로 함수 전달</button>
    <script>
        function try2(try22){
            try22();
        }
        function try2_1(){
            alert("매개변수로 함수 전달");
        }
    </script>


    <h3>함수 리턴</h3>
    <!-- function 받아와서 실행시켜줘야해 onclick="test8()();"에다가 ()소괄호 추가 -->
    <button onclick="try3()();">함수 리턴</button>  <!-- 함수 리턴 : 익명함수 리턴 -->
    <script>
        function try3(){
            return function(){  
                alert("함수 리턴 : 익명함수 리턴");
            }
        }
    </script>
    <button onclick="try3_1()()">함수 리턴시키기</button>    <!-- 받아온 함수를 실행을 위해 ()추가 -->
    <script>
        function try3_1(){
            return function(){
                alert("방법이 너무 많아서 헷갈릴 듯");
            }
        }
    </script>

    



</head>
<body>
    






</body>
</html>
728x90
반응형
728x90

 

SELECT, FUCTION,  GROUP BY, HAVING, JOIN 100제 문제 풀이

100제 중 87문제 풀이 완료

 




--SELECT 문제
--1. EMPLOYEE 테이블의    사번, 이름, 급여   조회
SELECT EMP_NO, EMP_NAME,SALARY
FROM EMPLOYEE;
--2. EMPLOYEE 테이블의    모든    정보    조회
SELECT * FROM EMPLOYEE;
--3. JOB 테이블의   모든    정보   조회
SELECT * FROM JOB;
--4. JOB 테이블의   직급    이름   조회
SELECT JOB_NAME FROM JOB;
--5. DEPARTMENT 테이블의    모든    정보    조회
--6. EMPLOYEE 테이블의    직원    명, 이메일, 전화번호, 고용일    조회
--7. EMPLOYEE 테이블의    고용일, 사원    이름, 월급    조회
--8. EMPLOYEE 테이블에서    직원    명, 급여, 연봉    조회(연봉    = 급여*12)
SELECT EMP_NAME,SALARY,SALARY*12
FROM EMPLOYEE;
--9. EMPLOYEE 테이블에서    직원    명, 연봉, 보너스를    추가한    연봉    조회
SELECT EMP_NAME,SALARY,SALARY*12
FROM EMPLOYEE;
--10.EMPLOYEE  테이블에서      이름,  연봉,  총수령액(보너스      포함),  실수령액(총수령액-(연봉*세금 3%)) 조회
SELECT EMP_NAME 이름,SALARY 급여,SALARY*12-(SALARY*12*0.03) 총수령액, SALARY*12 연봉
FROM EMPLOYEE;
--11.EMPLOYEE  테이블에서      이름,  고용일,  근무일수(오늘      날짜      -  고용일)  조회,  오늘      날짜: SYSDATE
SELECT EMP_NAME, HIRE_DATE, SYSDATE - HIRE_DATE 근무일수, SYSDATE 오늘
FROM EMPLOYEE;
--12.EMPLOYEE 테이블에서    직원의    직원    번호, 사원    명, 급여, 단위    조회
--13.EMPLOYEE 테이블에서    직원의    직급    코드    조회
--14.EMPLOYEE 테이블에서    직원의    직급    코드를    중복    없이    조회
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
--15.EMPLOYEE 테이블에서    직원의    부서    코드를    중복    없이    조회
SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;
--16.EMPLOYEE 테이블에서    부서    코드가    'D9'인    직원의    이름, 부서    코드    조회
SELECT EMP_NAME,DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';
--17.EMPLOYEE 테이블에서    급여가    4000000 이상인    직원의    이름, 급여    조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= 4000000;
--18.EMPLOYEE 테이블에서    부서    코드가    ‘D9’가    아닌    사원의    사번, 이름, 부서    코드    조회
SELECT EMP_ID, EMP_NAME,DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE != 'D9';
--19.EMPLOYEE  테이블에서    퇴사    여부가    N인    직원을    조회하고    근무    여부를    재직중으로    표시하 고    사번, 이름, 고용일, 근무    여부    조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE, ENT_YN 재직중
FROM EMPLOYEE
WHERE ENT_YN = 'N' ;
--20.EMPLOYEE 테이블에서    월급이    3000000이상인    사원의    이름, 월급, 고용일    조회
--21.EMPLOYEE 테이블에서    SAL_LEVEL이   ‘S1’인    사원의    이름, 월급, 고용일, 연락처    조회
--
--22.EMPLOYEE 테이블에서    실수령액(총수령액    - (연봉*세금%3))이    5천만원    이상인    사원의    이름, 급여, 실수령액, 고용일    조회
--23.EMPLOYEE  테이블에서    부서    코드가    ‘D6’이고    급여를    3000000보다    많이    받는    직원의    이름, 부서    코드, 급여    조회
--24.EMPLOYEE  테이블에서    부서    코드가    ‘D6’이거나    급여를    3000000보다    많이    받는    직원의    이 름, 부서   코드, 급여    조회
--25.EMPLOYEE  테이블에서    급여를    3500000  이상    6000000  이하를    받는    사원의    사번,  이름,  급 여, 부서코드, 직급코드
--26.EMPLOYEE테이블에    월급이    4000000이상이고    JOB_CODE가    ‘J2’인    사원의    전체    내용    조회
--27.EMPLOYEE 테이블에    DEPT_CODE가    ‘D9’이거나    ‘D5’인    사원    중에    고용일이    02년    1월    1일보 다    빠른   사원의    이름, 부서코드, 고용일   조회
--28.EMPLOYEE  테이블에서    급여를    3500000  미만    6000000  초과를    받는    사원의    사번, 이름,  급 여, 부서코드, 직급코드
--29. EMPLOYEE 테이블에    고용일이    90/01/01 ~ 01/01/01인    사원의    전체    내용을    조회
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '01/01/01';
--30. EMPLOYEE 테이블에서    성이    ‘전’씨인    사원의    사번, 고용일    조회
--31. EMPLOYEE 테이블에서    이름이    '하'가    포함된    직원의    이름, 주민번호, 부서코드    조회
--32. EMPLOYEE 테이블에서    전화번호    4번째    자리가    9로    시작하는    사원의    사번, 이름, 전화번호 조회
--33. EMPLOYEE  테이블에서    이메일    중    _의    앞    글자가    3자리인    이메일    주소를    가진    사원의    사 번, 이름, 이메일    주소    조회
SELECT EMP_ID,EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___!_%' ESCAPE '!';
--34. EMPLOYEE 테이블에서    이름    중    김씨    성을    가지지    않은    사원의    사번, 이름, 고용일   조회
--35. EMPLOYEE 테이블에서    이름    끝이    '연'으로    끝나는    사원    조회
SELECT *
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%연';
--36. EMPLOYEE 테이블에서    전화번호    처음    세자리가    010이    아닌    사원의    이름, 전화번호    조회
SELECT EMP_NAME,PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';
SELECT EMP_NAME,PHONE
FROM EMPLOYEE
WHERE NOT PHONE LIKE '010%';
--37. EMPLOYEE  테이블에서     메일주소     _의     앞이     4자이면서     DEPT_CODE가     ‘D9’     또는     ‘D6’이고, 
-- 고용일이    90/01/01 ~ 00/12/01이고, 급여가   2700000만    이상인    사원의    전체    정보    조회
SELECT *
FROM EMPLOYEE
WHERE EMAIL LIKE '____!_%' ESCAPE '!'
        AND (DEPT_CODE = 'D9' OR DEPT_CODE = 'D6')
        AND HIRE_DATE BETWEEN '90/01/01' AND '00/12/01'
        AND SALARY >= 2700000;
        
--38. EMPLOYEE 테이블에서    보너스를    받지    않는    사원의    사번, 이름, 급여, 보너스    조회
SELECT EMP_ID, EMP_NAME, SALARY,  NVL(BONUS, 0)---------------------
FROM EMPLOYEE
WHERE BONUS = 0;
--39. EMPLOYEE 테이블에서    보너스를    받는    사원의    사번, 이름, 급여, 보너스    조회
SELECT EMP_ID, EMP_NAME, SALARY, BONUS
FROM EMPLOYEE
WHERE BONUS IS NULL;
--40. EMPLOYEE  테이블에서 관리자도 없고 부서 배치도 받지 않은 직원의 이름,  관리자,  부서코드    조회
SELECT EMP_NAME, MANAGER_ID, DEPT_CODE
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;

--41. EMPLOYEE  테이블에서    부서    배치를    받지    않았지만    보너스를    지급받는    직원의    이름,  보너 스, 부서코드   조회
SELECT EMP_NAME,BONUS,DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL AND BONUS IS NOT NULL;
--42. ‘D6’부서와   ‘D9’부서원들의    이름, 부서코드, 급여    조회
--43. 직급   코드가   ‘J1’, ‘J2’, ‘J3’, ‘J4’인    사람들의    이름, 직급    코드, 급여    조회
SELECT EMP_NAME, JOB_CODE,SALARY
FROM EMPLOYEE
WHERE JOB_CODE IN ('J1','J2','J3','J4');
--44. EMPLOYEE 테이블에서    사번, 이름, 급여를    연결해서    조회    (EX. 200선동일8000000)
SELECT EMP_ID||EMP_NAME||SALARY
FROM EMPLOYEE;
--45. EMPLOYEE 테이블에서    '사원    명의    월급은    급여    원입니다' 형식으로    조회
SELECT '사원명 '||EMP_NAME||'의 월급은 급여 '|| SALARY||'원입니다'
FROM EMPLOYEE;
--
--
--
--FUNCTION 문제
--1. EMPLOYEE  테이블에서    사원    명,  입사일-오늘,  오늘-입사일    조회    (단,  별칭은    근무일수1,  근 무일수2로   하고    모두    정수    처리(내림)와    양수로    처리)
SELECT EMP_NAME, FLOOR(ABS(HIRE_DATE - SYSDATE)) 근무일수1 , FLOOR(ABS(SYSDATE - HIRE_DATE)) 근무일수2
FROM EMPLOYEE;
--2. EMPLOYEE 테이블에서    사번이    홀수인    직원들의    정보    모두    조회
SELECT *
FROM EMPLOYEE
--WHERE MOD(EMP_ID,2) = 1;
WHERE MOD(EMP_ID,2) != 0;
--3. EMPLOYEE 테이블에서    근무연수가    20년    이상인    직원    정보    조회
SELECT *
FROM EMPLOYEE
WHERE MONTHS_BETWEEN(SYSDATE, HIRE_DATE) >= 20;
--4. EMPLOYEE 테이블에서    사원    명, 입사일, 입사한    달의    근무일    수    조회
SELECT EMP_NAME, HIRE_DATE, LAST_DAY(HIRE_DATE)-HIRE_DATE "입사한 달의 근무일수"
FROM EMPLOYEE;
--5. EMPLOYEE 테이블에서    사원의    이름, 입사    연도, 입사    월, 입사일    조회
SELECT EMP_NAME, HIRE_DATE, LAST_DAY(HIRE_DATE)-HIRE_DATE "입사한 달의 근무일수"
FROM EMPLOYEE;
--6. EMPLOYEE테이블에서    사원의    이름,  입사일,  근무연수    조회    (단,  근무연수는    현재    연도    - 입 사연도로    조회)
SELECT EMP_NAME, HIRE_DATE, EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FROM HIRE_DATE) 근무연수
FROM EMPLOYEE;
--7. EMPLOYEE 테이블에서    사원    명, 급여(\9,000,000 형식) 조회
SELECT EMP_NAME ,TO_CHAR(SALARY,'L9,000,000') 급여
FROM EMPLOYEE;
--8. EMPLOYEE 테이블에서    이름, 입사일(2022년    3월    15일    (화) 형식) 조회
SELECT EMP_NAME,TO_CHAR(HIRE_DATE, 'YYYY"년" FMMM"월" DD"일" (DY)')
FROM EMPLOYEE;
--9. 직원의 급여를 인상하고자 한다. 직급코드가 ‘J7’인 직원은 급여의 10%를 인상하고, 직급코 드가 ‘J6’인 직원은 급여의 15%를 인상하고, 
-- 직급코드가 ‘J5’인 직원은 급여의 20%를 인상 하며, 그 외 직급의 직원은 급여의 5%만 인상하며, 직원 테이블에서 직원명,  직급코드,  급 여, 인상급여(위 조건)을 조회
SELECT EMP_NAME, JOB_CODE, SALARY, 
        CASE JOB_CODE WHEN 'J7' THEN SALARY*0.1
                      WHEN 'J6' THEN SALARY*0.15
                      WHEN 'J5' THEN SALARY*0.2
                      ELSE SALARY*0.05
        END 인상급여
FROM EMPLOYEE;
SELECT EMP_NAME, JOB_CODE, SALARY, 
    CASE WHEN JOB_CODE = 'J7' THEN SALARY*1.1
         WHEN JOB_CODE = 'J6' THEN SALARY*1.15
         WHEN JOB_CODE = 'J5' THEN SALARY*1.2
         ELSE SALARY*1.05
    END 인상급여
FROM EMPLOYEE;

SELECT EMP_NAME, JOB_CODE, SALARY 월급, 
        DECODE(JOB_CODE,'J7',SALARY*0.1,
                        'J6',SALARY*0.15,
                        'J5',SALARY*0.2,SALARY*0.5) 인상급여
FROM EMPLOYEE;

                        
--10. EMPLOYEE 테이블에서    전    사원의    급여    총합    조회
SELECT SUM(SALARY) FROM EMPLOYEE;
--11. EMPLOYEE 테이블에서    남자사원의    급여    총합    조회
SELECT SUM(SALARY)
FROM EMPLOYEE
WHERE SUBSTR(EMP_NO,8,1)=1;
--12. EMPLOYEE 테이블에서    전    사원의    급여    평균    조회
SELECT AVG(SALARY)
FROM EMPLOYEE;
--13. EMPLOYEE 테이블에서 전 사원의 보너스 평균 (단, BONUS가 NULL인 사원은 0으로 처리)
SELECT AVG(NVL(BONUS,0))
FROM EMPLOYEE;
--14. EMPLOYEE 테이블에서    최소    급여와    최대    급여    조회
SELECT MIN(SALARY), MAX(SALARY)
FROM EMPLOYEE;
--15. 부서   코드가   있는    사원    수    (NULL 제외) 조회
SELECT COUNT(DEPT_CODE)
FROM EMPLOYEE;
SELECT COUNT(DEPT_CODE)
FROM EMPLOYEE;




--GROUP BY HAVING 문제
--1. 부서    별   급여    합계    조회
SELECT SUM(SALARY) 급여합계, DEPT_CODE
FROM EMPLOYEE
GROUP BY DEPT_CODE;
--2. EMPLOYEE 테이블에서 부서, 부서 별 급여 합계, 부서 별 급여 평균, 부서 별 인원 수 조회
SELECT DEPT_CODE 부서코드, SUM(SALARY)급여합계,/*AVG(SALARY)*/ CEIL(AVG(SALARY))급여평균, COUNT(*) 부서인원수
FROM EMPLOYEE
GROUP BY DEPT_CODE;
--3. EMPLOYEE 테이블에서    부서코드와    보너스    받는    사원    수    조회
SELECT DEPT_CODE, COUNT(BONUS) "보너스O사원수"
FROM EMPLOYEE
GROUP BY DEPT_CODE;
--4. EMPLOYEE 테이블에서    직급코드와    보너스    받는    사원    수    조회
SELECT JOB_CODE, COUNT(BONUS) "보너스 사원수"
FROM EMPLOYEE
GROUP BY JOB_CODE;
--5. EMPLOYEE 테이블에서    성별과    성별    별    급여    평균(정수처리(내림)), 급여    합계, 인원    수    조회 (인원    수로   내림차순)
SELECT DECODE(SUBSTR(EMP_NO,8,1),1,'남','여') 성별, FLOOR(ABS(AVG(SALARY))) "성별 별 급여평균", SUM(SALARY), COUNT(*)
FROM EMPLOYEE 
GROUP BY SUBSTR(EMP_NO,8,1)
ORDER BY COUNT(*) DESC;
--6. EMPLOYEE 테이블에서    부서    코드별로    같은    직급인    사원의    급여    합계    조회
SELECT DEPT_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING DEPT_CODE IN('D1','D2','D3','D4','D5');

SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE, JOB_CODE
ORDER BY DEPT_CODE;
--7. 부서    코드와   급여    3000000이상인    직원의    그룹    별    평균    급여    조회
SELECT DEPT_CODE, AVG(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE, SALARY
HAVING SALARY >= 3000000;
--8. 부서    코드와   급여    평균    3000000이상인    그룹   별    평균    급여    조회
SELECT  DEPT_CODE, AVG(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE,SALARY
HAVING AVG(SALARY) >= 3000000;
--9. 부서 별 급여 합계 중 9000000을 초과하는 부서코드와 급여 합계 조회
SELECT DEPT_CODE,SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING SUM(SALARY) > 9000000;
--10.EMPLOYEE테이블에서 각 부서코드마다 직급코드 별 급여 합, 부서 별 급여 합, 총합 조회
SELECT DEPT_CODE,JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE, JOB_CODE 
ORDER BY DEPT_CODE;
--11. EMPLOYEE  테이블에서 DEPT_CODE가 ‘D5’이거나 급여가 3000000을 초과하는 직원의 사번, 이름, 부서코드, 급여 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' OR SALARY > 3000000;

--
--JOIN 문제
--내부 조인(INNER JOIN) : 일치하지 않는 컬럼 값은 제외시킴 
--1. 사번, 사원 명, 부서코드 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE FROM EMPLOYEE;
--2-1.사번, 이름,부서코드, 부서 명 조회(오라클 전용 구문) 
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID;
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID;
--2-2.사번, 이름,부서코드, 부서 명 조회(ANSI 표준 구문)
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE
    JOIN DEPARTMENT ON(EMPLOYEE.DEPT_CODE = DEPARTMENT.DEPT_ID);
--3-1.사번, 사원 명, 직급코드, 직급명 조회(오라클 전용구문) 
SELECT EMP_ID, EMP_NAME, E.JOB_CODE, J.JOB_NAME
FROM EMPLOYEE E, JOB J
WHERE E.JOB_CODE = J.JOB_CODE;

SELECT EMP_ID,EMP_NAME, EMPLOYEE.JOB_CODE, JOB.JOB_NAME
FROM EMPLOYEE, JOB
WHERE EMPLOYEE.JOB_CODE = JOB.JOB_CODE;
--3-2.사번, 사원 명, 직급코드, 직급명 조회(ANSI 표준구문) 
SELECT EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME
FROM EMPLOYEE E
    JOIN JOB J USING(JOB_CODE);
    
SELECT EMP_ID, EMP_NAME, E.JOB_CODE, J.JOB_NAME
FROM EMPLOYEE E
    JOIN JOB J ON(E.JOB_CODE = J.JOB_CODE);
--4-1.부서   명과   해당    부서의    지역    명    조회(오라클    전용    구문)
SELECT D.DEPT_TITLE, L.LOCAL_NAME
FROM DEPARTMENT D, LOCATION L
WHERE D.LOCATION_ID = L.LOCAL_CODE;

SELECT DEPT_TITLE,LOCAL_NAME
FROM DEPARTMENT, LOCATION
WHERE LOCATION_ID = LOCAL_CODE;
--4-2.    부서   명과   해당    부서의    지역    명    조회(ANSI 표준    구문)
SELECT DEPT_TITLE, LOCAL_NAME
FROM DEPARTMENT D
    JOIN LOCATION L ON(D.LOCATION_ID = L.LOCAL_CODE);
--5. 오라클    전용    구문    ANSI 표준    구문으로    바꾸기
--SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT WHERE DEPT_CODE = DEPT_ID(+);
SELECT EMP_NAME, DEPT_TITLE 
FROM EMPLOYEE E
    LEFT JOIN DEPARTMENT D ON (E.DEPT_CODE = D.DEPT_ID);
SELECT EMP_NAME, DEPT_TITLE 
FROM EMPLOYEE
    LEFT OUTER JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);    
--6. 오라클    전용    구문    ANSI 표준    구문으로    바꾸기
--SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT WHERE DEPT_CODE(+) = DEPT_ID;
SELECT EMP_NAME, DEPT_TITLE 
FROM EMPLOYEE
    RIGHT OUTER JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
--7. 오라클    전용    구문에선    FULL [OUTER] JOIN 안    됨. 아래    구문    실행해도    에러    남. 그러니까 밑에    구문을    ANSI 표준으로    바꿔주셈.
--SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT WHERE DEPT_CODE(+) = DEPT_ID(+);
SELECT EMP_NAME, DEPT_TITLE 
FROM EMPLOYEE
    FULL OUTER JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
--8-1.   사번, 이름, 부서    코드, 부서    명, 지역    이름(LOCAL_NAME) 조회(오라클    전용    구문) 
SELECT EMP_ID,EMP_NAME, DEPT_CODE, DEPT_TITLE,LOCAL_NAME
FROM EMPLOYEE, DEPARTMENT,LOCATION
WHERE DEPT_CODE = DEPT_ID
    AND LOCATION_ID = LOCAL_CODE;
--8-2.   사번, 이름, 부서    코드, 부서    명, 지역    이름(LOCAL_NAME)(ANSI 표준    구문)
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE, LOCAL_NAME
FROM EMPLOYEE
    JOIN DEPARTMENT ON ( DEPT_CODE = DEPT_ID)
    JOIN LOCATION ON ( LOCATION_ID = LOCAL_CODE);



--SUBQUERY 문제
--서브    쿼리(SUBQUERY) :  메인    쿼리를    위해    보조    역할을    하는    쿼리이며,  쿼리    안에    쿼리가    포 함되어   있음.
--1. 첫    번째   구문과    두    번째    구문    합쳐주셈.
--①
--SELECT DEPT_CODE FROM EMPLOYEE
--WHERE EMP_NAME = '노옹철';
--②
--
--SELECT EMP_NAME FROM EMPLOYEE
--WHERE DEPT_CODE = 'D9';
--2. 전    직원의   평균    급여보다    많은    급여를   받고    있는    직원의    사번, 이름, 직급    코드, 급여    조회
--3. 노옹철    사원의   급여보다    많이    받는    직원의    사번, 이름, 부서코드, 직급코드, 급여    조회
--4. 가장    적은   급여를    받는    직원의    사번, 이름, 직급코드, 부서코드, 급여    입사일    조회
--5. 부서    별   급여    합계    중    가장    큰    부서의   부서    명, 급여    합계
--6. 부서    별   최고    급여를    받는    직원의    이름, 직급    코드, 부서코드, 급여    조회
--7. 관리자와    일반    직원에    해당하는    사원    정보    추출    : 사번, 이름, 부서명, 직급, 구분(관리자/직 원)
--8. 대리    직급의    직원들    중에서    과장    직급의    최소    급여보다    많이    받는    직원의    사번, 이름, 직급, 급여    조회
--9. 차장    직급의   급여    중    가장    큰    값보다   많이    받는    과장    직급의    사번, 이름, 직급, 급여    조회
--10.퇴사한    여직원과    같은    부서, 같은    직급에    해당하는    사원의    이름, 직급    코드, 부서코드, 입사 일    조회
--11.자기    직급의    평균    급여를    받고    있는    직원의    사번,  이름,  직급    코드,  급여    조회    (단, 급여    평 균은    십   만원    단위로    계산    : TRUNC(컬럼    명, -5))
--12.전    직원   중    급여가    높은    상위    5명의   이름, 급여    조회
--13.전    직원   중    급여가    높은    상위    5명의   이름, 급여    조회

 

 

 

728x90
반응형
728x90

 

연습문제 풀이

 

 



-- EMPLOYEE 테이블의 사번,이름,급여 조회
SELECT EMP_ID, EMP_NAME, SALARY FROM EMPLOYEEL

--EMPLOYEE 테이블의 모든 정보 조회
SELECT * FROM EMPLOYEE;

/*
-- 실습 문제 --
1.JOB 테이블의 모든 정보 조회
2.JOB 테이블의 직급 이름 조회
3.DEPARTMENT 테이블의 모든 정보 조회
4.EMPLOYEE 테이블의 직원명, 이메일, 전화번호, 고용일 조회
5.EMPLYEE 테이블의 고용일, 사원이름, 월급 조회
*/

--1.JOB 테이블의 모든 정보 조회
-- 방법1
SELECT * FROM JOB;

-- 방법2
SELECT JOB_CODE,JOB_NAME FROM JOB; 


--2.JOB 테이블의 직급 이름 조회
SELECT JOB_NAME FROM JOB;

--3.DEPARTMENT 테이블의 모든 정보 조회
-- 방법1
SELECT * FROM DEPARTMENT;

-- 방법2
SELECT DEPT_ID, DEPT_TITLE, LOCATION_ID FROM DEPARTMENT;

--4.EMPLOYEE 테이블의 직원명, 이메일, 전화번호, 고용일 조회
SELECT EMP_NAME,EMAIL,PHONE,HIRE_DATE FROM EMPLOYEE;

--5.EMPLYEE 테이블의 고용일, 사원이름, 월급 조회
SELECT HIRE_DATE, EMP_NAME,SALARY FROM EMPLOYEE;



--컬럼 값 산술 연산
--EMPLOYEE테이블에서 직원명, 연봉 조회(연봉 = 급여*12)
SELECT EMP_NAME, SALARY*12 연봉 FROM EMPLOYEE;

--EMPLOYEE테이블에서 직원명, 연봉, 보너스를 추가한 연봉 조회
-- 방법1
SELECT EMP_NAME, SALARY*12 연봉, SALARY*(1+BONUS) FROM EMPLOYEE;
--  수식에 NULL이 있으면 결과값에 NULL이 나옴 
-- 방법2
SELECT EMP_NAME 이름, SALARY * 12 연봉, SALARY*(1+BONUS)*12 AS 보너스
FROM EMPLOYEE;


/*
------------실습문제------------
1.EMPLOYEE테이블에서 이름, 연봉, 총수령액(보너스포함), 실수령액(총수령액-(연봉*세금3%)) 조회
2.EMPLOYEE테이블에서 이름, 고용일, 근무일수(오늘 날짜 - 고용일) 조회 
 - 오늘날짜 SYSDATE
*/
--(SALARY+SALARY*BONUS)*12
SELECT EMP_NAME 이름, SALARY * 12 연봉,SALARY *(1+BONUS)*12 "총수령액(보너스포함)", 
        SALARY *(1+BONUS)*12 - SALARY*12*0.03 AS 실수령액
FROM EMPLOYEE;




 

-- 컬럼 별칭
-- 컬럼명  AS 별칭 / 컬럼명 AS “별칭” / 컬럼명 별칭 / 컬럼명 “별칭”



/*
리터럴(literal)
값 자체 ‘ ‘

오라클에서는 문자,문자열,데이트 상관없이 다 싱글쿼테이션(’ ‘)으로 감싸준다
데이터 타입에 상관없이 별칭(””) 외에는 다 싱글쿼테이션으로 감싼다
*/ 

-- EMPLOYEE 테이블에서 직원의 직원 번호, 사원명, 급여, 단위 조회




-- 별칭 : "" 
-- 리터럴을 싱글쿼테이션으로 처리한다 : ' '
-- '원'이라는 컬럼을 보여주고 싶지않으면 더블쿼테이션""으로 단위써주자



-- EMPLOYEE테이블에서 직원의 직급 코드 조회

-- bang으로 시작하는 email 다 조회
-- 결과 : 방명수 bang ns@kh.kr
SELECT EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE 'bang%';

-- 결과 : 없음
SELECT EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE 'Bang%';
-- 리터럴은 대소문자 철저히 구별하기에 대문자 BANG으로 시작하는 EMAIL이 없어서 안나온 것



-- EMPLOYEE 테이블에서 직원의 부서 코드를 중복 없이 조회
SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;


-- DISTINCT는 한번만 쓸 수 있다
--SELECT DISTINCT DEPT_CODE, DISTINCT DEPT_CODE -- error
--FROM EMPLOYEE;



/*
SELECT 컬럼명 -- 조회하고자 하는 컬럼명 기술
FROM 테이블명 -- 조회하고자 하는 컬림이 포함된 테이블명 기술
WHERE 조건식; -- 행을 선택하는 조건 기술, 조건을 만족하는 행만 반환
             -- 조건식 복수로 붙여서 사용가능. 복수라도 WHERE절 한개만 기술


--비교연산자
>, <, >=, <=, = ,!= 

크다, 작다, 크거나 같다
같다 : =
같지않다 : != , ^= , <>
*/

--EMPLOYEE테이블에서 부서코드가 'D9'인 직원의 이름, 부서코드 조회
SELECT  EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';



-- '' 없이 D9만 쓰면 컬럼으로 인지하게 됨
-- 'd9'라고 써도 안됨. 리터럴은 대소문자 구분



--급여가 4000000이상인 직원의 이름, 급여 조회
-- ''로 감싸도 숫자로 인지잘한다. '' 없어도 됨
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= 4000000;




-- EMPLOYEE테이블에서 부서코드가 D9이 아닌 사원의 사번, 이름, 부서코드조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE != 'D9';
--WHERE DEPT_CODE ^= 'D9';
--WHERE DEPT_CODE <> 'D9';



-- EMPLOYEE 테이블에서 퇴사 여부가 N인 직원을 조회하고 근무 여부를 재직중으로 표시
-- 사번,이름, 고용일, 근무여부 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE, '근무 여부' 재직중
FROM EMPLOYEE
WHERE ENT_YN = 'N';




-------------- 실습문제 --------------
--1.EMPLOYEE테이블에서 월급이 3000000이상인 사원의 이름, 월급, 고용일 조회
--2.EMPLOYEE테이블에서 SAL_LEVEL이 S1인 사원의 이름, 월급, 고용일, 연락처 조회
--3.EMPLOYEE테이블에서 실수령액(총수령액-(연봉*세금3%))이 5천만원 이상인 
--  사원의 이름, 급여, 실수령액, 고용일 조회

SELECT EMP_NAME, SALARY, HIRE_DATE
FROM EMPLOYEE
WHERE SALARY >= 3000000;

SELECT EMP_NAME, SALARY, HIRE_DATE, PHONE
FROM EMPLOYEE
WHERE SAL_LEVEL = 'S1';

SELECT EMP_NAME, SALARY, SALARY+SALARY*(SALARY*BONUS)-(SALARY*12*0.03)실수령액, HIRE_DATE
FROM EMPLOYEE
WHERE SALARY+SALARY*(SALARY*BONUS)-(SALARY*12*0.03) >= 5000000;

------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------



-- 논리 연산자 AND OR
-- EMPLOYEE 테이블에서 부서코드가 D6이고 급여를 3000000보다 많이 받는 직원의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE,SALARY  
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' AND SALARY > 3000000;


-- EMPLOYEE 테이블에서 부서코드가 D6이거나 급여를 3000000보다 많이 받는 직원의 이름,부서코드, 급여조회
SELECT  EMP_NAME, DEPT_CODE,SALARY 
FROM EMPLOYEE
WHERE   DEPT_CODE = 'D6' OR SALARY > 3000000;




-- 1.EMPLOYEE 테이블에서 월급이 4000000이상이고 JOB_CODE가 J2인 사원의 전체 내용 조회
-- 2.EMPLOYEE 테이블에 DEPT_CODE가 D9이거나 D5인 사원 중에 고용일이 02년 1월 1일보다 빠른 사원의
--   이름, 부서코드, 고용일 조회
SELECT *  
FROM EMPLOYEE
WHERE SALARY >= 4000000 AND JOB_CODE ='J2';

SELECT EMP_NAME, DEPT_CODE, HIRE_DATE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9' OR HIRE_DATE < '02/01/01';

--- 다시풀이
SELECT *
FROM EMPLOYEE
WHERE SALARY >= 4000000 AND JOB_CODE = 'J2';

SELECT  EMP_NAME, DEPT_CODE, HIRE_DATE 
FROM EMPLOYEE
WHERE  (DEPT_CODE = 'D9' OR DEPT_CODE = 'D5')
        AND HIRE_DATE < '02/01/01' ;

-- 이 코드는 틀린 코드
-- 기준일보다 작은게 빠른 것. 오늘보다 내일이 더 큰 숫자
-- 날짜를 기준으로 조건식을 쓴다면 ''로 감싸줘야한다
-- 자바나 SQL이나 OR AND는 AND가 우선순위로 먼저 연산
-- OR를 먼저 연산하고 싶다면 소괄호를 쳐줄 것





------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------


-- BETWEEN AND
-- ~이상 ~이하

-- EMPLOYEE 테이블에서 급여를 3500000이상 6000000이하를 받는 사원의 사번, 이름, 급여, 부서코드, 직급코드 조회
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE  
WHERE SALARY >= 3500000 AND SALARY <= 6000000;

SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE 
WHERE SALARY BETWEEN 3500000 AND 6000000;

---다시 풀이
SELECT  EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE 
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 6000000;
SELECT  EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE 
FROM EMPLOYEE
WHERE SALARY>=3500000 AND SALARY <=6000000;


-- 반대로 급여를 3500000미만 6000000초과를 받는 사원의 사번, 이름, 급여, 부서코드, 직급코드 조회
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
--WHERE SALARY < 3500000 OR SALARY > 6000000; 
--WHERE SALARY NOT BETWEEN 3500000 AND 6000000;
WHERE NOT SALARY BETWEEN 3500000 AND 6000000;

-------실습문제-------
-- 1.EMPLOYEE 테이블에 고용일이 90/01/01 ~ 01/01/01인 사원의 전체 내용을 조회
-- 시간의축을 가로선상에 놓고 보면 시간과 연산자 사용계산이 쉬워짐

SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '01/01/01';

SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE BETWEEN '90/01/01' AND  '01/01/01';

-- WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '01/01/01';

---다시풀이
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE BETWEEN '90/01/01' AND '01/01/01';
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <='01/01/01';


------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------

/*
-- LIKE
비교하려는 값이 특정 패턴을 만족시키는지 조회
ex) 이멜에 i가 들어가는 것을 조회, 이름이 김씨가 들어간 사람들 조회

와일드카드 2종류
 _ : 1글자
 % : 0글자 이상

ex)
'_' (한글자)
'__' (두글자)
'___' (세글자)

 '글자%' : 글자로 시작하는 값
    글자 뒤로 뭐가와도 ok
    ex) 글자최고, 글자(공백), 글자왕, 글자
 '%글자' : 글자로 끝나는 값
    글자 앞에 뭐가와도 ok
    ex) 먹글자, 한글은 글자, (공백)글자
 '글%자' : 글로 시작해서 자로 끝나는 값
    글과 자 사이 뭐가와도 ok
    ex)글씨를 잘쓰자, 글자, 글과자, 글(공백)자
 '%글자%' : 글자가 포함되어있는 값
        ex) 한글자값, 먹글자, 글자, 한두글자

*/

--EMPLOYEE 테이블에서 성이 전씨인 사원의 사번, 이름, 고용일 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';
-- WHERE EMP_NAME LIKE '전__';
-- 도 가능하나 이름이 세글자인 사람들만 가능해서 이름이 두글자나 네글자이상이면 정확도가 떨어짐



--EMPLOYEE 테이블에서 이름이 '하'가 포함된 직원의 이름, 주민번호, 부서코드 조회
SELECT EMP_NAME, EMP_NO, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%하%';


--EMPLOYEE 테이블에 전화번호 4번째 자리가 9로 시작하는 사원의 사번, 이름, 전화번호 조회
-- 전번 양식 : 01012345678
-- 01X 세자리 + 9로 시작하는 네번지째 자릿수
SELECT EMP_ID, EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9%';

---RE
SELECT EMP_ID, EMP_NAME,PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9%';


--EMPLOYEE 테이블에서 이메일 중 _의 앞 글자가 3자리인 이메일 주소를 가진 사원의 사번, 이름, 이메일 주소 조회
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___ _%' ESCAPE ' ';

--RE
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___!_%' ESCAPE '!';



/*
LIKE를 쓸 때 패턴!
와일드카드 : _ %
각각 한글자,와 0글자 이상을 나타내는 와일드 카드

세글자 자릿수 언더바 3개 + 검색하고자 하는 데이터로의 언더바 1개 = 총4개의 언더바
검색하고자 하는 패턴의 문자와 와일드 카드가 일치할 경우에는 패턴과 와일드 카드를 구분하지 못하기 때문에
ESCAPE OPTION을 통해 구분해준다
 - 패턴(데이터)으로 쓸 것 앞에 구분기호 사용

*/


------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------



--  ESCAPE 식별자

-- EMPLOYEE테이블에서 김씨 성이 아닌 직원의 사번, 이름, 고용일 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE
FROM EMPLOYEE
--WHERE EMP_NAME NOT LIKE '김%';
WHERE NOT EMP_NAME LIKE '김%';

---RE
SELECT EMP_ID, EMP_NAME, HIRE_DATE
FROM EMPLOYEE
WHERE EMP_NAME NOT LIKE '김%';

--WHERE NOT EMP_NAME LIKE '김%';
-- NOT 순서 : 해당 컬럼명 앞뒤 둘 다 가능

/*
WHERE EMP_NAME != '김%'; 
 = 혹은 != '김%'으로 검색하면 '김%' 데이터자체를 검색
LIKE '김%' 뒤에 어떤게 오든 상관없다
LIKE와 사용하는 % _ 는 와일드카드 적용받는다    
    LIKE는 문자에 대한 패턴 검색하는 것

!= '김%'에서는 이름이 김%인 사람을 찾는 것(리터럴 김% 데이터를 찾는 것)
    여기서 %는 와일드카드로 적용이 되지 않고 그냥 순수 기호 %인 것

*/

-----------실습문제-----------
--1.EMPLOYEE 테이블에서 이름 끝이 '연'으로 끝나는 사원 이름 조회
--2.EMPLOYEE 테이블에서 전화번호 처음 세자리가 010이 아닌 사원의 이름, 전화번호 조회
--3.EMPLOYEE 테이블에서 메일주소 _의 앞이 4자이면서 DEPT_CODE가 D9 또는 D6이고
--  고용일이 90/01/01 ~ 00/12/01이고, 급여가 2700000만 이상인 사원의 전체 정보 조회
SELECT EMP_NAME
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%연';

SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';

SELECT *
FROM EMPLOYEE
WHERE EMAIL LIKE '____!_%' ESCAPE '!'
        AND (DEPT_CODE = 'D9' OR DEPT_CODE = 'D6')
        -- AND (HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '00/12/01')
        AND HIRE_DATE BETWEEN '90/01/01' AND '00/12/01'
        AND SALARY >= 2700000;


---RE
SELECT EMP_NAME
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%연';

SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';

SELECT *
FROM EMPLOYEE
WHERE EMAIL LIKE '____!_%' ESCAPE '!' 
            AND (DEPT_CODE = 'D9' OR DEPT_CODE = 'D6')
            AND HIRE_DATE BETWEEN '90/01/01' AND '00/12/01'
            AND SALARY >= 2700000;

------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------

-- IS NULL
-- IS NOT NULL
-- 컬럼값이 NULL이냐
-- 컬럼값이 NULL이 아니냐

--EMPLOYEE 테이블에서 보너스를 받지 않는 사원의 사번, 이름, 급여, 보너스 조회
SELECT EMP_ID, EMP_NAME,SALARY,BONUS
FROM EMPLOYEE
WHERE BONUS IS NULL;
---RE
SELECT EMP_ID, EMP_NAME,SALARY,BONUS
FROM EMPLOYEE
WHERE BONUS IS NULL;

--WHERE BONUS = NULL; 값 안나옴
--WHERE BONUS = (null); 값 안나옴

--EMPLOYEE 테이블에서 보너스를 받는 사원의 사번, 이름, 급여, 보너스 조회
SELECT EMP_ID, EMP_NAME,SALARY,BONUS
FROM EMPLOYEE
WHERE BONUS IS NOT NULL;
WHERE NOT BONUS IS NULL;
---RE
SELECT EMP_ID, EMP_NAME,SALARY,BONUS
FROM EMPLOYEE
WHERE BONUS IS NOT NULL;

-- WHERE NOT BONUS IS NULL; 
-- NOT은 컬렴명 앞에 붙어도 가능

--WHERE BONUS NOT LIKE '%(null)%';


-- EMPLOYEE 테이블에서 관리자도 없고 부서 배치도 받지 않은 직원의 이름, 관리자, 부서코드 조회
-- EMPLOYEE 테이블에서 부서 배치를 받지 않았지만 보너스를 지급받는 직원의 이름,  보너스, 부서코드 조회
SELECT EMP_NAME, MANAGER_ID, DEPT_CODE
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;


SELECT EMP_NAME, BONUS, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL AND BONUS IS NOT NULL;

---RE
SELECT EMP_NAME, MANAGER_ID, DEPT_CODE
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;

SELECT EMP_NAME, BONUS, DEPT_CODE
FROM EMPLOYEE 
WHERE DEPT_CODE IS NULL AND BONUS IS NOT NULL;


------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------


--IN
-- 목록에 일치하는 값이 있으면 TRUE가 되어 값 반환
-- 목록에 일치하는 값이 있으면 TRUE를 반환


-- D6부서와 D9부서원들의 이름, 부서코드, 급여 조회
-- 직급코드가 J1, J2, J3, J4인 사람들의 이름, 직급코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' OR DEPT_CODE = 'D9';

SELECT EMP_NAME, JOB_CODE, SALARY
FROM EMPLOYEE
--WHERE JOB_CODE = 'J1' OR JOB_CODE = 'J2' OR JOB_CODE = 'J3' OR JOB_CODE =  'J4';
WHERE JOB_CODE IN ('J1','J2','J3','J4'); 

---RE
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE JOB_CODE IN ('J1','J2','J3','J4');


-- 소괄호로 처음 들어가서 D6를 맞딱들이고 각 조건 체크해서 반환. 다음 D9체크



------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------


-- 연결 연산자 ||
-- 자바에서의 or논리연산자의 기호가 SQL에서는 연결연산자
-- EMPLOYEE테이블에서 사번, 이름, 급여를 연결해서 조회 (EX. 200선동일8000000)
SELECT EMP_ID || EMP_NAME || SALARY 급여
FROM EMPLOYEE;


-- EMPLOYEE테이블에서 ' "사원명"의 월급은 "급여"원입니다' 형식으로 조회
SELECT EMP_NAME ||'명의 월급은' || SALARY ||'원 입니다'
FROM EMPLOYEE;
-- 문장으로 쓰고 싶을 경우 필요

---RE
SELECT EMP_NAME, EMAIL || ' 이메일 주소 '||'힘내'
FROM EMPLOYEE;


------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------




--BETWEEN
-- 반대로 급여를 3500000미만 6000000초과를 받는 사원의 사번, 이름, 급여, 부서코드, 직급코드 조회

SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
--WHERE SALARY BETWEEN 3500000 AND 6000000;
WHERE SALARY NOT BETWEEN 3500000 AND 6000000;
-- 1.EMPLOYEE 테이블에 고용일이 90/01/01 ~ 01/01/01인 사원의 전체 내용을 조회 (BETWEEN 사용)
SELECT *
FROM EMPLOYEE
--WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '01/01/01';
WHERE HIRE_DATE BETWEEN '90/01/01' AND '01/01/01';

-- LIKE
--EMPLOYEE 테이블에서 이메일 중 _의 앞 글자가 3자리인 이메일 주소를 가진 사원의 사번의 사번, 이름, 이메일 주소 조회
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___^_%' ESCAPE '^';

-- NULL
-- EMPLOYEE 테이블에서 부서 배치를 받지 않았지만 보너스를 지급받는 직원의 이름,  보너스, 부서코드 조회
SELECT EMP_NAME, BONUS, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL AND BONUS IS NOT NULL;

-- IN
-- 직급코드가 J1, J2, J3, J4인 사람들의 이름, 직급코드, 급여 조회
SELECT EMP_NAME, JOB_CODE, SALARY
FROM EMPLOYEE
--WHERE JOB_CODE = 'J1' OR JOB_CODE = 'J2' OR JOB_CODE = 'J3' OR JOB_CODE = 'J4';
WHERE JOB_CODE IN ('J1','J2','J3','J4');

-----------실습문제-----------
--1.EMPLOYEE 테이블에서 이름 끝이 '연'으로 끝나는 사원 이름 조회
--2.EMPLOYEE 테이블에서 전화번호 처음 세자리가 010이 아닌 사원의 이름, 전화번호 조회
--3.EMPLOYEE 테이블에서 메일주소 _의 앞이 4자이면서 DEPT_CODE가 D9 또는 D6이고
--  고용일이 90/01/01 ~ 00/12/01이고, 급여가 2700000만 이상인 사원의 전체 정보 조회

SELECT EMP_NAME
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%연';

SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';

SELECT  *
FROM EMPLOYEE
WHERE EMAIL LIKE '____!_%' ESCAPE '!' 
        AND (DEPT_CODE 'D9' OR DEPT_CODE 'D6')
        AND HIRE_DATE '90/01/01' AND '00/12/01'
        AND SALARY >= 2700000;

 

 

 

 

728x90
반응형
728x90

출처: <https://www.youtube.com/watch?v=sQEmlaNXJZk&list=PLuHgQVnccGMDkdt3N9tT0aZPZx5-Ri2jo&index=1>

 

JAVA method - 1. 수업소개

코드의 양이 많아지면 정리하고 싶게 될 것인데, 연관된 코드를 모아서 그루핑(grouping)하고 이름을 붙이면 이것이 함수(function)이고 자바에서는 메소드라고 부름

이미 만들어 놓은 메소드를 사용해서 똑같은 코드를 다시 작성할 필요 없이 재사용 가능

 

 


 

JAVA method - 2. 이미 익숙한 메소드

메인 메소드를 쓰면서 이미 메소드를 사용해옴

main도 메인이라는 메소드. 처음부터 끝까지 하나의 메소드

println()도 입력값을 모니터로 출력하는 메소드

math.floor(1.1)); // 내림 메소드. 1.1을 1.0으로

 


 

JAVA method - 3. 메소드의 기본 형식

반복되는 1억줄의 코드를 하나씩 변경해야한다면?

연관된 코드를 그루핑해서 이름을 붙이자(메소드 작성)

아래처럼 반복되는 코드를 따로 메소드를 만들어서 관리(수정)할 때도 편하고 코드도 줄어들어서 필히 사용해야할 기능

 

 

public static void printTwoTimesA() {

이 줄을 보고 자바는 이런 메소드 있고 이런 내용을 가졌구나 하고 기억해둠

 

 

System.out.println("A"); // 둘이 같은 코드

printTwoTimesA();
  • 여기서 코드수정시 이 메소드를 쓴 모든 코드에 적용되어 엄청난 생산성업

 

 

 

public class method010203 {
	public static void printTwoTimesA() {// 이 줄울 보고 자바는 이런 메소드 있고 이런 내용을 가졌구나
		System.out.println("-");		 // 하고 기억해둠
		System.out.println("A");		 // 여기서 코드수정시 이 메소드를 쓴 모든 코드에 적용되어 엄청난 생산성업
		System.out.println("A");
	}
	public static void main(String[] args) { // 여기 main도 메인이라는 메소드. 처음부터 끝까지
		System.out.println("hello"); // println도 입력값을 모니터로 출력해주는 메소드
		System.out.println(Math.floor(1.1)); // 내림 메소드. 1.1을 1.0으로
		
	
		// 1억번 반복
		printTwoTimesA();
//		// 1억번 반복
//		System.out.println("-");
//		System.out.println("A");
//		System.out.println("A");
//		// 1억번 반복
//		System.out.println("-");
//		System.out.println("A");
//		System.out.println("A"); // 이 반복되는 코드들을 위에 만들어둔 메소드 printTwoTimesA로 변경
		// 1억번 반복				 // 같은 일하게 된다
		printTwoTimesA();		
		// 1억번 반복
		printTwoTimesA();
		
		// 이클립스 refactoring 기능
		// 매소드로 만들기를 원하는 부분을 드래그 범위 지정-우클릭 refactoring 클릭-우측 extract method 클릭
		// 프리뷰 기능을 이용하여 어찌 바뀔껀지 미리 확인가능
	}

}

 

 

※ 이클립스 리팩토링refactoring : 메소드화 기능

이클립스 refactoring기능을 이용하면 해당 부분을 쉽게 메소드화 가능하다

[메소드로 만들기를 원하는 부분을 드래그 범위 지정] - [우클릭 refactoring 클릭] - [우측 extract method 클릭]

 

 - 프리뷰 기능을 이용하여 어찌 바뀔껀지 미리 확인가능

728x90
반응형

+ Recent posts