일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- java spring
- SQL 문제
- 이클립스
- Eclipse
- 타입
- numpy
- ubuntu
- 노마드코더
- 람다식
- spring
- SQL 명령어
- Flex Box 기본
- java설치
- REACT
- 플랙스박스기본
- Flexbox Froggy
- 리액트
- spring 환경설정
- HTML5
- 자바스프링
- node.js
- SQL 연산자
- 관계형데이터베이스
- 객체지향프로그래밍
- 환경설정
- Hooks
- 스프링
- SQL
- 자바 스프링
- 오산대맛집
- Today
- Total
이것저것
[SQL] 여러문제 본문
사원정보가 중복되서 들어가있는경우
중복된 데이터를 걸러보자
--테이블 생성
create table tab01(
id number,
eno number,
name varchar2(20)
);
--필드 추가
insert into tab01 values(1, 10, '홍길동1');
insert into tab01 values(2, 10, '홍길동1'); --삭제대상
insert into tab01 values(3, 20, '홍길동2');
insert into tab01 values(4, 20, '홍길동2'); --삭제대상
insert into tab01 values(5, 20, '홍길동2'); --삭제대상
insert into tab01 values(6, 30, '홍길동3');
insert into tab01 values(7, 30, '홍길동3'); --삭제대상
insert into tab01 values(8, 40, '홍길동4');
insert into tab01 values(9, 50, '홍길동5');
insert into tab01 values(10, 50, '홍길동5'); --삭제대상
tab01의 eno가 같은 것들중에서 (group by)
아이디가 작은것을 골라준다.(select MIN(id))
그리고 그것들을 뺀 나머지를(where not id in)
tab01에서 출력해준다.
select *
from tab01
where not id in(
select MIN(id)
from tab01
group by eno
);
삭제할 데이터를 출력했으니 위의 데이터를 삭제 한 후 삭제된 데이터를 출력해보자
--뽑아준 데이터들을 삭제해줄것이다.
delete
from tab01
where not id in(
select MIN(id)
from tab01
group by eno
);
-- 제대로 삭제 되었는지 확인
select * from tab01;
sum over 사용
set timing on;
시간 측정을 하는 기능
set timing off;
off를 해줘야 기능이 꺼진다. 코드를 지워도 계속 진행됨
홍길동의 급여보다 많은사람을 출력
우선 EMP로 안에 속성값을 넣어준다.
drop table EMP;
create table EMP(
name varchar2(20),
sal number
);
insert into EMP values('홍길동', 300);
insert into EMP values('이순신', 500);
insert into EMP values('김갑수', 250);
insert into EMP values('갑을병', 700);
-- 홍길동보다 급여가 큰사람들을 출력
select *
from EMP
where sal > (
select sal
from EMP
where name = '홍길동');
view01을 만들어준다음에 안에 위에서 만든 서브쿼리문인 홍길동의 급여를 넣어준다.
그리고 제대로 들어갔나 확인을 해본다.
-- 혹시 view01이 있을 수 있으니 먼저 삭제해준다.
drop view view01;
-- view01을 만들어준다.
create view view01
as (
select sal
from EMP
where name = '홍길동'
);
-- 제대로 들어갔나 확인을 해준다.
select * from view01;
view01에 들어간 값은 홍길동의 급여 조건을 대신해주는 코드가 아닌 view01라는 테이블을 만들어준 것이다.
그러므로 첫번째 방법과 같이 그냥 view01이라는 것으로 바꿔서 표현해줄수는 없다.
view01을 불러와서 비교해줘야하므로 두번째와 같은 방법으로 사용해줘야한다.
-- 이 방법은 오류가 뜬다.
select *
from EMP
where sal > (view01);
--이 방법과 같이 view01을 불러와줘야한다.
select *
from EMP
where sal > (
select *
from view01);
무결성
데이터에 부여된 규칙을 무결성이라고한다.
데이터에 결점이 없어야한다.
drop table tab02;
create table tab02(
sal number
);
insert into tab02 values(1);
insert into tab02 values(2);
insert into tab02 values(3);
insert into tab02 values(4);
insert into tab02 values(5);
select * from tab02 t1
where 3 > (
select count (*)
from tab02 t2
where t2.sal > t1.sal
);
위의 쿼리문은 서브쿼리문이 없다.
t1에 1이 들어갔을때 t2와 교차가 일어난다.
t1이 1일때 t2가 식에 만족할경우는 4가지이다. 하지만 3보다는 작지 않으므로(where 3 >) 적용되지않는다.
t1이 2일때는 만족할 경우는 3가지이고 마찬가지로 만족되지않는다.
t1이 3일때는 2가지이고 3보다 작으므로 만족되므로 출력된다.
4와 5일때도 만족되므로 출력된다.
그러므로 3,4,5가 출력된다.
1등부터 3등까지 공동순위까지 출력해준다.
drop table tab02;
create table tab02(
sal number
);
insert into tab02 values(1);
insert into tab02 values(2);
insert into tab02 values(3);
insert into tab02 values(6);
insert into tab02 values(6);
insert into tab02 values(6);
insert into tab02 values(7);
insert into tab02 values(8);
select * from tab02;
select * from tab02 t1
where 4 > (
select count (*)
from tab02 t2
where t2.sal > t1.sal
)
order by t1.sal desc;
'Database' 카테고리의 다른 글
DBMS와 RDBMS, NoSQL이란 (0) | 2022.02.22 |
---|---|
[SQL]서브쿼리문 (0) | 2020.06.03 |
[SQL]JOIN (0) | 2020.06.02 |
[SQL] UNION, 연산자, ROLLUP, GROUPING (0) | 2020.06.01 |
[SQL]데이터 조회, 연산자 (0) | 2020.05.29 |