SQL 23

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

2012.01.05 SQL 3일차(연습노트) ; 그룹함수테크닉,rollup이용,cube이용, having이용예 등등

통계만 출력하기 구하고자 하는 출력이 '학과별 평균 몸무게와 학년 별 평균 몸무게를 구하세요' 이고, performance생각 안하고, 다른 군더더기 없이 딱 원하는 결과값만 출력하고 싶다면 어떻게 해야할까? 단순히 group by 해서 cube나 rollup해서는 되지 않는다. 여기에 집합연산자를 추가해서 중복되는 부분을 빼야 한다. 아래 쿼리를 보자. 1 select deptno, grade, avg(weight) from student 2 group by cube(grade, deptno) 3 intersect 4 ( 5 select deptno, grade, avg(weight) from student 6 group by rollup(grade), deptno 7 union 8 select dep..

Oracle/SQL 2012.01.09

2012.01.05 SQL 3일차(그룹함수, rollup, cube)

그룹함수의 종류 종류 의미 COUNT 행의 개수 출력 (칼럼이름 직접 적을 시 NULL제외한 행의 개수출력, * 사용시 NULL포함한 행의 개수) MAX NULL을 제외한 모든행에서 MAX출력 MIN NULL을 제외한 모든행에서 MIN출력 SUM NULL을 제외한 모든 행의 합계 AVG NULL을 제외한 모든 행의 평균값 STDDEV NULL을 제외한 모든 행의 표준편차 VARIANCE NULL을 제외한 모든 행의 분산 값 GROUPING 해당 칼럼이 그룹에 사용되었는지 여부를 1 OR 0으로 반환 GROUPING SET 한번의 질의로 여러개의 그룹화 가능 COUNT( {* | [DISTINCT | ALL] expr} ) 예제 1 select count(*), count(comm), count(posit..

Oracle/SQL 2012.01.09

2012.01.03 SQL 2일차(2) 일반함수(nvl,nvl2,decode,case)

CASE 사용법 참조 : http://miae1216.blog.me/20133583579 일반함수 NVL(exp1, exp2) ; exp1이 NULL이면 exp2로 변경, (exp1, exp2는 반드시 같은 데이터타입) NVL2(exp1, exp2, exp3) ; exp1이 NULL이 아니면 exp2, NULL 이면 exp3 DECODE(exp, 조건1, 결과값1, 조건2, 결과값2, , 결과값3) ; 오라클에서만 제공 exp가 조건1이면 결과값1 출력, 조건2면 결과값2 출력 조건에 맞지 않는 값이면 결과값3 출력(이 값이 없으면 조건에 맞지 않는 값은 NULL로 처리) (, 의 사용에 주의하세요~) CASE exp WHEN 조건식1 THEN result1 WHEN 조건식2 THEN result2 EL..

Oracle/SQL 2012.01.09

2012.01.03 SQL 2일차(1) 문자함수(LPAD,RPAD,REPLACE), 숫자함수, 날짜함수, 변환함수

문자함수 LPAD('대상문자열', 지정한 길이, '추가할문자열') ; 대상 문자열이 사용자가 지정한 길이보다 작으면, 사용자가 지정한 문자열을 대상문자열에 추가하는 키워드 (LPAD는 왼쪽에 추가) RPAD('대상문자열', 지정한 길이, '추가할문자열') ; 대상 문자열이 사용자가 지정한 길이보다 작으면, 사용자가 지정한 문자열을 대상문자열에 추가하는 키워드 (RPAD는 오른쪽에 추가) 예제 SQL> select lpad(dept_name,10,'1234567890') 2 from tdept; LPAD(DEPT_NAME,10,'1 -------------------- 12경영지원 123456재무 .... 12345영업1 12345영업2 10 rows selected. ====================..

Oracle/SQL 2012.01.09