Presentation is loading. Please wait.

Presentation is loading. Please wait.

SQL SQL 불펌하지 마세요!!!!!!!! 불펌 금지.

Similar presentations


Presentation on theme: "SQL SQL 불펌하지 마세요!!!!!!!! 불펌 금지."— Presentation transcript:

1 SQL SQL 불펌하지 마세요!!!!!!!! 불펌 금지

2 /*DB의 계정 생성*/ create user scott identified by tiger default tablespace users temporary tablespace temp; grant connect, resource to scott; create user scott 생성 사용자 사용자ID identified by tiger 비밀번호 = tiger default tablespace users 데이터 저장 영역 할당 temporary tablespace temp; 작업 영역 할당 grant connect, resource to scott; 권한부여 DB들에 접속 권한 SQL명령 권한 을 scott에게 준다

3 sys system scott user temp DataBase(저장소) - XE 저장 한 데이터 작업을 마친 데이터
취소(Rollback)불가 작업중인 데이터 언제든지 취소 가능 DataBase(저장소) - XE commit DB의 모든테이블 사용가능 사용자 생성, 수정, 삭제 DB의 종료 시작 가능

4 테이블 - 데이터를 저장하는 그릇 Create table dept( 생성 테이블 테이블명 Deptno number(10), 컬럼명 저장할 데이터타입(최대자릿수) Dname varchar2(50), 컬럼명 저장할 데이터타입(최대바이트의 문자) Loc varchar2(50)); 컬럼명 저장할 데이터타입 (최대바이트의 문자) 테이블 생성 create table dept( deptno number(10), dname varchar2(50), loc varchar2(50)); 테이블에 데이터 삽입 insert into dept(deptno, dname, loc)values(10, ‘영업’ , ‘서울’); insert into dept(deptno, dname, loc)values(20, ‘기획’ , ’부산’); ** 문자열을 삽입할때는 ‘ ‘<<를 꼭 사용해야 한다.

5 Dept Table deptno dname loc varchar(50) 50바이트의 글자 ‘서울’ number(10) 10자리수의 숫자 10 varchar(50) 50바이트의 글자 ‘영업’

6 /* EMP테이블 생성하기 */ create table emp( empno number(10), empname varchar2(30), duty varchar2(30), mgr number(10), hire_date date, sal number(20), bonus number(20), deptno number(10)); insert into emp(empno, empname,duty, mgr,hire_date ,sal, bonus, deptno) values(280101,'홍길동','과장',990101,to_date('2008/01/01','yyyy/mm/dd'), , ,10);

7 EMPNO 사번 EMP NAME 이름 Duty 직책 Mgr 직속상사 Sal 월급 Bonus 보너스 280101 홍길동 과장
테이블의 제약 조건 - 테이블에 부적절한 데이터가 저장되는 것을 방지 하는것 PRIMARY KEY(기본키) - 레코드들을 구별하기 위한 값 - 유일한 값(UNIQUE) - 생략 불가(NOT NULL) EMPNO 사번 EMP NAME 이름 Duty 직책 Mgr 직속상사 hire_date 입사일 Sal 월급 Bonus 보너스 280101 홍길동 과장 990101 500 만원 100 EMP table

8 /* PRIMARY KEY 추가 */ alter table emp add constraint pk_emp primary key(empno); - PRIMARY KEY 제약 조건 추가 ALTER TABLE EMP 테이블구조 수정 테이블 이름 Add constraint pk_emp 추가 제약조건 제약조건 이름(임의) PRIMARY KEY (EMPNO) 제약조건종류 제약 설정되는 컬럼 이름 /* 레코드 추가 */ insert into emp(empno,empname) values(280102,’홍길순’); /* 사번이 홍길순과 같으므로 삽입 불가 */ values(280102,’장동건’); /* 사번이 생략되었으므로 삽입 불가 */ insert into emp(empname,duty) values(‘조인성’,’대리’);

9 /. 테이블을 만들면서 PRIMARY KEY 설정을 함
/* 테이블을 만들면서 PRIMARY KEY 설정을 함 */ create table emp( empno number(10) constraint pk_emp primary key, empname varchar2(50), duty varchar2(50), mgr number(10), hire_date date, sal number(20), bonus number(20), deptno number(10)); /* 테이블에 값넣기*/ insert into emp(empno,empname,duty,mgr,hire_date,sal,bonus,deptno) values(280303,‘장동건’,’과장’, ,to_date('2008/03/03','yyyy/mm/dd'), , ,10); /*사번은 중복 불가*/ insert into emp(empno,empname) values(280303,‘김태희’); /*사번은 생략 불가*/ insert into emp(empname,duty) values(‘조인성,’대리’); /*레코드를 데이터 베이스에 저장*/ commit;

10 Dept테이블에 존재하지 않는 부서번호는 삽입 불가
280101 홍길동 과장 990101 500 만원 200 10 empno Emp name duty mgr Hire_date sal bonus Dept no EMP table deptno dname 영업 loc 서울 dept table Dept 테이블의 부서 번호 Dept테이블에 존재하지 않는 부서번호는 삽입 불가

11 FOREIGN KEY(외래키) - 다른 테이블의 PRIMARY KEY를 참조해서 해당 PRIMARY KEY 컬럼에 존재하지 않는 데이터 삽입 불가 /* dept 테이블 생성 */ create table dept( deptno number(2) constraint pr_dept primary key, dname varchar2(14), loc varchar2(13)); /* 값 삽입하기 */ insert into dept values(10,’영업’,’서울’); insert into dept values(20,’경리’,’서울’); insert into dept values(30,’인사’,’부산’); insert into dept values(40,’마케팅’,’대구’);

12 /* EMP테이블에 FOREGN KEY 추가*/
ALTER TABLE emp 테이블 구조 변경 테이블명 ADD CONSTRAINT FK_DEPT 제약 조건 추가 제약조건이름 FOREIGN KEY (detpno) 외래키 외래키설정 컬럼 REFERENCES dept(deptno); 참조 테이블 컬럼 /* emp 테이블에 데이터 삽입 */ insert into emp(empno, empname,deptno) values (280304,’김태희’,10); /* dept 테이블에 없는 deptno이므로 삽입 불가 */ values (280304,’이영애’,100); /* deptno 생략 가능*/ insert into emp(empno, empname) values (280304,’김희선’);

13 /* 테이블 생성 pk: empno, fk: deptno*/
Create table emp( Empno number(10) constraint pk_emp primary key, Empname varchar2(50), Duty varchar2(50), Mgr number(10), Hire_date date, Sal number(20), Bonus number(20), Deptno number(10) constraint fk_deptno references dept); /* emp 테이블에 데이터 삽입 */ Insert into (empno,empname,deptno) Values(280304,’김태희’,10); /*테이블에 설정된 제약 조건 검색*/ Select * from user_constraints Where table_name = 'EMP'OR table_name='emp'; /* 제약조건 삭제*/ Alter table emp drop constraint pk_emp; 테이블 구조변경 [테이블명] 삭제 제약조건 [제약조건명]

14 /*다른 테이블에서 참조하고 있지만 삭제하고 싶을 경우*/
drop table dept cascade constraint; - UNIQUE - 유일한 값(중복불가) - 생략 가능 /* c1명령이 primary key 이고 c3컬럼이 unique인 테이블생성 */ create table tb_uniq_test( c1 number(10) primary key, c2 number(10), c3 number(10) unique); /* 데이터 삽입*/ insert into tb_uniq_test(c1,c2,c3) values (1,1,1); insert into tb_uniq_test(c1,c2,c3) values (2,1,2); /* c3 컬럼에 중복된 값 삽입 불가*/ insert into tb_uniq_test(c1,c2,c3) values (3,2,2); /* c3 컬럼값 생략 가능 */ insert into tb_uniq_test(c1,c2) values (4,4); /* 테이블에 제약 조건 확인*/ (제약조건명을 선택하지 않으면 임의로 생성됨) select * from user_constraints where table_name='tb_uniq_test' or table_name= 'TB_UNIQ_TEST'

15 alter table tb_uniq_test drop constraint sys_c004041;
/* 유니크 제약 조건 삭제 */ alter table tb_uniq_test drop constraint sys_c004041; 테이블 구조변경 [테이블명] 삭제 제약조건 [제약조건명] /* 유니크 제약 조건 삽입*/ alter table tb_uniq_test add constraint nui_c unique(c3); 테이블 구조변경 [테이블명] 삽입 제약조건 [제약조건명] [제약조건] /* 테이블 제약 조건 넣어 생성하기 */ create table tb_uniq_test( c1 number(10) constraint pk_c1 primary key, c2 number(10), c3 number(10) constraint uni_c3 unique); c1 Sys_c004040 Pk_c1(재생성) c2 c3 Nui_c3

16 - NOT NULL - 생략 불가 /* tb_not_null_test 테이블 생성 */ Create table tb_not_null_test( n1 number(10) constraint pk_n1 primary key, n2 number(10), n3 number(10) constraint nn_n3 not null); /* 테이블에 데이터 삽입 */ Insert into tb_not_null_test(n1,n2,n3)values(1,1,1); /* n3컬럼은 중복 가능*/ Insert into tb_not_null_test(n1,n2,n3)values(2,1,1); /* n3컬럼은 생략 불가 */ Insert into tb_not_null_test(n1,n2)values(4,4); tb_not_null_test n1 Primary key (pk_n1) Not null (nn_n3) n3 n2

17 c1 Pk_check_c1 c2 c3 10이상 100이하 삽입 기능 tb_check_test 10이상 100이하 옵션
/* n3컬럼의 not null 설정 삭제 */ Alter table tb_not_null_test Drop constraint nn_n3; /* n3컬럼의 not null 설정 추가 */ Alter table tb_not_null_test modify(n3 number(10) constraint nn_n3 not null); - CHECK - 컬럼의 값을 특정 범위로 제약 /* 테이블 : tb_check_test 생성 */ 컬럼 : c1 pk 컬럼 : c3 10이상 100이하의 데이터만 삽입 가능 Create table tb_check_test( c1 number(10) constraint pk_check_c1 primary key, c2 number(10), c3 number(10) constraint check_c3 check(c3>=10 and c3<=100)); c1 Pk_check_c1 c2 c3 10이상 100이하 삽입 기능 tb_check_test 10이상 100이하 옵션

18 /* 데이터 삽입 */ Insert into tb_check_test(c1,c2,c3) Values(200,3000,20); /* c3 컬럼은 10이하 100이상의 조건에 위배*/ Insert into tb_check_test(c1,c2,c3) Values(200,3000,101); /* check 제약 조건 삭제*/ Alter table tb_check_test Drop constraint check_c3; /* 제약 조건 추가 n3컬럼에 10이상 100이하*/ Alter table tb_check_test Add constraint check_c3 Check(c3>=10 and c3<=100); /* 데이터 추가 */ Insert into tb_check_test(c1,c2,c3) Values(202,3000,100); /* 10미안이므로 삽입 불가*/ Insert into tb_check_test(c1,c2,c3) Values(202,3000,9); /*tb_check_test의 레코드 삭제 */ Delete from tb_check_test;

19 /*c3에 100,200,300,400,500 중 하나만 삽입 가능*/ Alter table tb_check_test Add constraint check_c3 Check(c3 in(100,200,300,400,500)); /* 컬럼에 데이터 삽입*/ Insert into tb_check_test(c1,c3) Values(1000,100); Insert into tb_check_test(c1,c3) Values(1001,200); /*101은 100,200,300,400,500 중 하나가 아니므로 삽입 불가*/ Insert into tb_check_test(c1,c3) Values(1002,101); - DEFAULT - 삽입시 삽입한 데이터가 저장 - 생략시 DEFAULT로 설정한 데이터가 삽입 d1 pk date d2 d3 DATE-날짜와시간 - 삽입한 날짜와 시간 - 생략시 해제 날짜와 시간 저장 tb_default_test

20 /* 테이블 생성*/ d1 : pk d3 : date 타입 생략시 현재 날짜와 시간이 저장 Create table tb_default_test( d1 number(10) primary key, d2 date, d3 date constraint d3_df default sysdate)); /* 데이터 삽입 */ Insert into tb_default_test(d1,d2,d3) values(1,to_date('16:27:00','hh24:mi:ss'),to_date('2008/12/23','yyyy/mm/dd')); Commit; /* 삽입된 데이터값 확인*/ select d1,to_char(d2,'hh24-mi-ss'),to_char(d3,'yyyy-mm-dd') from tb_default_test; /* d2와 d3를 생략하여도 d3에 date가 저장*/ insert into tb_default_test(d1) values(2);

21 /*default 제약 조건 삭제*/ alter table tb_default_test modify (d3 date default null); /* d3의 제약조건이 삭제되고 넣으면 d3은 null*/ insert into tb_default_test (d1) values(20); 오라클의 데이터 타입 1. 숫자타입 number(p, s) p : 전체 유효 자리 숫자의 자릿수 (p : 1 ~ 38) s : 소수점 아래 유효 자릿수 ( s : -84 ~ 127) (의미있는 데이터) n2 n1 n3 Number (5) - 전체5자리 - 소수점 아래 유효자릿수 : 0 - 정수 number (5, 2) 유효자릿수 : 2 - 소수점 위 유효자릿수 : 3 (5, -2) 전체5자리 소수점위 2자리부터 유효자릿수가 시작 소수점 위 2자리부터 5개의 유효자리 숫자 존재 tb_number_test

22 /* 테이블 생성 */ create table tb_number_test( n1 number(5), n2 number(5,2), n3 number(5,-2)); /* 데이터 삽입 */ insert into tb_number_test(n1,n2,n3) values(12345, ,12345); - n1 => , n2 => 123,46, n3 => 이 저장된다 insert into tb_number_test(n1,n2,n3) values(23456,234.56, ); - n1 => 23456, n2 => , n3 => 이 저장된다 /* n2가 범위를 벗어났으므로 삽입 불가 */ insert into tb_number_test(n2) values( ); /* n3가 범위를 벗어났으므로 삽입 불가 */ insert into tb_number_test(n3) values( ); insert into tb_number_test(n1) values( ); - n1 => 12346이 저장된다

23 문자 데이터 타입 (n : 최대 byte) 1. VARCHAR2(n) : 가변 문자 타입 2. CHAR(n) : 고정 문자 타입 /* 테이블 생성 */ create table tb_string_test( s1 char(20), s2 varchar2(20)); /* 데이터 삽입 */ insert into tb_string_test(s1,s2) values('hi','hi'); insert into tb_string_test(s1,s2) values('good','good'); /* 최대 20 byte 초과이므로 삽입 불가 */ insert into tb_string_test(s1,s2) values('good good good after noon‘,'good good good after noon'); s1 s2 CHAR(20) 최대 20 byte - 고정 문자열 VARCHAR2(20) 가변 문자열 tb_String_test Hi%%%%%%%%%... (공백으로 나머지를 채워서 20 byte를 만든다) Hi (글자수만큼 사이즈가 조정됨)

24 날짜와 시간 DATE : 날짜와 시간 7byte /*테이블 생성 */ create table tb_date_test(d1 date); /* 현재 날짜와 시간저장 */ insert into tb_date_test(d1) values (sysdate); /* 저장 */ values(to_date(' ','yyyy-mm-dd')); /* 2008/12/24 10시 38분 49초 저장 */ values(to_date('2008/12/24 10:38:49', 'yyyy/mm/dd hh24:mi:ss')); DATE 날짜와 시간 저장 d1 tb_date_test

25 테이블 컬럼 관리 ALTER TABLE [테이블명] ADD : 컬럼 추가 MODIFY : 컬럼 수정 DROP : 컬럼 삭제 /* emp 테이블에 addr 컬럼 추가 */ alter table emp add(addr varchar2(50)); /* emp테이블 empname 컬럼의 타입을 varchar2(80)으로 수정 */  컬럼에 저장된 데이터가 없으면 컬럼의 타입을 자유롭게 변경가능  컬럼에 저장된 데이터가 있으면 컬럼의 사이즈를 크게 하는 변경만 가능 이때 새로운 컬럼의 사이즈는 저장된 데이터의 크기보다 커야함 alter table emp modify(empname varchar2(80)); /* 컬럼사이즈를 다시 50으로 변경 */ alter table emp modify(empname varchar2(50)); /* ADDR 컬럼 삭제 */ alter table emp drop column addr;

26 테이블의 복사 - 테이블의 구조 복사 - 레코드 복사 - NOT NULL 제외한 제약 조건은 복사가 안됨 CREATE TABLE [테이블 명] AS 복사할 레코드 쿼리; 예제) Create table emp2 As 새로 만들 테이블 emp2 Select * from emp; 복사할 레코드 테이블 구조 /* emp테이블의 모든 레코드를 emp2로 복사*/ create table emp2 as select * from emp;

27 /* 2000년 1월 1일 이후에 입사한 사원의 레코드를 emp3에 복사 */
create table emp3 as select * from emp where hire_date>=to_date('2000/01/01','yyyy/mm/dd'); /* emp 테이블의 empname컬럼을 not null로 변환 */ alter table emp modify(empname varchar2(20) not null); /* emp 테이블에서 월급이 2000이상 3000이하인 사원을 emp5로 복사 */ create table emp5 where(sal>=2000 and sal<=3000); /* emp테이블 월급이 3000이상인 사원의 사번, 이름, 월급, 입사일을 복사 */ create table emp6 select empno,empname, sal,hire_date from emp where (sal>=3000);

28 전체컬럼 테이블에 정의된 컬럼 순서대로 삽입시 생략 가능
데이터(Record)의 삽입 - insert 쿼리 - 형식 insert into 테이블 이름 (컬럼1, 컬럼2, 컬럼3……)  values(컬럼1, 컬럼2, 컬럼3…..) 전체컬럼 테이블에 정의된 컬럼 순서대로 삽입시 생략 가능 테이블의 구조 컬럼 순서가 자주 바뀌므로 써주는것이 좋다 /* emp테이블 모든 컬럼에 데이터 삽입 */ insert into emp values(1700,’정지훈’,’이사’,1644,sysdate,3000,500,10); /* dept 테이블에 deptno, dname 2개의 데이터만 삽입*/ insert into dept(deptno,dname) values(50,’회계’); /* emp#테이블에 직책이 과장인 사원을 추가 */ Insert into emp3 select * from emp where duty=‘과장’;

29 데이터(레코드)의 수정 - update 쿼리 - 형식 update 테이블명 set 컬럼1=새로운값, 컬럼2=새로운값….. where 수정할 레코드의 조건 수정 조건과 일치하는 레코드 값 모든 레코드를 수정시 에는 조건 생략 /* 사번이 16359인 사원의 부서번호를 30으로 수정*/ Update emp Set deptno=30 Where empno=16359; /* 부서가 20인 사원을 검색*/ Select * from emp where deptno=20; /*부서가 20인 사원의 월급을 20%인상 */ update emp set sal=sal*1.2 where deptno=20; /* 모든사원의 입사일을 오늘로 수정 */ update emp set hire_date=sysdate

30 데이터(레코드)를 삭제 - DELETE 쿼리 - 형식 DELETE from 테이블명 where 지우고 싶은 레코드에 관한 조건  해당조건에 맞는 레코드 삭제 /* 사번이 16359인 사원 삭제*/ delete from emp where empno=16359 /* 월급의 평균을 구하고 월급이 평균 이하인 사원 삭제 */ select avg(sal) from emp  월급의 평균구하기 delete from emp where sal<=(select avg(sal) from emp) /* 모든 사원 삭제 */ delete from emp

31 레코드의 검색 - select 쿼리 - 형식 select 컬럼1, 컬럼2……(검색하고 싶은 컬럼들) from 테이블명 where 검색 조건 검색조건에 일치하는 레코드 검색 생략시 모든 레코드 /* deptno가 10인 사원의 모든 컬럼을 검색 */ Select * from emp Where deptno=10; /* detpno가 10인 사원의 사번과 이름 검색 */ Select empno, empname from emp Where deptno =10; /* detpno가 10인 사원의 사번과 이름을 검색 empno -> 사번, empname-> 이름 */ Select empno 사번, empname 이름 from emp

32 WHERE 절의 연산자 = : 같다 >=, >, < , <= , not, and, or In : 열거된 값 중 하나와 일치 Not in : 열거된 값 와 어떤 것과도 일치하면 안된다 /* 사번이 16359, 인 사원 */ select empno, empname,duty,hire_date from emp where empno in(16359, 16900); /* 사번이 16359, 이 아닌 사원 */ where empno not in(16359, 16900);

33 BETWEEN 연산자 - BETWEEN 2000 and 3500 2000 이상 3500이하 LIKE 연산자 - 문자열의 포함여부를 비교 - % : 0 이상의 문자열 - _ : 1개의 문자열 /* 월급이 2000이상 3500 이하인 사원 검색 */ select * from emp where sal between 2000 and 3000; /* LIKE를 사용한 조건 검색 */ select * from emp where empname like '%이%'; where empname like ‘이%'; where empname like ‘%이'; where empname like '_이_'; where empname like ‘이__'; where empname like '__이';


Download ppt "SQL SQL 불펌하지 마세요!!!!!!!! 불펌 금지."

Similar presentations


Ads by Google