제약조건 삭제하기

-- 제약조건 삭제하기
alter table emp07
drop primary key;

alter table emp07
drop constraint emp07_empno_pk;

 

foreign key : 두개의 테이블을 사용하여 값을 참조하고 제한 하는 조건

-- foreign key (fk)
-- 자식테이블이 부모테이블의 정보를 참조
-- 부모테이블이 먼저 존재
-- 나중에 생성된 테이블이 자식테이블
-- 자식테이블에만 F.K 조건을 설정
-- 부모쪽 해당 컬럼은 primary key여야 한다.

-- fk references 라고 써야한다

-- 컬럼레벨 방식
create table emp08 (
empno number(4) constraint emp08_empno_pk primary key,
ename varchar2(10) constraint emp08_ename_nn not null,
job varchar2(15),
deptno number(2) constraint emp08_deptno_fk references dept(deptno)
);

insert into emp08
values (1111, 'hong', 'sales', 10);

insert into emp08
values (2222, 'kim', 'sales', 50);

select * from emp08;

-- scott 계정은 맥에서 직접 터미널을 이용해 만들었기 때문인지 테이블 정보들이 조금씩 다름
-- dept 테이블 deptno에 pk 설정이 되지 않아 이 구문을 통해 직접 부여
alter table dept
add primary key(deptno);


-- 테이블 레벨 방식
create table emp09 (
empno number(4) constraint emp09_empno_pk primary key,
ename varchar2(10) constraint emp09_ename_nn not null,
job varchar2(15),
deptno number(2),

-- 나의 정보()에 대해 제약조건을 걸겠다 라고 써줘야 한다
constraint emp09_deptno_fk foreign key(deptno) references dept(deptno)
);

-- 테이블이 생성된 후의 레퍼런스(참조) 
-- alter table emp09
-- add constraint emp09_deptno_fk foreign key(deptno) references dept(deptno)

실제 프로그램을 짜면 관리해야 하는 데이터가 많은데

여러개의 테이블 중 서로 관계를 맺는 테이블 존재

foreign key 제약조건 성립한 테이블끼리는 조인 조건.

 

🍀 view

-- view (select 구문이다)
-- 특정 조건에 따라 필터링된 가상 테이블
-- 데이터 보호와 보안을 위해 만들어짐
-- 복잡한 쿼리문의 사용을 단순화할 수 있다
-- crud 가능

-- 뷰 테이블 만드는 형식
create [or replace] view 뷰 이름[(값1, 값2, ... )]
as
서브쿼리문
[with check option]
[with read only]

-- 서브쿼리문
-- select (select)
-- from (select)
-- where (select)

 

뷰 테이블 만들기에 앞서 원본 테이블이 있어야 함.

-- 원본테이블 생성
create table dept_copy 
as 
select * from dept;

create table emp_copy
as
select * from emp;

select * from emp_copy;

 

 

뷰 테이블 만들기

-- 뷰 테이블 작성
create view emp_view30
as 
select * from emp_copy
where deptno = 30;

select * from emp_view30;

 

테이블을 만드는 것도 권한, (오라클에서 자체적으로 줌)

뷰를 만드는 권한 부여를 해야 함. (system 계정에서 객체 권한 주기)

-- system 계정에서

grant create view
to scott;

 

(다시 scott계정에서)

뷰 테이블 생성, 삭제, 수정

-- USER_VIEWS
-- 딕셔너리 테이블
-- 구조 보기
desc user_views;

-- 아래 text를 통해 select 구문을 확인할 수 있음
select view_name, text 
from user_views;

-- 내꺼 + 위임 받은 view 까지 조회
select view_name, text 
from all_views;


create view emp_dept_sal
as
select ename, sal, e.deptno, dname, grade
from emp e inner join dept d
on e.deptno = d.deptno
inner join salgrade s
on e.sal between s.losal and s.hisal;

select * from emp_dept_sal;

-- 뷰 삭제
drop view emp_dept_sal;

-- 뷰 수정
create or replace view emp_view30
as 
select empno, ename, sal, hiredate, deptno
from emp_copy
where deptno = 30;

select * from emp_view30;

 

 

제약이 있는 뷰 테이블

-- [with check option]
-- 특정 컬럼 정보 수정 불가

-- [with read only]
-- 전체 컬럼 수정 불가

-- 특정 컬럼 정보 수정 불가 뷰
create or replace view view_chk30
as
select empno, ename, sal, comm, deptno
from emp_copy
where deptno = 30 with check option;

select * from view_chk30;

update view_chk30
set deptno = 20 -- 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다
where deptno = 30; 


-- 읽기 전용 뷰 (전체 컬럼 수정 불가)
create or replace view view_read20
as
select empno, ename, sal, comm, deptno
from emp_copy
where deptno = 20 with read only;

select * from view_read20;

update view_read20 -- 읽기 전용 뷰에서는 DML 작업을 수행할 수 없습니다.
set sal = sal * 1.1
where sal >= 3000;

 

 

뷰 테이블 별칭 부여

-- 별칭 부여 가능 (한글도 가능, 하지만 권하지 않음)
-- 가능하다면 별칭을 안쓰는 것이 좋다
create or replace view view_read10 (사원번호, 사원명, 급여, 부서번호)
as
select empno, ename, sal, deptno
from emp_copy
where deptno = 10 with read only;

select * from view_read10;

select * from view_read10
where ename = 'KING'; -- 오류가 생긴다

-- 뷰테이블을 만들 때 별칭을 부여했다면 조회할 때도 별칭을 사용해야 한다.
select * from view_read10
where 사원명 = 'KING';

 

 

뷰 테이블 활용

-- 뷰 테이블을 활용한 TOP-N 구하기
-- rownum(의사컬럼) : 조회 시 레코드 순서대로 1번 부터 번호 부여
-- 오라클 시스템에서 제공해주는 컬럼, 테이블에는 없지만 제공 -> 의사컬럼
-- 아무 테이블이나 사용 가능
-- rownum은 order by절보다 먼저 실행된다, 조건절에 사용 시 반드시 1을 포함한 조건식을 만들어야 한다.

select rownum, empno, ename, sal, deptno
from emp
where rownum >= 1 and rownum <= 2;

-- rownum을 쓰는 순간 * 사용 불가
-- 전체 컬럼 조회 시 테이블에 별칭을 준다
select rownum, e.*
from emp e;


-- 입사일이 가장 빠른 사람 5명

select rownum, e.*
from emp e
order by hiredate asc;
-- order by를 쓰면 rownum 이 섞여버린다
-- order by가 쿼리문의 가장 마지막에 실행됨.

-- 원하는 실행방법이 아님
select rownum, e.*
from emp e
where rownum >= 1 and rownum <= 5
order by hiredate asc;

-- 원하는 형태로 출력을 위해 뷰 테이블 만들어서 출력
create or replace view view_hire
as
select * from emp
order by hiredate asc;

select rownum, h.*
from view_hire h;

select rownum, h.*
from view_hire h 
where rownum between 1 and 5;


-- 입사일이 빠른 사람 2번째 ~ 6번째
-- rownum을 간접적으로 사용하기
select rownum, h.*
from view_hire h 
where rownum > 1 and rownum <= 6;
-- 실행 X


delete from emp
where ename = 'a';


-- 인라인 뷰
-- 일회성 가상 테이블
-- 메모리의 부화를 주지 않음 -> 효율성이 높아진다

select rownum, h.*
from (
select empno, ename, hiredate
from emp
order by hiredate
) h
where rownum between 1 and 5;


-- 입사일이 빠른 사람 2번째 ~ 6번째
-- rownum에 별칭을 부여함으로서 고정시킬 수 있음.
select rownum rm, h.*
from (
select empno, ename, hiredate
from emp
order by hiredate
) h;

select rm, h2.*
from (
        select rownum rm, h.*
        from (
            select empno, ename, hiredate
            from emp
            order by hiredate
        ) h
      ) h2
where rm between 2 and 6;

→ 게시판 만들기할때 사용

 

 


 

오후에 자바스크립트를 제이쿼리로 바꾸기 시험을 본다.

그 전에 참고할 내용 정리!

 

$("셀렉터").html()
셀렉터 태그 내에 존재하는 자식태그을 통째로 읽어올때 사용되는 함수

※ 태그 동적추가할때 주로 사용되는 함수

$("셀렉터").text()
셀렉터 태그 내에 존재하는 자식태그들 중에 html태그는 모두 제외 한 채 문자열만 출력하고자 할때 사용되는 함수

※ html태그까지 모두 문자로 인식시켜주는 함수

출처:

 

jQuery 3강 - html() vs text() 함수 차이점 알아보기 + val() 함수를 이용한 input 태그의 값 확인 추가

jQuery에서 지원되는 함수만으로 간단하게 태그값들을 확인 할수 있습니다.그리고 반대로 원하는 값을 태그값에 적용 또한 가능합니다. html()함수와 text() 함수 그리고 val() 함수에 대하여 포스팅

hellogk.tistory.com

[IT Code Storage:티스토리]

+ Recent posts