sql 해 혹 - 통 금 카드
그 는 여러 개의 출입금지 카드 를 가지 고 있 을 수 있 지만, 한 번 에 한 가지 만 효과 가 있 을 수 있다.최신 출입 통제 카드 가 새 직장 에서 나 왔 기 때문에 이 카드 는 기본적으로 유효 하 다.모방 을 방지 하기 위해 서 출입 금지 카드 번 호 는 무 작위 입 니 다.
당신 의 임 무 는 직원 목록 을 만 드 는 것 입 니 다. 모든 직원 은 관련 된 효과 적 인 출입 통제 카드 가 필요 합 니 다.A 를 사용 하면 유효 (Active) 를 표시 하고, I 는 무효 (Inactive) 를 표시 합 니 다.
방법 1:
personel 표 삭제
drop table personel;
create table personel(
emp_id integer not null primary key,
emp_name varchar2(40) not null
);
create sequence personel_sequence
increment by 1
start with 1
nomaxvalue
nocycle
cache 10;
//alter table personel add constraints PK_personel_emp primary key(emp_id);
insert into personel values(personel_sequence.nextval,'liaobinxu');
insert into personel values(personel_sequence.nextval,'fenerdong');
insert into personel values(personel_sequence.nextval,' ');
insert into personel values(personel_sequence.nextval,' ');
출입금지 카드 배지 만 들 기
drop table Badges;
create table Badges(
badge_id integer not null primary key,
emp_id integer not null references personel(emp_id),
issued_date date not null,
badge_status char(1) not null check(badge_status in('A','I')),
check (1
인용 하 다.
check (1 - - ORA - 02251: 하위 조회 가 허용 되 지 않 아 표 생 성 에 실 패 했 습 니 다.
많은 sql 제품 은 표 급 제약 을 지원 하지 않 습 니 다. select 제약 을 사용 합 니 다. Oacle 도 마찬가지 입 니 다. 그래서 마지막 check 을 제거 합 니 다.
create table Badges(
badge_id integer not null primary key,
emp_id integer not null references personel(emp_id),
issued_date date not null,
badge_status char(1) not null check(badge_status in('A','I'))
);
데이터 삽입
create sequence badge_sequence
increment by 1
start with 1
nomaxvalue
nocycle
nocache;
badge id 를 badge sequence 시퀀스 로 삽입 한 nextval, issued date 는 sysdate 에 0 - 30 사이 의 무 작위 수 를 추가 합 니 다.
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'I');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'I');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'I');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'I');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'I');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'I');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'I');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'A');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'A');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'A');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'A');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'A');
insert into Badges(badge_id, emp_id , issued_date,Badge_Status)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'A');
최근 차단 카드 상 태 를 & lsquo; A & rsquo 로 설정 하 는 방법 을 사용 합 니 다.
상태 보기
select badge_id, emp_id, to_char(issued_date,'yyyy-mm-dd hh24:mi:ss'),badge_status from badges order by emp_id;
BADGE_ID EMP_ID TO_CHAR(ISSUED_DATE,'YYYY-MM-D BADGE_STATUS --------------------------------------- --------------------------------------- ------------------------------ ------------ 9 1 2009-03-30 19:04:32 A 4 1 2009-04-14 19:04:32 I 3 1 2009-04-01 19:04:32 I 8 2 2009-03-29 19:04:32 A 10 2 2009-04-19 19:04:32 A 2 2 2009-04-08 19:04:32 I 12 2 2009-04-12 19:04:33 A 6 3 2009-04-16 19:04:32 I 5 3 2009-03-24 19:04:32 I 1 3 2009-03-29 19:04:32 I 6 3 2009-03-25 19:04:32 I 11 3 2009-04-15 19:04:32 A 7 4 2009-04-03 19:04:32 A 13 rows selected
업데이트 조건 을 구축 하기 위해
update badges set badge_status='I';
update Badges set badge_status ='A'where ('I'=all(select badge_status from badges b1 where Badges.emp_id =b1.emp_id))and (issued_date=(select max(issued_date) from badges b2 where badges.emp_id =b2.emp_id))
업데이트 결과 보기
select * from badges order by emp_id, issued_date;
BADGE_ID EMP_ID ISSUED_DATE BADGE_STATUS --------------------------------------- --------------------------------------- ----------- ------------ 2 1 2009/3/25 1 A 5 2 2009/3/30 1 I 12 2 2009/4/6 19 I 6 2 2009/4/8 19 I 3 2 2009/4/18 1 A 7 3 2009/4/11 1 I 4 3 2009/4/20 1 A 8 4 2009/3/29 1 I 10 4 2009/3/31 1 I 1 4 2009/4/7 19 I 9 4 2009/4/8 19 I 13 4 2009/4/9 19 I 11 4 2009/4/12 1 A 13 rows selected
방법 2 다른 방법 은 출입금지 카드 에 일련 번 호 를 배정 하고 min () 과 max () 순서 번 호 를 효과 적 인 출입금지 카드 로 사용 하 는 것 이다.
배지 삭제
drop table badges;
drop sequence badge_sequence;
--
create sequence badge_sequence
increment by 1
start with 1
nomaxvalue
nocycle
nocache;
- badge 상 태 를 판단 하 는 badge status 때문에 badge seq 를 만 들 고 min () 과 max () 순서 번 호 를 유효한 접근 금지 카드 로 사용 합 니 다.
create table badges
(
badge_id integer not null primary key ,
emp_id integer not null references personel(emp_id),
issued_date date not null,
badge_seq integer not null check(badge_seq>0),
unique(emp_id, badge_seq)
);
create sequence badge_increment_sequence
increment by 1
start with 1
nomaxvalue
nocycle
noorder;
-- badge_id badge_sequence nextval,
-- issued_date sysdate 0-30
insert
into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert
into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert
into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert
into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert
into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert
into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert
into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),'badge_increment_sequence.nextval);
insert into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
insert into Badges(badge_id, emp_id , issued_date,Badge_seq)
values(badge_sequence.nextval,round(dbms_random.value(1,4)),sysdate+round(dbms_random.value(0,30)),badge_increment_sequence.nextval);
올 바른 차단 카드 를 표시 하기 위해 보 기 를 만 듭 니 다:
create view ActiveBadges(emp_id, badge_id)
as
select emp_id, badge_id
from badges b1
where b1.badge_seq=
(select max(badge_seq) from badges b2
where b1.emp_id =b2.emp_id
);
그러나 차단 카드 를 잃 어 버 린 후, 이 방법 은 시퀀스 번 호 를 복원 하기 위해 업데이트 작업 을 수행 해 야 합 니 다. 이 조 회 는 이렇게 할 필요 가 없 지만, 번호 가 잘 배열 되 어 있 는 것 을 보고 모든 직원 의 카드 총 수 를 조 르 기 쉽 습 니 다.
update badges
set badge_seq=(
select count(*) from badges b1
where badges.emp_id =b1.emp_id and badges.badge_seq>=b1.badge_seq
);
이 update 는 같은 직원 아래 같은 데 이 터 를 비교 하여 update 이전의 데 이 터 를 추출 한 다 는 뜻 입 니 다.
select * from badges order by badge_id, emp_id;
-- update 이후 데이터
select * from badges order by badge_id, emp_id;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깊이 중첩된 객체를 정확히 일치 검색 - PostgreSQL목차 * 🚀 * 🎯 * 🏁 * 🙏 JSON 객체 예시 따라서 우리의 현재 목표는 "고용주"사용자가 입력한 검색어(이 경우에는 '요리')를 얻고 이 용어와 정확히 일치하는 모든 사용자 프로필을 찾는 것입니다. 즐거운 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.