Oracle/SQL 28

2012.01.10 SQL 6일차(DELETE, Truncate, Drop들의 차이점, 데이터 딕셔너리)

자료를 삭제하는 명령어는 3가지가 있다. delete, truncate, drop 이 중 ELETE 는 DML명령어 TRUNCATE, DROP은 DDL명령어이다. 이것으로 인한 트랜젝션관리의 차이가 생길 수 있다. 이것 외에도 차이점이 존재하는데, 고객테이블이 존재하는데 100만행(건)의 자료가 있고, row칼럼은 데이터에 번호를 매긴 칼럼이다. (총 고객테이블의 용량은 100M) 만약에 DELETE FROM 고객 WHERE row BETWEEN 1 and 90만 하게 되면 남는 행은 10만건이 되게 된다. 하지만, 테이블 자체의 용량은 100M그대로이다. 우리 눈에는 지웠다고 표시되지만, 사실상 살아있다. TRUNCATE 고객; 의 경우에는 데이터가 다 지워지고, 용량도 지워지지만, 테이블의 구조는 살..

Oracle/SQL 2012.01.11

2012.01.10 SQL 6일차(DDL에 들어가는 데이터타입들에 대한 설명, DDL)

데이터 타입 숫자 number(p, s) p : 전체자리 수, s: 소수점 이하 예) number(5,3) : 12.345, number(3) : 218 ... number : 그냥 number만 쓰게 되면 총 38자리 양의정수 날짜 date 문자 char(n) : n 바이트 예약한 그대로 끝까지 사용하는 것(최대 2000bytes) varchar2(n) : n바이트 예약하고, 남는 자리가 있으면 반환(최대 4000bytes) varchar2의 단점 : 메모리반환 후에 update했는데 할당된 길이보다 길게 update해버렸을 때에는 곤란합니다. 이 경우에는 char는 별 문제가 되지 않습니다. (즉, update시에는 varchar2가 불리합니다.) (보통 insert를 update보다 훨씬 많이 수행..

Oracle/SQL 2012.01.11

2012.01.10 SQL 6일차(ITAS, CTAS, SQL 명령어들의 분류, 그 중 DML), 트렌젝션, 시퀀스

대량의 데이터를 다른 테이블로 옮기는 방법 2가지(ITAS, CTAS) ; 아이타스 , 씨타스 ITAS : Insert into Table name Select 예제 : insert into member2 select * from member; CTAS : Create Table name AS Select ... 예제 : create table member2 as select * from member; 차이점 : ITAS는 옮길 대상의 테이블이 존재하고, 데이터만 옮기고 싶을 때 사용하고, CTAS는 대상 테이블이 존재하지 않을 때, 사용합니다. ----------------------------------------------------------------------------- SQL 명령어들의 분..

Oracle/SQL 2012.01.10

2012.01.10 DDL 연습문제(CREATE TABLE, where절을 이용한 구조만 복사, 칼럼추가, 추가시 기본값, 칼럼삭제, 데이터타입변경, 테이블 이름변경

CREATE TABLE member 2 (userid varchar2(10), username varchar2(10), passwd varchar2(10), 3 idnum varchar2(10), phone number(13), address varchar2(20), regdate date, interest varchar2(15)); * 회원 테이블의 구조와 데이터 집합이 같은 member_second 테이블을 생성하세요 1 create table member_second 2 as select * 3 from member * 회원 테이블의 userid, username, passwd 칼럼만 복사하여 member_third 테이블을 생성하세요 SQL> create table member_third 2 as..

Oracle/SQL 2012.01.10

2012.01.09 SQL 5일차(연습노트 ; sub query) max,min 안쓰고 최소값, 최대값, 등등

max, min은 퍼포먼스 상으로 좀 느리므로 종종 any, all을 사용하여 최소값이나 최대값을 구한다. * 학생 중에서 생년월일이 가장 빠른 학생의 학번, 이름, 생년월일을 출력하세요 SQL> select studno, name, birthdate 2 from student 3 where birthdate 4 (select avg(sal*12+nvl2(comm,comm,0)) from professor) 5* order by 3 desc SQL> / PROFNO NAME 연봉 ---------- ---------- ---------- 9901 김도훈 6020 9905 권혁일 5425 9906 이만식 5040 9908 남은혁 4817 123

Oracle/SQL 2012.01.10

2012.01.09 SQL 5일차 두번째(Sub Query)

Sub Query ; 하나의 SQL명령문의 처리결과를 다른 SQL명령문에 전달하기 위하며 사용하는 것 ; 잘 이용하면 속도가 빠릅니다., 이 테이블, 저 테이블 이런 식으로 여러번 왔다갔다 하는걸 줄이기 위해서 이용합니다. 서브쿼리가 올 수 있는 위치(위치에 따라 지칭하는 이름이 다릅니다.) select ( SELECT ...) : 스칼라 서브쿼리 from (SELECT ....) : 인라인 뷰 where sal > (SELECT ...) : 서브쿼리 * 서브쿼리 사용시 주의 사항 연산자를 기준으로 오른쪽에 사용하고 사용시 ( )로 묶어서 사용합니다. 서브쿼리에는 order by를 사용하지 않습니다. 서브쿼리의 종류 단일행 서브쿼리 : 서브쿼리의 검색결과가 하나의 행, 하나의 행만 메인쿼리로 반환 다중행..

Oracle/SQL 2012.01.10

2012.01.09 SQL 5일차 첫번째(SELF JOIN)

SELF JOIN : 필요한 정보가 한 테이블안에 다 있긴 한데 원하는 결과를 출력하려면, join을 써야 할 때 temp 테이블을 사용해 사번 ,성명 , 생일 , 자신보다 생일이 빠른 사람수를 조회하여 자신보다 생일이 빠른 사람수 순서대로 오름차순으로 정렬해서 출력하세요 1 select emp1.emp_id, emp1.emp_name, 2 count(emp2.birth_date) 빠른사람수 3 from temp emp1, temp emp2 4 where emp2.birth_date(+) < emp1.birth_date 5 group by emp1.emp_id, emp1.emp_name 6* order by 3 EMP_ID EMP_NAME 빠른사람수 ---------- ---------- --------..

Oracle/SQL 2012.01.09

2012.01.06 SQL 4일차(연습노트,non-equi의 조건이 간단하지 않은 것들)

NON-EQUI 연습 Test13 , test14 테이블을 참조하여 고객의 포인트보다 낮은 모든 모든 등급의 상품을 선택할 수 있다고 할때 갈비세트를 상품으로 받을 수 있는 고객의 고객번호, 포인트 , 선물을 보여주는 쿼리를 작성하시오. SQL> desc test13 Name Null? Type -------------- -------- ---------------------------- LEV NOT NULL VARCHAR2(2) FPOINT NOT NULL NUMBER TPOINT NOT NULL NUMBER GIFT NOT NULL VARCHAR2(40) SQL> desc test14 Name Null? Type ------------ -------- --------------------------..

Oracle/SQL 2012.01.09

2012.01.06 SQL 4일차(정규화, JOIN중 카티션곱, EQUI, NON-EQUI, OUTER JOIN)

정규화설명 JOIN 들어가기 전에 테이블을 어떤 방식으로 메모리에서 가져오는지 알아보자 고객TABLE A B C ............. 100개의 칼럼 테이블용량 10GB 위와 같은 테이블이 존재하고, SELECT A,B FROM 고객; 을 실행시켰을떄, 어떻게 자료를 가져와서 사용자에게 보여줄까? 사람이라면 그냥 A, B칼럼만 쏙 가져와서 보여줄 것이다. 하지만 컴퓨터는 고객테이블에 무슨 내용이 있는지 모르므로 A, B칼럼만 쏙 가져올 수가 없다. 그래서 저 10GB를 메모리에 올려서 A, B 일일히 찾아서 화면에 출력을 하게 된다. 그런데 이렇게 되면 너무나도 비효율적이다. 그래서 고안해낸 방법이 정규화(Normalizing) 이다. 정규화 : 간단히 말하면 테이블을 여러 단위로 쪼개 놓는 것이다...

Oracle/SQL 2012.01.09