기록해! 정리해!

3-SQL 기본문법 정리 본문

Oracle

3-SQL 기본문법 정리

zsuling 2022. 5. 18. 22:15

5/18

 

1) 커밋

: 커밋을 눌러야 확정이 돼서 웹에서 보임 (외부에서 들어오는 데이터는 자동으로 커밋됨)

 

2) 데이터 정의어

DDL - Create, Drop, Alter(수정), 
DML- 조작어,  select, update, insert, delete 

DCL -데이터 제어어 , Grant, Revoke 권한을 부여하고 회수하는 것

TCL - 트렌젝션 제어어 , Commit(확정), Rollback(원위치)

 

3) pk

 constraint   student_sno_pk   primary  key(sno)); 

--sno에 pk제약조건을 걸고 이름은 student_sno_pk 로 할게요

 

 create table course(
 cno varchar2(5) primary key, --pk 개념 자체에 not null이 포함되어있지만, 작성하는게 좋음
 cname nvarchar2(10) not null, -- 사용해도됨

 

 constraint enrol_sno_fk foreign key(sno) references student(sno), --student의 pk를 참조
 constraint enrol_cno_fk foreign key(cno) references course(cno),
 constraint enrol_combo_pk primary key(sno, cno)); 

--예)100번이 C123 과목 시험쳤으면 또 못친다고 정의하는 것/ 재시험 불가 제약조건 (없애면 재시험 칠 수 있음)

 

4) between A and B (195p)

 select sno, sname, year , dept
 from student
 where year between 2 and 3; --2이상 3이하 / 앞에 작은 수 뒤에 큰 수

 

5) Count 

select count(sno) as "학생 수"
from student; --sno를 카운트

 

null은 카운팅 안함

공백문자는 카운팅 함

 

6) NVL 

: null을 원하는 값으로 치환시켜줌 / nvl(컬럼,치환할값)

 

select sno, sname, nvl(year,0),dept
from student;


select count(nvl(year,0)) as "학생 수"
from student; --year가 null이면 0처럼 보임

 

-- 이따 오라클에 실행해보기

 

7) group 205p

 

select sno, count(dept) as "학생 수"
from student; --에러/ sno(단독컬럼)와 dept(그룹화)가 안맞음

 

select sno, count(dept) as "학생 수"
from student
group by sno; --sno를 기반으로 그룹화

 

select dept, year, count(dept) as "학생 수"
from student
group by dept, year --단독 컬럼과 그룹을 같이 쓰려면 컬럼을 그룹화 해줘야함
order by dept desc;

 

 

8) distinct 중복제거 (컬럼의 가장 앞에 씀) 200p

 

select distinct dept
from student;

select count (distinct dept) as "학과 수"
from student;

 

9) group by, having 205p

- having 절 : 조건 where 말고 group by (그룹화) 후에 조건을 다는 것 

 

select dept "학과명", count(dept) "학생 수"
from student
where dept!='전기'
group by dept
having count(dept)>=2
order by count(dept) desc;

 

--이 순서를 바꾸면 안됨

 

10)집계함수 SUM, AVG, MAX, MIN 207p

 

select sum(year),count(year),avg(year)평균1, round(avg(nvl(year,0)),1) as "평균2" 
,max(year)최고학년, min(year)최저학년
from student;

 

--평균값의 소숫점을 round로 정리해줌

--round(값,1) : 소수 첫째자리 반올림

  round(값,0) : 1의 자리까지 표시

  round(값,-1) : 10의 1승 자리까지 표시 

  round(값,-2) : 10의 2승 자리까지 표시 

예) round(123.456,-1)  / 10

     round(123.456,-2) / 100

 

11) Join 274p

 

select * from student

inner join enrol
on student.sno=enrol.sno; 

--이너조인을 하면 할수록 레코드가 줄어들 수도 있다. 같은게 없으니까

 

--세개 조인

select * from student 

join enrol
on student.sno=enrol.sno    --1.학생sno와 등록sno을 기준으로 조인
join course

on enrol.cno=course.cno;   -- 2.교수cno와 등록cno을 기준으로 조인

 

예)

select s.sno, sname, year, s.dept, 
       c.cno, cname, c.dept, prname, 
       grade, midterm, final 
from student s   
join enrol e
on s.sno=e.sno
join course c on e.cno=c.cno
where s.dept='컴퓨터'; 

 

테이블명 별칭 잡아주고

셀렉트 할 것에 별칭으로 표현해주기

 

12) 데이터 주고받기

엑셀에서 가져오기

: 접속 - system - 테이블 -> 데이터 임포트

 

select * from minjin100;
update minjin100 set 번호= substr(번호, 0 ,length(번호)-1);

 

데이터 내보내기

: 익스포트

 

DDL : 형식 정하는 거

데이터익스포트 : 값

 

'Oracle' 카테고리의 다른 글

4-2  (0) 2022.05.19
4-1  (0) 2022.05.19
3- 예제2 (join)  (0) 2022.05.18
3-3  (0) 2022.05.18
3-예제1  (0) 2022.05.18
Comments