티스토리 뷰

3학년 2학기/DB

10/14

Hading 2016. 10. 14. 11:48
select * from student where dept = null;

 

이것에 대하여 안나오는 이유는 무엇일까 ??

 

식 -> true

        false

        unknown   sql의 식은 이 3가지를 통하여 판별 할 수 있다.

즉, null 에 관한 값은 unknown으로 처리 된다.

 

하지만 null값으로 찾을 수 는 없을까??

 

select * from student where dept is null;

is를 사용해주면 null값을 넣고 사용할 수 있다.

 

 

 

--수강인원이 3명 이상인 것을 보여 달라

select cno,count(*) as 수강인원,avg(finterm) as 기말고사평균 from enrol where snam >= 3 group by cno;

 

이런식으로 했다고 한다면 앞줄에 snam이 where 절에 걸리는데 동시에 작업을 할 수 는 없다.

 

grouping 을 한 다음에 사용할 수 있는 조건절은 Having 이다.


select cno,count(*) as 수강인원,avg(finterm) as 기말고사평균 from enrol group by cno having count(*) >= 3;



 

 

부속 질의 

 

--'C413'과목을 등록한 학생 이름을 찾아라

고 했을 때 enrol table 에서 student table 로 가서 학생의 이름을 찾아야 한다.


더 중요) select sname from student natural join enrol where cno = 'C413';

 

자연 조인을 이용하여 더 간단히 사용 가능


 


 

 

부속 질의를 사용하지 않았을 시


1단계 select sno from enrol where cno = 'C413';

-- 여기의 결과 값을

2단계  select * from student  where sno in (100,300,400);  숫자가 들어가는 부분은 집합이 들어가는 자리이다.
-- 2단계에서 다 쳐넣어야 된다.

 

-> SQL을 nesting이 가능하다. (반복이 가능하다.)

 

부속 질의를 사용 시

 

먼저 서브 쿼리가 실행되고 그 다음 그 결과값을 바탕으로 밖의 쿼리가 실행이 된다.

 

select sname from student  where sno in (select sno from enrol where cno = 'C413');

 

-- 학번이 100인 학생과 동일한 학과에 속한 학생을 모두 찾아라(100번 학생도 포함할 것)
select sname as 학생이름 from student where dept = ( select dept from student where sno = 100);



카티션 프로덕트

 

 

from 절에서 사용하는 방법

select *from student s,enrol e where s.sno = e.sno;

단어를 줄여 사용 가능 => 앨리어스 사용

 

select *from student s join enrol e
on s.sno = e.sno;

 

자연 조인

select *from student natural join enrol;

공통 컴럼에 대해서 동등 조인을 사용 할 수 있다.


(예시 문제들)

 

--데이터베이스 과목의 기말고사 최저 점수는?
select  cname, min(finterm) from enrol natural join course group by cname
having cname = '데이터베이스';

select * from course;
select * from student;
select min(finterm) from enrol where cno = 'C413';

 

-- 컴퓨터과 소속 학생들의 과목별 기말고사 평균을 구하여라.
select * from student;
select cno,avg(finterm) from enrol natural join student group by cno;

-- 모든 학생들에 대해 학생의 이름과 수강 과목이름, 해당 과목의 기말 고사와 중간고사의 합계를 다음과 같이 출력하라.
select sname as 이름, dept as 수강과목이름, (finterm + midterm)as 기말중간합계  from student natural join enrol ;

--정기태 학생이 수강한 모든 과목의 중간고사 성적 평균을 구하라
select avg(midterm) from student natural join enrol  where sname = '정기태';
select avg(midterm) from student join enrol on student.sno = enrol.sno where sname = '정기태';

-- 데이터베이스과목을 수강하는 학생들의 이름을 모두 찾아라.
select sname from (course natural join enrol)  join student  on enrol.sno = student.sno
where cname = '데이터베이스';

select * from (student natural join enrol)  natural join course 
on enrol.sno = student.sno
where cname = '데이터베이스';

'3학년 2학기 > DB' 카테고리의 다른 글

Chapter 4 관계 데이터베이스 (1)  (0) 2016.10.15
데이터베이스의 종류  (0) 2016.10.15
10/11 수업  (0) 2016.10.11
Chaper 3 데이터베이스 시스템의 구성  (0) 2016.10.11
Chapter 2 데이터베이스 관리 시스템 (2)  (0) 2016.10.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/07   »
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
글 보관함