본문 바로가기

Database/이론

[DB] DBCP (DataBase Connection Pool) 어느 수영장에서A는 튜브줘 라고 요청을 하면 바람을 넣고 튜브를 빌려주고 B는 튜브줘 라고 요청을 하면 미리 바람을 넣은 튜브를 빌려준다고 가정합시다.B방식처럼 데이터베이스 연결 객체를 만들어 놓고 필요할 때마다 연결 객체를 건네주는 것을Connection Pool이라고 합니다. 이를 사용하기 위해서는 세팅이 필요합니다. Meta Inf 폴더에 xml파일을 만들어줘야합니다.이름은 context.xml로 지정하겠습니다.context의 Resource태그를 써서 세팅을 해야합니다. xml version = "1.0" encoding = "UTF-8"?>Context>Resourcename = "PuftPool"type = "javax.sql.DataSource"driverClassName = "oracle... 더보기
[DB] Delete 컬럼의 데이터를 변경할 때는 CREATEREADUPDATEDELETE  CRUD 중 D에 해당하는 DELETE를 사용합니다. 형태는 간단합니다.--D - deletedelete from 테이블명where 조건식; 조건식을 만족하면해당 컬럼의 모든 데이터가 삭제됩니다. 저번 시간에 만든 테이블로바로 실습을 진행해보겠습니다. --무 삭제하기! delete from JAN03_PRODUCTWHERE P_NAME = '무';SELECT * FROM JAN03_PRODUCT; 이름이 '무'인 컬럼의 데이터를 삭제합니다. -- 가장 좁은 매장의 상품 다 삭제하기! DELETE FROM JAN03_PRODUCTWHERE P_M_NO IN(SELECT M_NO FROM MARKETWHERE M_SIZE IN(SELEC.. 더보기
[DB] Update 컬럼의 데이터를 변경할 때는 CREATEREADUPDATEDELETE  CRUD 중 U에 해당하는 UPDATE를 사용합니다.  -- U -  UPDATE 사용방법은 간단합니다. UPDATE 테이블명SET 컬럼명 = 값, 컬럼명 = 값,.... -- 바꿀 내용WHERE 조건; 한번 값을 바꿔봅시다. 배추, 3000G, 10000원, 홈플러스, 판교점, 1000평, 주차장 500석무, 500G, 5000원, 홈플러스, 강남점, 500평, 주차장 300석배추, 2000G, 5000원, 이마트, 서초점, 800평, 주차장 800석 위의 데이터가 상품 테이블과 마트 테이블로 나뉘어져 들어가 있을 때UPDATE를 수행해보겠습니다.이떄 상품 테이블은 마트테이블의 시퀀스 넘버와외래키로 묶여져있다고 가정합니다. CREA.. 더보기
[DB] 계층형 쿼리 계층형 쿼리란테이블에 계층형 데이터가 존재하는 경우 이것을 조회하기 위한 쿼리를 말합니다. 계층형 데이터란, 동일 테이블에 계층적으로상위데이터와 하위데이터가 포함된 데이터입니다. 하드웨어를 예로 들면,중앙처리장치, 기억장치, 입출력장치의 상위데이터는 하드웨어입니다.입출력장치를 나눠서 입력장치, 출력장치의 상위데이터가 입출력장치입니다. CREATE TABLE JAN03_DEVICE(D_NAME VARCHAR2(10 CHAR) PRIMARY KEY,D_PRIOR VARCHAR2(10 CHAR)); INSERT INTO JAN03_DEVICE VALUES('하드웨어', NULL);INSERT INTO JAN03_DEVICE VALUES('중앙처리장치', '하드웨어');INSERT INTO JAN03_DEVIC.. 더보기
[DB] JOIN 연산의 종류 JOIN에도 여러가지 종류가 있는데요.먼저 CROSS JOIN부터 살펴보겠습니다.CROSS JOIN은 별도의 조건 없이 두 테이블 간의 가능한 모든 결과를 조회(모든 경우의 수)합니다. SELECT * FROM TB1, TB2;SELECT * FROM TB1 CROSS JOIN TB2; 두 SELECT문의 출력값이 같은데요.필요없는 데이터도 출력되기 때문에 잘 쓰이지는 않습니다. 다음으로 살펴볼 INNER JOIN은 조건에 해당하는 값만 나옵니다. SELECT * FROM TB1 INNER JOIN TB2 ON TB1.NAME = TB2.NAME; SELECT * FROM TB1 A, TB2 B WHERE A.NAME = B.NAME;SELECT * FROM TB1 JOIN TB2 USING (NAME).. 더보기
[DB] View 메뉴 데이터의 갯수를 나눠서 페이지별로 보여주고 싶을 때는 어떻게 할까요? SELECT COUNT(*) FROM RESTAURANT_MENU;  RESTAURANT_MENU  테이블에는 고유번호인 R_NO가 있고 (PRIMARY KEY)SEQUENCE로 처리한 상태입니다.R_NO로 처리하려고 보니까SEQUENCE는 INSERT에 실패해도 올라간다는 단점이 있습니다.메뉴 데이터는 삭제가 될 수도 있기 때문에R_NO가 정확히 1,2,3,4, ... 가 아닙니다.그럼 어떤 방법이 있을까요..? ROWNUM(가상필드)이라는 것을 사용하면 됩니다.SELECT할 때마다 자동으로 부여되는 숫자값을 ROWNUM이라고 하는데요.ROWNUM은 3가지 특징이 있습니다.* (전체조회)랑은 같이 사용할 수 없습니다.ORDER .. 더보기