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. 다른 사용자 테이블 접근
select sno, sname
from hongkildong.STUDENT
where DEPT = '컴퓨터'
AND YEAR = 4;
7. 테이블 변경
학번(SNO) |
성명(SNAME) |
학과(DEPT) |
학년(YEAR) |
202001001 |
신선호 |
컴퓨터공학과 |
2020 |
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;