[Linux]부트캠프 - 파일 및 폴더 생성
파일 및 폴더 생성
왼쪽정렬/오른쪽정렬
정렬 후 두번째 파라미터의 숫자만큼 공간을 만들고, 세번째 적은 파라미터로 백을 대체한다.
예시1
LPAD 왼쪽정렬
SELECT lpad(ename, 7, '*') FROM emp;

예시2
RPAD 오른쪽정렬
SELECT rpad(ename,10,'*') FROM emp;

문자열을 잘라내기(다듬기)
첫 번째 파라미터에는 다듬을 문자열을, 두번째 파라미터는 지울 값을 적음
실행 후 공백에서 다듬기를 멈춘다.
예시1
SELECT ltrim('xyxzyygoodjeon 0513', 'xyz') FROM dual;

예시2
SELECT rtrim('goodjeon5 0513', '0123456789') FROM dual;

공백도 잘라주고 싶다면, 두 번째 파라미터 공백도 추가하면 된다.

문자열로부터 문자를 하나만 제거하는 것
양쪽에서 제거할 문자중 하나만 제거한다.
예시
SELECT trim('x' FROM 'xyxzyyTech6 327') FROM dual;

첫번째 파라미터에 한 개 이상의 값을 적으면 에러가 난다.
문자열에서 원하는 위치의 값만 가져오는 것
첫 번째 파라미터에는 문자열, 두 번째에는 시작 위치, 세 번째 파라미터는 가져올 길이를 적어줘야한다.)
시작위치를 양수로 잡으면 왼쪽부터 오른쪽, 음수로 잡으면 오른쪽(끝)부터 왼쪽(시작)방향으로 간다.
또한, 오라클에서는 인덱스가 0부터가 아닌 1부터 시작한다.
예시
사원이름에서 두 번째 글자만 가져오는 것
SELECT substr(ename,2,1) FROM emp;

뒤에서 두번째 부터 마지막 까지 찾아오기
SELECT substr(ename, -2) FROM emp;

인덱스 값을 찾아오는 것
첫 번째 파라미터에는 문자열, 두 번째는 인덱스를 찾을 문자, 세 번째는 시작위치, 네 번째는 찾을 개수를 적어주면 된다.
시작위치의 양수, 음수에 따른 방향은 SUBSTR과 같다.
인덱스 값은 무조건 왼쪽 기준으로 생각하면된다.
예시1
사원 이름에서, S값의 인덱스를 찾을 것이고, 첫번 째 값을 찾을 것
SELECT ename, instr(ename, 'S', 1, 1) FROM emp;

예시2
뒤에서 부터 a를 찾을 것인데, 두 번째 a의 인덱스 값을 찾을 것이다.
SELECT instr('adcccva', 'a', -1, 2) FROM dual;

ROUND는 반올림
TRUNC는 버리기
첫 파라미터에는 실수, 두 번째는 반올림하거나 버릴 자리 수를 적어줌
예시1
소수점 자리를 다 반올림한 경우
SELECT round(123.456) FROM dual;

예시2
소수점 첫 번째 자리 기준으로 반올림
SELECT round(123.456, 1) FROM dual;

예시3
소수점 첫 번째 자리 기준으로 밑은 버리기
SELECT trunc(123.456, 1) FROM dual;

예시4
1의 자리 수 버리기
SELECT trunc(123.456, -1) FROM dual;

올림 / 버림
예시1
SELECT ceil(123.456) FROM dual;

예시2
인수의 개수가 부적합할 때
SELECT floor(123.456, 1) FROM dual;

말그대로 선택한 날짜부터 개월수를 날짜를 더해서 값을 반환하는 것
예시
입사 뒤 10주년을 구해보자.
SELECT ename, hiredate, ADD_MONTHS(hiredate, 120) FROM emp;

지정한 두 날짜의 개월수를 반환
예시
SELECT ename, job, hiredate, trunc(MONTHS_BETWEEN('2000/01/01', hiredate)/12)
FROM emp WHERE MONTHS_BETWEEN('2000/01/01', hiredate) > 120;

NUMBER <-> CHAR <-> DATE
이런 식으로 무조건 형태를 거쳐야한다. DATE에서 NUMBER로 건너뛰기 안된다.
TO_CHAR number 표현 예시
SELECT TO_char(1234, '99999') AS tochar1, to_char(1234, '00000') AS tochar2, to_char(1234,'l9999') AS tochar3,
TO_char(1234, '9,999') AS tochar4 FROM dual;

99999 단순한 자리 채우기, 00000은 빈자리를 0으로 채우기, l9999는 l자리에 원화표시 넣기, 9,999는 원하는 자리에 콤마를 넣어준 것TO_CHAR date 표현 예시
to_char를 사용해 날짜를 원하는 형식의 문자열로 바꿀 수 있다.
SELECT
to_char(sysdate, 'HH24:MI:SS') AS q1,
to_char(sysdate, 'MON DY, YYYY') AS q2,
to_char(sysdate, 'YYYY-FMMM-DD DAY') AS q3,
to_char(sysdate, 'YYYY-MM-DD') AS q4,
to_char(sysdate, 'YEAR, Q') AS q5
FROM dual;

TO_DATE 예시
숫자를 날짜형식으로 바꿔줌
SELECT to_date('20220307', 'YYYYMMDD') FROM dual;

숫자를 날짜로 바꾸고 문자로 바꾸기
SELECT to_char(to_date('20220307', 'yyyymmdd'), 'yyyy, mon') FROM dual;

SELECT to_char(to_date('220307 101201', 'yymmdd hh24miss'), 'yy-mm-dd am fmhh:mi:ss') FROM dual;

TO_NUMBER 예시
입사일 데이터에서 년도와 월을 가져오자.
DBeaver 기준이 아닌 cmd창 기준의 날짜로 잘라줘야한다.
DBeaver에서 HIREDATE를 그냥 조회하면 1980-12-17 00:00:00.000 이런 형식이다.
CMD에서 확인하면 80/12/17 이런 형식이다.
SELECT ename, to_number(substr(hiredate, 1, 2)), to_number(substr(HIREDATE, 4, 2)) FROM emp;

조건에 맞는다면 원하는 값으로 바꿔주고, 아니라면 NULL을 반환
첫번째 파라미터에는 비교할 값, 두 번째에는 속성값(조건), 세 번째에는 반환할 값
예시
사원 테이블에서 직업이 매니져인 사람은 0으로
SELECT ename, job, decode(job, 'MANAGER', '0') FROM emp;

CASE WHEN 조건 THEN 참일 때 반환값 [, WHEN THEN ...] [ELSE 거짓일 때 반환값] END ELSE 지정하지 않으면 거짓일 때 NULL 반환
예시
월급이 1000이하면 초급, 2000이하면 중급, 그게아니라면 고급으로 나타내라.
SELECT ename, sal, CASE WHEN sal <= 1000 THEN '초급' WHEN sal <= 2000 THEN '중급' ELSE '고급' END FROM emp;

사원 테이블에서 직업이 MANAGER인 사원은 1, SALESMAN 인 사원은 2, 아니면 3 을 출력하자.
SELECT ename, job, CASE WHEN job = 'MANAGER' THEN 1 WHEN job = 'SALESMAN' THEN 2 ELSE 3 END FROM emp;

평균, 최소값, 최대값 등을 구하는 함수
count, max, min, sum, avg 등등…
기본적으로 연산에서 NULL을 제외한다.
그래서 NVL(대상, 대체값) 을 사용해야한다.
예시
SELECT count(comm), count(nvl(comm, 0)) FROM emp;

단순히 커미션이 널이 아닌애들만 카운트하는 count(comm)과 NULL값을 0으로 대체하는 count(nvl(comm, 0))으로 했을 때의 차이를 보여준다.
사원의 연봉을 출력해보자. (comm의 null값을 생각해야 함)
SELECT ename, sal * 12 + nvl(comm, 0) FROM emp;

rollup, cube, grouping sets
일반적으로 집계함수와 같이 사용
rollup : 순서에 맞게 중간 집계 추가
cube : 모든 중간 집계 추가
grouping sets : 그룹함수의 결과에 원하는 결과를 추가
ROLLUP 예시
SELECT job, deptno, avg(sal) FROM emp GROUP BY rollup(job, deptno);

CUBE 예시
SELECT job, deptno, avg(sal) FROM emp GROUP BY cube(job, deptno);

GROUPING SETS 예시
SELECT JOB, DEPTNO, AVG(SAL) FROM EMP GROUP BY GROUPING SETS(ROLLUP(JOB, DEPTNO), DEPTNO);

식별자로 사용하며, 수정이 불가하다.
예시
NO라는 넘버타입의 컬럼을 만들어 줌
CREATE TABLE RT(NO NUMBER);
INSERT INTO RT VALUES(1111);
INSERT INTO RT VALUES(2222);
INSERT INTO RT VALUES(3333);
SELECT ROWID, ROWNUM, NO FROM RT;

ROWID와 ROWNUM을 따로 만들어 준 적이 없는데 자동으로 만들어졌다.
그 뜻은 컴퓨터가 내부적으로 한 줄(ROW)를 저렇게 관리하고 있다는 것을 알 수 있다. 특히, ROWNUM은 엑셀의 행번호를 생각하면 된다. 그리고 ROWNUM은 그 테이블의 상황마다 유동적으로 바뀐다.
DELETE FROM RT WHERE NO = 3333;
DELETE FROM RT WHERE NO = 1111;
SELECT ROWID, ROWNUM, NO FROM RT;

RANK 함수를 지원하지 않는 DBMS도 있을 수도 있기 때문에 사용할 줄 알아야한다.
예시
월급 1위부터 4위까지 출력해보자.
SELECT ENAME, SAL, ROWNUM FROM EMP;

SELECT ENAME, SAL, ROWNUM FROM EMP ORDER BY SAL DESC;

ROWNUM이 뒤죽박죽이다. ROWNUM은 INSERT 순서에 따라 매겨지기 때문이다. 따라서 가상테이블을 만들어 정렬해야한다.
SELECT ENAME, SAL, ROWNUM FROM
(SELECT ENAME, SAL FROM EMP ORDER BY SAL DESC);

이러면 ROWNUM이 정리되는 것을 확인할 수 있다.
SELECT ENAME, SAL, ROWNUM FROM
(SELECT ENAME, SAL FROM EMP ORDER BY SAL DESC)
WHERE ROWNUM <= 4;

이렇게 월급이 많은 1~4위를 구할 수 있다.
만약 월급 순위 3~5위를 구하고 싶다면,
SELECT ENAME, SAL, RN
FROM (SELECT ENAME, SAL, ROWNUM AS RN FROM
(SELECT ENAME, SAL FROM EMP ORDER BY SAL DESC))
WHERE RN >=3 AND RN <=5;
ROWNUM=4 이런 식으로 하면 오라클 자체적으로 다루고 있는 ROWNUM이 안잡히기 때문에 서브쿼리를 이용해서 가상테이블을 한번 더 만들어준다. RN이라는 별칭을 붙여 컬럼을 한번 더 만들어 원하는 값을 접근할 수 있게 만들어 준 것RANK는 동일 순위를 표현하고 다음 순위를 나타낼 때 그 동일순위의 인간 수를 반영해서 다음 순위를 나타냄
DENSE_RANK는 동일 순위의 인간 수를 반영하지 않고 바로 다음 순위를 나타낸다.
ROW_NUMBER는 동일 순위를 표현하지 않고 그냥 무조건 순위를 매긴다.
예시를 보고 이해하는게 빠를 것 같다.
SELECT ENAME, SAL,
RANK() OVER(ORDER BY SAL DESC) AS RANK,
DENSE_RANK() OVER(ORDER BY SAL DESC) AS DESNE,
ROW_NUMBER() OVER(ORDER BY SAL DESC) AS ROWNB
FROM EMP;

--1 사원 테이블에서 사원의 이름을 첫글자는 대문자로, 나머지는 소문자로 출력하자.
SELECT SUBSTR(ENAME,1,1)||SUBSTR(LOWER(ENAME),2) AS GOOD
FROM EMP;
--2 사원 테이블에서 사원의 이름을 출력, 이름의 두 번째 글자부터 네 번째 글자까지 추력
SELECT ENAME, SUBSTR(ENAME, 2,3)
FROM EMP;
--3 사원테이블에서 사원 이름과 근무일수(고용일 ~ 현재 날짜)를 출력 (한달은 30일)
SELECT ENAME, (MONTHS_BETWEEN('2022-03-07', HIREDATE)*30)
FROM EMP;
--4 사원 테이블에서 각 사원 이름의 철자 개수를 출력
SELECT ENAME, LENGTH(ENAME) FROM EMP;
--5 사원 테이블에서 사원의 이름이 M으로 시작하는 사원들의 이름을 출력
SELECT ENAME
FROM EMP
WHERE SUBSTR(ENAME, 1,1) = 'M';
INITCAP() 함수를 사용해도 된다.SYSDATE를 사용해도 된다.ENAME LIKE 'M%'; 를 사용해도 된다.결과가 1개의 ROW
예시
월급이 JONES보다 큰 경우에 사원이름과 월급을 조회
SELECT ENAME, SAL
FROM EMP
WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'JONES');

결과가 여러 개의 ROW
예시
부하 직원이 없는 사원의 사번과 이름 조회
SELECT MGR FROM EMP;

매니저 번호에 사원번호가 있으면 부하직원이 있다는 뜻
SELECT EMPNO, ENAME
FROM EMP
WHERE EMPNO NOT IN (SELECT NVL(MGR, 0) FROM EMP);

결과가 여러 개의 COLUMN
예시
조건1 : 직업이 ‘SALESMAN’인 사원과 같은 부서에서 근무
조건2 : 직업이 ‘SALESMAN’인 사원과 같은 월급을 받는 사원들의 이름, 월급, 부서번호를 조회
SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE (DEPTNO, SAL) IN (SELECT DEPTNO, SAL FROM EMP WHERE JOB = 'SALESMAN');

결과가 가상테이블로 사용되는 경우
예시
자신의 부서 평균 월급보다 더 많이 받는 사원들의 이름, 월급, 부서번호, 부서별 평균 월급을 조회
SELECT E.ENAME, E.SAL, MYDEPT.DEPTNO, MYAVG
FROM EMP E,
(SELECT DEPTNO, AVG(SAL) AS MYAVG FROM EMP GROUP BY DEPTNO) MYDEPT
WHERE E.DEPTNO = MYDEPT.DEPTNO
AND E.SAL > MYDEPT.MYAVG;
집계함수를 컬럼명으로 쓸 수 없기 때문에 MYAVG로 ALIAS를 잡아줌

--1. 'CHICAGO'에서 근무하는 사원들과 같은 부서에서 근무하는 사원의 이름과 월급을 출력
-- 내꺼
SELECT ENAME, SAL
FROM EMP E,
(SELECT DEPTNO FROM DEPT WHERE LOC='CHICAGO') CHICAGO
WHERE E.DEPTNO = CHICAGO.DEPTNO;
--2. 관리자의 이름이 'KING'인 사원의 이름과 월급을 출력
-- 내꺼
SELECT ENAME, SAL
FROM EMP E, (SELECT EMPNO FROM EMP WHERE ENAME='KING') KING
WHERE E.MGR = KING.EMPNO;
--강사님꺼
SELECT ENAME, SAL
FROM EMP
WHERE MGR = (SELECT EMPNO FROM EMP WHERE ENAME='KING');
--3. 전체 사원 중, 20번 부서의 사원 중 가장 많은 월급을 받는 사원보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력
-- 내꺼
SELECT ENAME, SAL
FROM EMP E, (SELECT MAX(SAL) AS MAXSAL FROM EMP GROUP BY DEPTNO HAVING DEPTNO = 20) GOOD
WHERE E.SAL > GOOD.MAXSAL;
-- 강사님꺼
SELECT ENAME, SAL
FROM EMP
WHERE SAL >
(SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO = 20);
--4. 전체 사원 중, 직업이 'SALESMAN'인 사원 중 가장 많은 월급을 받는 사원보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하되,
--MAX()함수 사용 X (ANY, ALL 연산자)
-- 내꺼
SELECT ENAME, SAL
FROM EMP
WHERE SAL > ALL(SELECT SAL FROM EMP WHERE JOB = 'SALESMAN');
-- 강사님꺼
SELECT ENAME, SAL
FROM EMP
WHERE SAL > ALL
(SELECT SAL
FROM EMP
WHERE JOB = 'SALESMAN');
--5. 'BLAKE'가 근무하는 부서의 위치(LOC)를 출력
--내꺼
SELECT LOC
FROM DEPT D, (SELECT DEPTNO FROM EMP WHERE ENAME='BLAKE') BLAKE
WHERE D.DEPTNO = BLAKE.DEPTNO;
--강사님꺼
SELECT LOC
FROM DEPT
WHERE DEPTNO =
(SELECT DEPTNO
FROM EMP
WHERE ENAME = 'BLAKE');
--6. 이름에 'S'가 들어가는 사원과 동일한 부서에서 근무하는 사원 중, 자신의 월급이 전체 사원의 평균 월급보다 많은 사원들의 사원번호, 이름, 월급을 출력
--내꺼
SELECT DISTINCT E.EMPNO, E.ENAME, E.SAL
FROM EMP E,(SELECT DEPTNO,SAL FROM EMP WHERE ENAME LIKE '%S%') S, (SELECT AVG(SAL) AVGSAL FROM EMP) AVGSAL
WHERE E.DEPTNO = S.DEPTNO AND AVGSAL.AVGSAL < E.SAL;
--강사님꺼
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE DEPTNO IN
(SELECT DEPTNO
FROM EMP
WHERE ENAME LIKE '%S%')
AND SAL > (SELECT AVG(SAL) FROM EMP);
--7. 사원번호가 7369인 사원과 같은 직업이고, 사원번호가 7876인 사원보다 많이 받는 사원의 이름과 직업을 출력
-- 내꺼 1
SELECT E.ENAME, E.JOB
FROM EMP E ,(SELECT EMPNO, JOB FROM EMP WHERE EMPNO = 7369) CLERK, (SELECT ENAME, EMPNO, SAL FROM EMP WHERE EMPNO = 7876) NO7876
WHERE NO7876.SAL < E.SAL AND CLERK.JOB = E.JOB;
-- 내꺼 2
SELECT ENAME, JOB FROM EMP WHERE JOB = (SELECT JOB FROM EMP WHERE EMPNO = 7369) AND SAL > (SELECT SAL FROM EMP WHERE EMPNO = 7876);
-- 강사님꺼
SELECT ENAME, JOB
FROM EMP
WHERE JOB =
(SELECT JOB
FROM EMP
WHERE EMPNO = 7369)
AND SAL > (SELECT SAL FROM EMP WHERE EMPNO = 7876);
SELECT 컬럼 FROM 테이블A INNER JOIN 테이블B ON 테이블A.컬럼 = 테이블B.컬럼SELECT 컬럼 FROM 테이블A, 테이블B WHERE 테이블A.컬럼 = 테이블B.컬럼SELECT 컬럼 FROM 테이블A INNER JOIN 테이블B USING(컬럼)
USING을 사용해도 된다!SELECT 컬럼 FROM 테이블A CROSS JOIN 테이블BSELECT 컬럼 FROM 테이블A CROSS JOIN 테이블BSELECT 컬럼 FROM 테이블A LEFT OUTER JOIN 테이블B ON 테이블A.컬럼 = 테이블B.컬럼
SELECT 컬럼 FROM 테이블A, 테이블B WHERE 테이블A.컬럼 = 테이블B.컬럼(+)
(+)를 적어주면 된다.SELECT 컬럼 FROM 테이블A RIGHT OUTER JOIN 테이블B ON 테이블A.컬럼 = 테이블B.컬럼
SELECT 컬럼 FROM 테이블A, 테이블B WHERE 테이블A.컬럼(+) = 테이블B.컬럼
(+)를 적어주면 된다.SELECT 컬럼 FROM 테이블A FULL OUTER JOIN 테이블B ON 테이블A.컬럼 = 테이블B.컬럼(+) 형식은 쓰이지 않음JOIN 할 두 테이블에 일치하는 값이 있는 컬럼이 없을 때
예제
사원(EMP)테이블
SELECT * FROM EMP;

월급(SALGRADE)테이블
SELECT * FROM SALGRADE;

사원들의 월급 등급을 합쳐서 보고싶음
SELECT ENAME, SAL, GRADE
FROM EMP E JOIN SALGRADE SG ON (E.SAL BETWEEN SG.LOSAL AND SG.HISAL);

JOIN 할 두 테이블에 일치하는 값이 있는 컬럼이 없을 때
자기 자신을 조인함
예제
사원의 관리자 이름과 사번을 가져와보자.
SELECT 사원.ENAME, 사원.EMPNO, 관리자.ENAME, 관리자.EMPNO
FROM EMP 사원, EMP 관리자
WHERE 사원.MGR = 관리자.EMPNO;

관리자가 없는 ‘KING’의 정보까지 가져오고 싶으면 LEFT OUTER JOIN을 해야함
오라클에서는 조인 당하는 쪽에 (+)를 적어주며 된다.
SELECT 사원.ENAME, 사원.EMPNO, 관리자.ENAME, 관리자.EMPNO
FROM EMP 사원, EMP 관리자
WHERE 사원.MGR = 관리자.EMPNO(+);

그러면 관리자가 없는 사원의 정보도 나온다.
ANSI 표준 으로 적어줘야한다면
SELECT 사원.ENAME, 사원.EMPNO, 관리자.ENAME, 관리자.EMPNO
FROM EMP 사원 LEFT OUTER JOIN EMP 관리자 ON (사원.MGR = 관리자.EMPNO);
--QUIZ
--1 사원들의 이름, 부서번호, 부서이름을 출력하자.
--내꺼
SELECT E.ENAME, E.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
-- 강사님꺼
SELECT E.ENAME, E.DEPTNO, D.DNAME
FROM EMP E JOIN DEPT D ON(E.DEPTNO = D.DEPTNO);
SELECT ENAME, DEPTNO, DNAME
FROM EMP JOIN DEPT USING(DEPTNO);
--2 ‘DALLAS’에서 근무하는 사원의 이름, 직업, 부서번호, 부서이름을 출력하자.
-- 내꺼
SELECT E.ENAME, E.JOB, E.DEPTNO, D.DNAME
FROM EMP E, (SELECT * FROM DEPT WHERE LOC = 'DALLAS') D
WHERE E.DEPTNO = D.DEPTNO;
-- 강사님꺼
SELECT E.ENAME, E.JOB, D.DEPTNO, D.DNAME
FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO) WHERE D.LOC = 'DALLAS';
SELECT ENAME, JOB, DEPTNO, DNAME
FROM EMP JOIN DEPT USING(DEPTNO)
WHERE LOC = 'DALLAS';
--3 이름에 ‘A’가 들어가는 사원들의 이름과 부서이름을 출력하자.
-- 내꺼
SELECT E.ENAME, D.DNAME
FROM (SELECT * FROM EMP WHERE ENAME LIKE '%A%') E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
--강사님꺼
SELECT E.ENAME, D.DNAME
FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)
WHERE E.ENAME LIKE '%A%';
SELECT ENAME, DNAME
FROM EMP JOIN DEPT USING(DEPTNO)
WHERE ENAME LIKE '%A%';
--4 사원의 이름과 부서이름, 월급을 출력하되, 월급이 3000 이상인 사원들만 출력하자.
-- 내꺼
SELECT E.ENAME, D.DNAME, E.SAL
FROM (SELECT * FROM EMP WHERE SAL >= 3000) E INNER JOIN DEPT D
USING(DEPTNO);
--강사님꺼
SELECT E.ENAME, D.DNAME, E.SAL
FROM EMP E JOIN DEPT D ON(E.DEPTNO = D.DEPTNO)
AND E.SAL >= 3000;
SELECT ENAME, DNAME, SAL
FROM EMP JOIN DEPT USING(DEPTNO)
WHERE SAL >= 3000;
--5 사원테이블과 급여테이블(SALGRADE)에서 커미션이 책정된 사원들의 사원번호, 이름, 연봉, 연봉+커미션, 급여등급(GRADE)을 출력하자.
-- 내꺼
SELECT E.EMPNO, E.ENAME, E.SAL*12, E.SAL*12+COMM, S.GRADE
FROM (SELECT * FROM EMP WHERE COMM IS NOT NULL) E JOIN SALGRADE S
ON (E.SAL BETWEEN S.LOSAL AND S.HISAL);
--강사님꺼
SELECT EMPNO, ENAME, SAL*12, SAL*12+NVL(COMM,0), SG.GRADE
FROM EMP E JOIN SALGRADE SG ON(E.SAL BETWEEN SG.LOSAL AND SG.HISAL)
WHERE COMM IS NOT NULL;
SELECT E.EMPNO, E.ENAME, E.SAL*12, E.SAL*12+NVL(E.COMM,0), SG.GRADE
FROM EMP E, SALGRADE SG
WHERE E.SAL BETWEEN SG.LOSAL AND SG.HISAL
AND E.COMM IS NOT NULL;
--6 부서번호가 10번인 사원들의 부서번호, 부서이름, 사원이름, 월급, 급여등급을 출력하자.
-- 내꺼
SELECT E.DEPTNO, D.DNAME, E.ENAME, E.SAL, S.GRADE
FROM (SELECT * FROM EMP WHERE DEPTNO = 10) E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
INNER JOIN SALGRADE S ON (E.SAL BETWEEN S.LOSAL AND S.HISAL);
--강사님꺼
SELECT DEPTNO, DNAME, ENAME, SAL, GRADE
FROM DEPT JOIN EMP USING(DEPTNO) JOIN SALGRADE ON (SAL BETWEEN LOSAL AND HISAL)
WHERE DEPTNO = 10;
SELECT D.DEPTNO, D.DNAME, E.ENAME, E.SAL, SG.GRADE
FROM DEPT D, EMP E, SALGRADE SG
WHERE D.DEPTNO = E.DEPTNO
AND E.SAL BETWEEN SG.LOSAL AND SG.HISAL
AND E.DEPTNO = 10;
--7 부서번호가 10번이거나 20번인 사원들의 부서번호, 부서이름, 사원이름, 급여등급을 출력하되, 부서번호가 낮은 번호부터, 월급이 높은 순으로 출력하자.
-- 내꺼
SELECT E.DEPTNO, D.DNAME, E.ENAME, S.GRADE
FROM (SELECT * FROM EMP WHERE DEPTNO = 10 OR DEPTNO = 20) E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
INNER JOIN SALGRADE S ON (E.SAL BETWEEN S.LOSAL AND S.HISAL)
ORDER BY E.DEPTNO ASC, E.SAL DESC;
--강사님꺼
SELECT DEPTNO, DNAME, ENAME, GRADE
FROM DEPT JOIN EMP USING(DEPTNO) JOIN SALGRADE ON SAL BETWEEN LOSAL AND HISAL
WHERE DEPTNO IN (10, 20)
ORDER BY DEPTNO, SAL DESC;
--8 사원번호와 이름, 관리자의 사원번호와 관리자이름을 출력하자.
-- 내꺼
SELECT 사원.EMPNO, 사원.ENAME, 관리자.EMPNO, 관리자.ENAME
FROM EMP 사원, EMP 관리자
WHERE 사원.MGR = 관리자.EMPNO(+);
--강사님꺼
SELECT 사원.ENAME, 사원.EMPNO, 관리자.EMPNO, 관리자.ENAME
FROM EMP 사원 JOIN EMP 관리자 ON (사원.MGR = 관리자.EMPNO);
--9 부서이름, 위치, 각 부서의 사원수, 평균 월급을 출력하자.
-- 내꺼
SELECT D.DNAME, D.LOC, COUNT(D.DNAME), AVG(E.SAL)
FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
GROUP BY D.DNAME, D.LOC;
--강사님꺼
SELECT DNAME, LOC, COUNT(*), AVG(SAL)
FROM EMP JOIN DEPT USING(DEPTNO)
GROUP BY DNAME, LOC;
Entity Relationship Diagram
종류
표기 예

사진 출처 : https://dataonair.or.kr/db-tech-reference/d-guide/da-guide/?mod=document&uid=278

사진 출처 : https://dataonair.or.kr/db-tech-reference/d-guide/da-guide/?mod=document&uid=278
| 0 or 1 : 0과 짝대기( | )가 들어간 실선이나 점선 |
| 1 : 짝대기( | )가 들어간 실선, 점선 |
| 0 or more : 0과 짝대기( | )와 까치발이 있는 실선 혹은 점선 |
| 1 or more : 짝대기( | )와 까치발이 있는 실선 혹은 점선 |
파일 및 폴더 생성
파일 시스템 탐색
도움말(man -> manual)
명령어 기초
유닉스(Unix)
특정 코드 지연 실행 - DispatchQueue.main.asyncAfter(deadline: )
Naming Conventions
안드로이드 폰과 맥북에어 M1 USB 테더링 성공
Simulator 풀 스크린 사용 방법
10807번 - 개수 세기
프로그래머스 Lv.1 풀이 코드 모음
프로그래머스 Lv.1 풀이 코드 모음
11047번 - 동전 0
11659번 - 구간 합 구하기 4
14888번 - 연산자 끼워넣기
9184번 - 신나는 함수 실행
24416번 - 알고리즘 수업 - 피보나치 수 1
2580번 - 스도쿠
9663번 - N-Queen
15652번 - N과 M (4)
15651번 - N과 M (3)
15650번 - N과 M (2)
25305번 - 커트라인
25304번 - 영수증
3003번 - 킹, 퀸, 룩, 비숍, 나이트, 폰
15649번 - N과 M (1)
2004번 - 조합 0의 개수
1676번 - 팩토리얼 0의 개수
9375번 - 패션왕 신해빈
1010번 - 다리 놓기
11051번 - 이항 계수 2
11050번 - 이항 계수 1
3036번 - 링
2981번 - 검문
1934번 - 최소공배수
2609번 - 최대공약수와 최소공배수
1037번 - 약수
5086번 - 배수와 약수
1358번 - 하키
1004번 - 어린 왕자
1002번 - 터렛
3053번 - 택시 기하학
2477번 - 참외밭
4153번 - 직각삼각형
3009번 - 네 번째 점
1085번 - 직사각형에서 탈출
11478번 - 서로 다른 부분 문자열의 개수
1269번 - 대칭 차집합
1764번 - 듣보잡
10816번 - 숫자 카드 2
1620번 - 나는야 포켓몬 마스터 이다솜
14425번 - 문자열 집합
10815번 - 숫자 카드
18870번 - 좌표 압축
10814번 - 나이순 정렬
1181번 - 단어 정렬
11651번 - 좌표 정렬하기 2
11650번 - 좌표 정렬하기
1427번 - 소트인사이드
2108번 - 통계학
10989번 - 수 정렬하기 3
2751번 - 수 정렬하기 2
2750번 - 수 정렬하기
22.06.25 ~ 27 부산 먹부림 기록
1436번 - 영화감독 숌
1018번 - 체스판 다시 칠하기
7568번 - 덩치
2231번 - 분해합
2798번 - 블랙잭
11729번 - 하노이 탑 이동 순서
2447번 - 별 찍기 - 10
17478번 - 재귀함수가 뭔가요?
10870번 - 피보나치 수 5
10872번 - 팩토리얼
9020번 - 골드바흐의 추측
4948번 - 베르트랑 공준
1929번 - 소수 구하기
11653번 - 소인수분해
2581번 - 소수
1978번 - 소수 찾기
10757번 - 큰 수 A+B
2839번 - 설탕 배달
2775번 - 부녀회장이 될테야
10250번 - ACM 호텔
2869번 - 달팽이는 올라가고 싶다
1193번 - 분수찾기
2292번 - 벌집
1712번 - 손익분기점
1316번 - 그룹 단어 체커
2941번 - 크로아티아 알파벳
5622번 - 다이얼
2908번 - 상수
1152번 - 단어의 개수
1157번 - 단어 공부
2675번 - 문자열 반복
10809번 - 알파벳 찾기
11720번 - 숫자의 합
11654번 - 아스키 코드
1065번 - 한수
4673번 - 셀프 넘버
15596번 - 정수 N개의 합
4344번 - 평균은 넘겠지
8958번 - OX퀴즈
25083번 - 새싹
Spark Bigdata Pipeline
Spark 3일차
Spark 2일차
1546번 - 평균
Spark 1일차
Hadoop🐘
3052번 - 나머지
2577번 - 숫자의 개수
2562번 - 최댓값
10818번 - 최소, 최대
Linux
MongoDB 조회 문제
MongoDB
1110번 - 더하기 사이클
10951번 - A+B - 4
Oracle 3️⃣
ORACLE 연습용 문제 만들기 숙제
10952번 - A+B - 5
Oracle 2️⃣
2480번 - 주사위 세개
Oracle Day1️⃣
Tensorflow
Big Data
2525번 - 오븐 시계
10871번 - X보다 작은 수
2439번 - 별 찍기 - 2
2438번 - 별 찍기 - 1
11022번 - A+B - 8
11021번 - A+B - 7
2742번 - 기찍 N
2741번 - N 찍기
15552번 - 빠른 A+B
8393번 - 합
10950번 - A+B - 3
9️⃣ 2739번 - 구구단
2884번 - 알람 시계
14681번 - 사분면 고르기
⛏크롤링(Crawling)
2753번 - 윤년
Django 복습 4️⃣
Django 복습 3️⃣
💯 9498번 - 시험 성적
1330번 - 두 수 비교하기
✖ 2588번 - 곱셈
➗ 10430번 - 나머지
Django 복습 2️⃣
Django 복습 1
MySQL 복습!
⁉10926번 - ??!
🆎1008번 - A/B
👩🦲 18108번 - 1998년생인 내가 태국에서는 2541년생?!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🎈✨경 축✨🎈
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
선형 자료구조(1일차에 이어서)
🆎10998번 - A×B
🆎1001번 - A-B
🆎1000번 - A+B
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐶10172번 - 개
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐱10171번 - 고양이
[해당 포스트는 유튜버 나동빈님의 영상을 참고했습니다.]
❤10718번 - We love kriii
🖐2557번 - Hello World
Today I Learned(TIL)📌 (2021.12.31)
Today I Learned(TIL)📌 (2021.12.30)
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[noitce!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!