데이터베이스

데이터베이스#7

DGeon 2023. 2. 7. 09:10
-- 정보미디어학부(부서번호:100)에 소속된 모든 학생의 학번, 이름, 학과 번호를 출력하여라
select * from student;
select * from department;

select studno, name, deptno
from student
where deptno in(
select deptno
from department
where college = 100);

-- 모든 학생 중에서 4학년 학생 중에서 키가 제일 작은 학생보다 키가 큰 학생의 학번, 이름, 키를 출력하여라
-- any연산자
select studno, name, height
from student
where height > any(
                    select height
                    from student
                    where grade = '4');
                    
select studno, name, height
from student
where height >(
                select min(height)
                from student
                where grade = '4');
-- all연산자
select studno, name, height
from student
where height > all(
                    select height
                    from student
                    where grade = '4');
                    
-- 보직수당을 받는 교수가 한 명이라도 있으면 모든 교수의 교수번호, 이름, 보직수당 그리고 급여와 보직수당의 합을 출력하여라
select profno, name, sal, comm, (sal+nvl(comm,0))
from professor
where Exists(
select * 
from professor
where comm is not null);

-- PAIRWISE 비교 방법에 의해 학년별로 몸무게가 최소인 학생의 이름, 학년, 몸무게를 출력하여라.
SELECT * FROM STUDENT
WHERE (GRADE, WEIGHT) IN (
                            SELECT GRADE, MIN(WEIGHT)
                            FROM STUDENT
                            GROUP BY GRADE);
-- UNPAIRWISE 비교 방법에 의해 학년별로 몸무게가 최소인 학생의 이름, 학년, 몸무게를 출력하여라.
SELECT NAME, GRADE, WEIGHT
FROM STUDENT

WHERE GRADE IN(
                SELECT GRADE 
                FROM STUDENT
                GROUP BY GRADE)
AND WEIGHT IN(
                SELECT MIN(WEIGHT) 
                FROM STUDENT
                GROUP BY GRADE)
ORDER BY 2, 3;
                
-- 각 학과 학생의 평균 키보다 키가 큰 학생의 이름, 학과 번호, 키를 출력하여라
SELECT NAME, DEPTNO, HEIGHT
FROM STUDENT S1
WHERE HEIGHT>(
                SELECT AVG(HEIGHT)
                FROM STUDENT S2
                
                WHERE S2.DEPTNO = S1.DEPTNO);
                
INSERT INTO STUDENT (STUDNO, NAME) VALUES(12345, '홍길동');
SELECT * FROM STUDENT WHERE STUDNO = 12345;

COMMIT;

UPDATE STUDENT SET NAME = '고길동' WHERE STUDNO = 12345;
DELETE STUDENT WHERE STUDNO = 12345;

insert into student
values (10110, '홍길동','hong','1','8501011143098','85/01/01','041)630-3114',170,70,101,9903);
select * 
from student
where studno = 10111;


insert into student
values (10111, '홍길동','hong','1','8501011143098','85/01/01','041)630-3114',170,70,101,'');

insert into department
values(301,'환경보건학과', '','');

select * from department;

insert into professor(profno, name, position, hiredate, deptno)
values(9920, '최윤식','조교수',TO_DATE('2006/01/01','YYYY/MM/DD'), 102);

select * from professor;

insert into professor
values(9910,'백미선','white', '전임강사',200, sysdate, 10, 101);

delete from student where studno=10110;

insert into stu3
select * from student;

select * from stu3;

rollback;

create table weight_info as select studno, name, weight from student where 1=0;
create table height_info as select studno, name, Height from student where 1=0;

--VALUES 값에 별칭도 가능 INTO값도 생략가능(대신 VALUES값을 다 넣어줘야함)
INSERT ALL
INTO Weight_info(STUDNO, NAME) VALUES(S, N)
INTO height_info VALUES(S, N, H)
SELECT STUDNO S, NAME N, HEIGHT H FROM STUDENT WHERE GRADE >= 2;

SELECT * FROM WEIGHT_INFO;
SELECT * FROM HEIGHT_INFO;

--테이블은 남겨두고 데이터값만 삭제
TRUNCATE TABLE WEIGHT_INFO; 
TRUNCATE TABLE HEIGHT_INFO;

서브쿼리

in

any

all

EXISTS

PAIRWISE

UNPAIRWISE

  • DML
    • SELECT
    • INSERT
    • UPDATE
    • DELETE
  • DDL
  • 트랜잭션(ACID)
    • 원자성
    • 일관성
      • 값 참조시에 복사본을 활용 해서
    • 고립성
      • 다른 트랜잭션이 끼어 들지 못함 SQL DEVELOPER로 SQL작동 시 CMD에선 무한 대기가 생길 순 있음
    • 지속성
      • 정상적인 종료가 된 다음에 데이터베이스 작업의 결과가 저장되어야한다
  • CONDITIONAL