본문 바로가기

   
Programming/ORACLE

4일차!

반응형

--CASE

--  WHEN 조건식 THEN 수행문

--  WHEN 조건식 THEN 수행문

--  ELSE             수행문

--END

 

--CASE 컬럼/표현식

--      WHEN 1 THEN 수행문

--      WHEN 2 THEN 수행문

--      ELSE          수행문

--END

 

--문자열함수

--  length

--  substr

--  instr

--  replace

--  trim

--  rpad, lpad

--  upper, lower

--숫자함수

--  round, trunc, ceil, floor

--날짜함수

--  sysdate, months_between, add_months

--  날짜+숫자, 날짜 - 숫자, 날짜 - 날짜

--변환함수

--  to_char(date/number. 'fmt'),to_date('string', 'pattern'), to_number('string', 'pattern')

--기타함수

--  nvil(col/exp, replace

--  case~when~else~end

--  decode

 

SELECT LAST_NAME, JOB_ID, SALARY,

      CASE

        WHEN JOB_ID = 'IT_PROG' THEN SALARY *0.15

        WHEN JOB_ID = 'SA_REP' THEN SALARY *0.5

        WHEN JOB_ID = 'SH_CLERK' THEN SALARY *0.2

        ELSE

          SALARY * 0.05

        END AS "뽀나리"

FROM EMPLOYEES;

 

SELECT DECODE(

  JOB_ID, 'IT_PROG', SALARY* 0.15

)

FROM EMPLOYEES;

 

--1. 데이타베이스 서버의 현재 날짜를 표시하는 쿼리

SELECT SYSDATE

FROM DUAL;

 

--2. 각사원의 사원번호, 이름, 급여, 15%인상된 급여를 정수로 표시하는 쿼리 인상된 급여는 New Salary 별칭 부여

SELECT EMPLOYEE_ID, LAST_NAME, SALARY, (SALARY * 0.15) + SALARY AS "New Salary"

FROM EMPLOYEES;

 

--3. 2번쿼리에서 인상된 급여와 이전 급여의 차이를 표시하는 새로운 열을 표시하는 쿼리, 새로운 열의 별칭은 Increase

SELECT EMPLOYEE_ID, LAST_NAME, SALARY, (SALARY * 0.15) + SALARY AS "New Salary",  ((SALARY * 0.15) + SALARY) - SALARY AS Increase

FROM EMPLOYEES;

 

--4. 이름이 J혹은 A혹은 M으로 시작하는 모든 사원의 이름과 이름의 길이를 표시하는 쿼리

SELECT LAST_NAME, LENGTH(LAST_NAME)

FROM EMPLOYEES

WHERE SUBSTR(LAST_NAME, 0, 1) IN ('J', 'A', 'M');

 

--5. 사원의 이름과 근무달수를 표시하는 쿼리(근무달수는 정수로표시

--현재날짜에서 기존날짜를 뺀다음 달을 출력

--MONTHS_BETWEEN(SYSDATE, HIRE_DATE)

--TO_DATE('0000-00-00', 'YYYY-MM-DD'))

SELECT ROUND(MONTHS_BETWEEN(sysdate, hire_date)) || '개월'

FROM EMPLOYEES;

 

--6. 사원의 이름과 COMMISSION 표시하는 쿼리 커미션을 받지 못하는 사원은 "No Commission'이라고 표시

SELECT LAST_NAME, CASE WHEN commission_pct is null then 'No Commission' END

FROM EMPLOYEES;

 

--7. 사원의 급여를 * 출력하는 쿼리(1000달러당 *하나를 출력)

--숫자 1000 별표 표시

SELECT LPAD(' ', SALARY / 1000, '*') AS "", SALARY

FROM EMPLOYEES;

 

--정규화 -> 테이블을 더작은 속성들의 세로로 쪼개는것

 

--조인

--  조회할 데이터가 2 이상의 테이블에 흩어져서 존재하는 경우 필요하다.

--  조인할 테이블을 select문의 from절에 나열하면된다.

--  조인할 때는 조인조건이 필요하다.

--    - 조인 조건은 WHERE절에 기술한다.

--    - 조인 조건은 서로 연관된 행끼리 어떻게 이어붙일 것인지를 정하는 것이다.

--    - 조인 조건은(조인한 테이블 개수 -1) 만큼 있어야 된다.

--테이블 2 조인

--SELECT TABLE1, COLUMN1, TABLE.COLUMN2, COLUMN5

--FROM TABLE1, TABLE2

--WHERE TABEL1.COLUMN = TABLE2.COLUMN;

--EMPLOYEE 테이블의 사원정보 (사원아이디, 이름, 부서아이디, 부서명, 부서위치 표시)

SELECT *

FROM EMPLOYEES A, DEPARTMENTS B

WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID;

 

--사원정보(사원아이디, 이름, 소속부서 아이디, 소속부서명)

SELECT *

FROM EMPLOYEES A, DEPARTMENTS B

WHERE A.EMPLOYEE_ID = B.DEPARTMENT_ID

AND JOB_ID = 'ST_MAN';

 

--EMPLOYEES에서 MANAGER_ID 100 사원들의 사원아이디, 이름, 직종아이디. 직종명을 표시

SELECT A.EMPLOYEE_ID, A.LAST_NAME, B.JOB_TITLE, C.DEPARTMENT_NAME

FROM EMPLOYEES A, JOBS B, DEPARTMENTS C

WHERE A.JOB_ID = B.JOB_ID

AND A.DEPARTMENT_ID = C.DEPARTMENT_ID

AND A.MANAGER_ID = 100;

 

-- 부서별 부서명과 소속 도시명 소속국가명

SELECT D.DEPARTMENT_NAME, L.CITY, C.COUNTRY_NAME

FROM DEPARTMENTS D, LOCATIONS L, COUNTRIES C

WHERE D.LOCATION_ID = L.LOCATION_ID

AND L.COUNTRY_ID = C.COUNTRY_ID;

 

SELECT *

FROM GOGAK A, GIFT B

WHERE A.POINT > B.G_START

AND A.POINT < B.G_END;

 

SELECT A.FIRST_NAME || A.LAST_NAME AS "사원",' 매니져는' || B.FIRST_NAME || B.LAST_NAME AS "매니져"

FROM EMPLOYEES A, EMPLOYEES B

WHERE A.MANAGER_ID = B.EMPLOYEE_ID

AND A.FIRST_NAME = 'Neena';

 

--A.LAST_NAME LIKE 'L%';--사원 / 매니져

 

CREATE TABLE CATEGORY(

  CAT_ID NUMBER,

  CAT_NAME VARCHAR2(50),

  PARENT_ID NUMBER

);

INSERT INTO CATEGORY VALUES(1, '가구', NULL);

INSERT INTO CATEGORY VALUES(1, '가전', NULL);

 

INSERT INTO CATEGORY VALUES(10, '침대', 1);

INSERT INTO CATEGORY VALUES(11, '쇼파', 1);

INSERT INTO CATEGORY VALUES(12, '책장', 1);

 

INSERT INTO CATEGORY VALUES(13, 'TV', 2);

INSERT INTO CATEGORY VALUES(14, '냉장고', 2);

INSERT INTO CATEGORY VALUES(15, '세탁기', 2);

 

SELECT A.CAT_NAME, B.CAT_NAME

FROM CATEGORY A, CATEGORY B

WHERE A.PARENT_ID = B.CAT_ID;

 

Account 클래스 작성

BankingServer

     - BankingUI 연결요청을 기다린다.

     - 연결요청이 접수되면 Socket 생성한다.

     - BankingServerThread 생성한다. <-- 통신에 필요한 Socket 전달

     - 스레드를 start시킨다.

 

BankingServerThread

     - Account(계좌정보) 저장하는 ArrayList 있어야 된다.

     - BankingServer에서 전달해준 Socket 담을 변수가 있어야 한다.

     - run() 메소드를 구현한다.

          - 읽기/쓰기 스트림을 만든다.

          - 반복시작

               - 클라이언트가 보낸 메세지를 읽는다.

               - 메세지를 적절히 자른다.

               - 메세지의 타입에 따라 적절한 처리를 한다.

                    - "NEW" 때는 전달받은 정보(예금주,계좌번호, 비번, 금액)

                      Account 만들고 ArrayList 담는다.

                    - "DEPOSIT" 때는 전달받는 정보(예금주, 계좌번호, 입금액) 참조해서

                      ArrayList에서 해당되는 Account 찾아서 값을 변경한다.

                    - "WITHDRAW"

                    - "FIRE" 때는 전달받은 정보(예금주, 계좌번호, 비밀번호) 참조해서

                      ArrayList에서 해당되는 Account 지운다.

                  

                    - 해당되는 처리를 마치면 클라이언트에 응답메세지 보내기

                      (계좌정보 모두 보내기)

 

          - 반복종료

 

BankingUI

     - 버튼/ jtextarea

     -서버와 연결하기 <-- 소켓 생성하기

     - 읽기/쓰기 스트림 만들기

     - ClientThread 생성, start시킨다.

     - 버튼 누를때 마다 다이얼로그 표시하기

 

NewDialog

     - 쓰기 스트림을 담을 변수

     - 입력필드/ 버튼 배치

     - 버튼 클릭하면 입력된 값을 NEW:홍길동:111-222:10000 형식으로 만들어서

        서버로 전송하기

DepositDialog

WithdrawDialog

FireDialog

 

ClientThread

     - 읽기 스트림 담을 변수

     - jtextarea 담을 변수

     - run 구현

          - 서버가 보낸 메세지를 해석해서 BankingUI 화면에 표시하기

반응형