SQL_2일차

서창민·2023년 3월 12일
0

SQL

목록 보기
2/10
post-thumbnail

23.03.10 금 2일차

오늘은 이전에 배웠던 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의 평균의 소숫점 첫째자리에서 반올림

느낀점

아직은 완전하게 숙지가 되지 않은 생각이 든다.
복습의 반복으로 손에 익히고 머리에 이해하고 암기하면서
활용을 주로 공부할 수 있도록 해야겠다.

profile
Back-end Developer Preparation Students

0개의 댓글