오늘은 이전에 배웠던 SQL을 활용하여 문제를 풀어보는 시간으로 보냈다.
연습문제를 확인하며 이전 시간에 배운 내용들을 활용할 수 있는지 확인해보고 복습하도록 해보자.
연습문제 2
-- 1. 이름이 나연묵인 학생의 레코드를 출력하시오.
select * from student
where sname='나연묵';
-- 2. 학년이 3학년 또는 4학년인 학생의 이름을 출력하시오.
select sname as "이름"
from student
where year = '3' or year ='4';
select sname as "이름", year as "학년"
from student
where year in ('3', '4');
-- 3. 이름에 "찬" 이란 글자가 있는 학생이 학번과 이름을 출력하시오.
select sno as "학번", sname as "이름"
from student
where sname like '%찬%';
-- 4. 학번을 기준으로 내림차순 정렬하시오.
select * from student
order by sno desc;
-- 5. 학과가 컴퓨터이고 학년이 4학년인 학생의 학번와 이름을 출력하시오.
select sno as" 학번", sname as "이름" from student
where dept='컴퓨터' and year='4';
--문제 1. 600번, 영심이를 추가하시오
insert into student(sno, sname) values('600','하늘이');
select * from student;
--문제 2. 600번 학년을 3학년으로 수정하시오.
update student set year='3'
where sno='600';
select * from student;
기본적인 Select 문법을 활용해 해당하는 학생의 내용을 출력하는 문제들을 풀어보았다.
Select + 칼럼명 + from 테이블명
문법을 통해 사용할 테이블과 출력할 칼럼명을 정하고
where + 칼럼명 = '값'
문법을 통해 문제에 해당되는 출력값을 출력하도록 했다.
또한 추가와 수정의 내용인
insert + into + 테이블명(칼럼명) + values(값)
의 구문을 통해 레코드를 추가할 수 있으며,
update + 테이블명 + set + 칼럼명 + 값
의 구문을 통해 추가된 레코드의 값을 수정할 수 있었다.
아직 익숙치 않아 헷갈리는 부분이 있었지만,
복습을 진행하며 어렵지 않게 문제를 풀 수 있었다.
다음은 JOIN을 활용한 문제를 풀어보도록 했다.
JOIN 활용 연습문제
1-1) 100번인 학생의 학번, 이름, 과목코드, 중간, 기말 을 출력하시오.
select s.sno, sname, cno, MIDTERM, FINAL
from student s
join enrol e on s.sno = e.SNO
where s.sno='100';
-- 찾고자하는 칼럼의 중복되는것을 먼저 알아보기
1-2) 100번인 학생의 학번, 이름, 과목코드, 과목명, 중간, 기말 을 출력하시오.
select s.sno, sname, cno, MIDTERM, FINAL
from student s
join enrol e on s.sno = e.SNO
where s.sno='100';
2-1) 200번 학생이 수강한 과목코드를 출력하시오.
select cno from enrol
where sno='200';
2-2) 200번 학생이 수강한 과목코드와 과목명을 출력하시오.
select c.cno, cname
from course c
join enrol e on e.cno=c.cno
where sno='200' ;
3) 300번 학생이 수강한 과목코드와 과목명을 출력하시오.
select c.cno, cname
from course c
join enrol e on e.cno=c.cno
where sno='300' ;
join을 활용하는 내용은 정확하게 정립되지 않아 많이 헤매었다.
join + 칼럼명 + on 의 구문으로 이루어지며,
두개의 테이블의 내용을 참조하여 사용하도록
묶어주는 역할이다.
다시 한번 더 정리하면서 공부하도록 해야겠다.
VIEW
다음은 VIEW 를 만드는 방법에 대해 배웠다.
create view v_join1
as
select s.sno, sname, cno, MIDTERM, FINAL
from student s
join enrol e on s.sno = e.SNO ;
select * from v_join1; -- 확인
create + view + 뷰 테이블 명 + as + select 구문
을 사용하여 뷰테이블을 만들 수 있었다.
select문을 사용해 뷰테이블이 정상적으로
만들어졌는지 확인 할 수 있다.
그룹함수
오늘 새로 배운 그룹함수는 평균(avg)과 합(sum)의 내용이다.
-- 뷰테이블 v_join1의 중간과
기말 합 구하기
select sum(midterm) as "중간성적합",
sum(final) as "기말성적합"
from v_join1;
select sum(midterm) as "중간성적합",
sum(final) as "기말성적합",
avg(midterm) as "중간성적평균",
avg(final) as "기말성적평균"
from v_join1
v_join1 뷰테이블의 sum과 avg를 활용하여 중간성적과 기말성적의 합과 평균을 구하는 코드를 작성했다.
합과 평균의 각 별칭을 부여하여 칼럼명을 수정하였다.
오라클의 집계함수를 sum,avg를 사용해서 확인이 가능하다.
또한 중복되는 레코드의 값을 하나로 보여주는 코드륵 작성해 보았다.
group by와 round
-- 뷰테이블 v_join1의 중간과 기말 합과 평균 구하기
select sname, sum(midterm) as "중간성적합",
sum(final) as "기말성적합",
avg(midterm) as "중간성적평균",
avg(final) as "기말성적평균"
from v_join1
group by sname; -- 그룹함수에서 이름을 출력하는 명령문
-- 평균 소수점을 반올림하는 Round
select sname, sum(midterm) "중간성적합",
sum(final) "기말성적합",
round(avg(midterm),1) "중간성적평균",
round(avg(final),1) "기말성적평균"
from v_join1
group by sname; -- 그룹함수에서 이름을 출력하는 명령문
group + by + 칼럼명을 사용하여 그룹함수에서
출력하고자 하는 칼럼의 내용을 출력할 수 있고,
round를 사용하여 표현하고자 하는 출력 값의
소수점 자리를 반올림하여 볼 수있다.
EX)
round(avg(midterm),1)
: midterm의 평균의 소숫점 첫째자리에서 반올림
느낀점
아직은 완전하게 숙지가 되지 않은 생각이 든다.
복습의 반복으로 손에 익히고 머리에 이해하고 암기하면서
활용을 주로 공부할 수 있도록 해야겠다.