SQL 활용

Updated:

강의

http://www.kocw.net/home/search/kemView.do?kemId=317898

SQL 활용

1. select : 중첩 질의

  • where 절 안에 다른 select 문을 삽입할 수 있음
  • 가능 형태
    • 하나의 값만 반환되는 경우
    • 하나의 속성만 관여하는 경우
    • 여러 속성이 관여하는 경우
  • 중첩 질의 또는 서브쿼리

  • 신선호가 소속한 학과 학생 명단을 출력하라. 학번, 성명으로 출력하라
학번(SNO) 성명(SNAME) 학과(DEPT) 성별(GENDER)
202001001 신선호 컴퓨터공학과 남성
SELECT SNO, SNANEM 
FROM STUDENT
WHERE DEPT = (SELECT DEPT
              FROM STUDENT
              WHERE SNAME = '신선호');
  • 송광호보다 성적이 우수한 학생의 성명, 학과, 성적을 출력하라.
학번(SNO) 성명(SNAME) 학과(DEPT) 학년(YEAR) 성적(SCORE)
202001001 신선호 컴퓨터공학과 남성 100
SELECT SNO, DEPT, SCORE 
FROM STUDENT
WHERE SCORE >= (SELECT SCORE
              FROM STUDENT
              WHERE SNAME = '송강호');
  • 장나라가 수강신청한 과목을 하나라도 신청한 학생의 성명, 학과, 학년을 알아내세요.

SELECT SNAME, DEPT, YEAR
FROM STUDENT, REGIST
WHERE 1=1 
AND STUDENT.SNO = REGIST.SNO
AND REGIST.CNO IN (SELECT CNO 
                   FROM REGIST 
                   WHERE SNO = (SELECT SNO
                                FROM STUDENT
                                 WHERE SNAME ='장나라'));
  • 2007년에 감독 자신의 평균 제작비보다 많은 제작비가 들어간 영화의 감독, 제목을 표로 작성하라.
제목(title) 감독(DIRECTOR) 주연(ACTOR) 제작년도(YEAR) 제작비(INVEST)
         
SELECT DIRECTOR, TITLE
FROM MOVIE X
WHERE INVEST >= (SELECT AVG(INVEST)
                 FROM MOVIE X
                 WHERE X.DIRECTOR = Y.DIRECTOR
                 AND YEAR = '2007');

2. SELECT : 집합연산

환자(NAME) 증상(SYMPTOM) 주소(ADDRESS) 내원일(DATE)
       
  • 위의 표가 똑같은 병원 테이블이 두 개 있을 경우(X, Y라고 각각하면)
  • 두 병원에서 치료받은 환자들의 성명과 내원일 목록을 작성하라.
SELECT NAME, DATE
FROM X-HOSPITAL
INTERSECTION
SELECT NAME, DATE
FROM Y-HOSPITAL
  • 두 병원에서 모두 치료받은 환자들의 성명과 내원일 목록을 작성하라.
SELECT NAME, DATE
FROM X-HOSPITAL
INTERSECTION
SELECT NAME, DATE
FROM Y-HOSPITAL

3. 데이터 삽입

  • INSERT INTO TABLE 명 (컬럼1, 컬럼2, …) values(value1, value2…);

4. 데이터 수정, 변경

5. delete : 삭제

6. 다른 사용자 테이블 접근

  • 다른 사용자 테이블을 사용할 수 있는 권한이 있을 때 가능
  • 테이블 명칭
  • 지금 까지 테이블 명칭에 사용자 이름을 부가하여 사용

  • 개발자 홍길동씨가 관리하고 있는 student 테이블에서 컴퓨터공하고가 4학년 학생의 학번과 성명을 찾아 내어라.
select sno, sname
from hongkildong.STUDENT
where DEPT = '컴퓨터'
AND YEAR = 4;

7. 테이블 변경

학번(SNO) 성명(SNAME) 학과(DEPT) 학년(YEAR)
202001001 신선호 컴퓨터공학과 2020
  • STUDENT 테이블에 이메일을 추가하라
ALTER table student add EMAIL varchar(30) null;
  • student 테이블의 학번을 20자리로 변경하라
alter table student modify sno varchar(20);
  • 학번을 삭제하라.
alter table student drop year;

8. 뷰

  • 다른 테이블로부터 생성되는 가상 테이블
  • 기본 테이블과 기능이 유사하지만, 갱신에 제한이 있음
  • 기본 테이블은 물리적으로 존재하고 저장되지만, 뷰는 실행시에만 사용되며 저장되지 않음

8.1 뷰의 생성

create view  명칭 (열명칭1, 열명칭2...)
as select 문장
[with check option]
  • 학생 테이블에서 컴퓨터공학과 재학생만으로 구성되는 cestudent 뷰를 생성하라.
학번(SNO) 성명(SNAME) 학과(DEPT) 학년(YEAR) 연락처(contact)
202001001 신선호 컴퓨터공학과 2020 010-0000-0000
create view cestudent (ce-name, ce-no, ce-year, ce-contact)
as select sname, sno, year, contact
	from student
	where dept = '컴퓨터공학'
with check option;