일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- w3school
- javaee
- 원형그래프
- cisco packet
- 리눅스
- 네트워크관리사
- rinux
- 이것이 자바다
- php
- Oracle
- VLAN
- html
- 네트워크
- 데이터베이스
- 정보처리기사
- ospf
- NCS
- ciscopacket
- Java
- 라우터
- 자바
- 오라클
- 정처기필기
- 버추얼머신
- sql
- autoset
- jsp
- 참조타입
- jsp연결
- Cisco
- Today
- Total
기록해! 정리해!
3-SQL 기본문법 정리 본문
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 : 형식 정하는 거
데이터익스포트 : 값