교재 chap 4,5
데이터타입과 데이터 무결성
1. 오라클 DB Server 서비스
1) 제어판
: 시작 -> 서비스검색 -> OracleServiceXE -> 시작 및 정지
2) 오라클 자체
: 시작 -> 모든프로그램 -> Oracle Database 11g -> Start DB or Stop DB
2. 오라클 명령어 입력
1) sqlplus
: 시작 -> cmd -> sqlplus java0514/1234
2) Run Command Line
: SQL>connect
아이디 : java0514
비번 : 1234
connected <- 뜨는지 확인할 것
3) SQL Developer
: 별도설치 (오라클 로그인 필요)
4) 웹브라우저
: 시작-> OracleServiceXE -> get Started
자기 자신의 pc를 지칭하는 IP와 도메인
- 127.0.0.1 / localhost
http://127.0.0.1:8080/apex -> http:// : 프로토콜 127.0.0.1 : ip 8080 : 포트번호
http://localhost:8080/apex
5) Eclipse
: DataSource 연결
데이터명령어
DCL명령어 (Data Control Language 제어어) |
사용자가 별로 쓸일이 없음. 호스팅업체가 주로 사용 |
- grant 사용자 접근 권한부여 - revoke 사용자 접근 권한 취소 - deny 특정사용자만 접근차단 |
DDL명령어 (Data Definition Language 정의어) |
DB 및 TABLE에 대한 정의 |
- create 생성 - Drop 삭제 - Alter 수정 |
DML명령어 (Data Manipulation Language 제어어) |
레코드 작업 |
- Select 조회 및 검색 - Insert 삽입 - Update 수정 |
SQL문 - DDL 명령어
1. sungjuk 테이블 삭제
drop table sungjuk;
2. sungjuk 테이블 생성
create table sungjuk(
uname varchar(10) not null --빈값허용안함
,kor int not null
,eng int not null
,mat int not null
,aver int --안적으면 빈값허용
);
3. sungjuk 테이블 구조 확인
desc sungjuk;
4. sungjuk 테이블 구조 수정
--칼럼명 수정
alter table 테이블명 rename column 원래컬럼명 to 바꿀컬럼명;
alter table sungjuk rename column kor to korea;
--칼럼명 삭제
alter table 테이블명 drop(칼럼명);
alter table sungjuk drop(korea);
--칼럼 추가
alter table 테이블명 add (컬럼명 데이터타입)
alter table sungjuk add (total int);
5. commit : 명령완료
-> commit;
rollback : 명령취소
-> rollback;
--sqlplus는 자동커밋된다.
DDL명령어 연습문제) sungjuk 테이블을 아래와 같이 수정하시오
1) uname 칼럼의 글자수를 50개로 수정
alter table sungjuk modify(uname varchar(50));
2) uname 칼럼을 null 조건으로 수정
alter table sungjuk modify(uname null);
SQL문 - DML 명령어
*uname 칼럼을 20칸으로 변경
alter table sungjuk modify(uname varchar(20));
[sungjuk테이블 샘플데이터]
insert into sungjuk(uname,kor,eng,mat)
values ('홍길동',50,60,30);
insert into sungjuk(uname,kor,eng,mat)
values ('무궁화',30,30,40);
insert into sungjuk(uname,kor,eng,mat)
values ('진달래',90,90,20);
insert into sungjuk(uname,kor,eng,mat)
values ('개나리',100,60,30);
insert into sungjuk(uname,kor,eng,mat)
values ('라일락',30,80,40);
insert into sungjuk(uname,kor,eng,mat)
values ('봉선화',80,80,20);
insert into sungjuk(uname,kor,eng,mat)
values ('대한민국',10,65,35);
insert into sungjuk(uname,kor,eng,mat)
values ('해바라기',30,80,40);
insert into sungjuk(uname,kor,eng,mat)
values ('장미',70,90,50);
insert into sungjuk(uname,kor,eng,mat)
values ('코알라',60,90,30);
--칼럼명이 생략되면 values()값은 테이블 설계순으로 입력
insert into sungjuk
values('손흥민',90,60,60,70);
****
물리적 스키마(테이블)
-> create, insert등을 직접한 값들 , 실제 존재하는 테이블
논리적 스키마(테이블)
-> 조인, 뷰등을 통해 만들어진 값들
****
1. 행 갯수 1) 목록조회
select * from sungjuk;
select kor, eng, mat from sungjuk;
select uname, aver from sungjuk;
2) as (생략가능)
특정 칼럼명, 테이블명을 일시적으로 리네임
select kor as korea
,eng english
,mat
from sungjuk;
3) count() 함수
: null값은 카운트안한다
레코드 갯수(행갯수)
select count(uname) from sungjuk;
select count(uname) as cnt from sungjuk;
select count(uname) cnt from sungjuk;
select count(kor) as korea from sungjuk;
->null은 적용대상이 아니다
select count(aver) as average from sungjuk;
->average의 null 값은 카운트 안한다.
4) 전체 레코드(행) 갯수
--만능문자 '*' '?' 같은 것
select count(*) from sungjuk;
select count(*) as cnt from sungjuk;
5) 집계함수
select sum(kor) ,max(kor), min(kor) from sungjuk;
select sum(kor) as hap, max(kor) as maximum, min(kor) as minimum, avg(kor) as average from sungjuk;
**문제 ) 국, 영, 수 각 과목의 평균점수를 조회하시오
select avg(kor) avg_kor, avg(eng) avg_eng, avg(mat) avg_mat from sungjuk;
6) 정렬(sort)
순서대로 재배치
오름차순 ASCending ASE -> 기본값
내림차순 DESCending DESC
형식) order by 칼럼1, 칼럼2, 칼럼3, ~~~
ex) 칼럼1을 기준으로 내림차순으로 정렬하고
칼럼1값이 동일하다면 칼럼2를 기준으로 오름차순 정렬하고
칼럼2값도 동일하다면 칼럼3을 기준으로 오름차순으로 정렬
order by 칼럼1 desc,
칼럼2 asc,
칼럼3, ~~
-1 오름차순
select uname
from sungjuk
order by uname;
select uname
from sungjuk
order by uname asc; --asc생략가능 기본값
-2 내림차순
select uname
from sungjuk
order by uname desc;
select uname, kor
from sungjuk
order by kor desc;
->kor점수 내림차순으로 정리하라
-3 2차정렬(국어점수가 동일하다면 이름으로 정리하라)
select kor, uname
from sungjuk
order by kor,uname;
****
칼럼은 select할 때 순서 중요하다.
****
-4 3차정렬(kor점수-> eng점수-> mat점수 같은 순으로 정렬 )
select kor,eng,mat,uname
from sungjuk
order by kor,eng,mat;
-5 3차정렬(kor점수-> eng점수-> mat점수-> uname 점수 같은 순으로 정렬 )
select kor,eng,mat,uname
from sungjuk
order by kor,eng,mat,uname;
7) 조건절
1) where 조건절 - 조건에 만족하는 레코드만을 대상
-1 산술연산자 : + - * /
-2 비교연산자 : < <= > >=
같지않다 != (<>)
같다 =
-3 논리연산자 : and or not
2) having 조건절 - gruop by절과 같이 사용
3) on 조건절 - 테이블 조인할 때 사용
8) where 조건절
1) 산술연산자
-1 dual 테이블
: 결과값을 일시적으로 출력할 때 유용한 임시 테이블
select 5+3 from dual;
select 5-3 from dual;
select 5*3 from dual;
select 6/3 from dual;
select mod(5,3) from dual; --나머지 함수
ex1) 국어점수 90이상 조회
select kor, uname
from sungjuk
where kor>=90;
ex2) 수학점수 50미만 조회
select mat, uname
from sungjuk
where mat<50;
ex3) 이름이 '무궁화' 조회
select uname
from sungjuk
where uname='무궁화';
ex4) 이름이 '무궁화' 행의 평균을 구하시오
update sungjuk
set aver=(kor+eng+mat)/3
where uname='대한민국';
select aver,uname from sungjuk;
select count(aver) from sungjuk;
**null값 주의!!
ex5) 비어있는 aver칼럼을 조회하시오
select uname, aver
from sungjuk
//where aver=null; =로 표시하면 틀리다.
where aver is null; -> is 연산자 활용
ex6) 비어있는 aver칼럼의 갯수를 구하시오
select count(*)
from sungjuk
where aver is null;
//where aver is not null; -> 비어있지 않은 aver칼럼 갯수 구할 때엔 부정연산자 쓰면 된다.
**문제 ) 국영수 모두 50점미만인 행의 평균을 구하시오
update sungjuk
set aver=(kor+eng+mat)/3
where kor<50 and eng<50 and mat<50;
select aver,kor,eng,mat,uname
from sungjuk;
**문제 ) 비어있는 평균값을 모두 채우시오
update sungjuk
set aver=(kor+eng+mat)/3
where aver is null;
select aver,kor,eng,mat,uname
from sungjuk;
**문제 ) 평균 60~69점 사이의 평균, 이름 조회
select aver, uname
from sungjuk
where aver>=60 and aver<=69;
select count(*)
from sungjuk
where aver>=60 and aver<=69;
--between A and B
select aver, uname
from sungjuk
where aver between 60 and 69;
**문제 ) 국영수 중에서 한과목이라도 30점 미만 조회 (과락)
select kor,eng,mat
from sungjuk
where kor<30 or eng<30 or mat<30;
-> 데이터의 갯수가 너무 많으면 분석이 힘드므로 , 적당히 나누어 확인하기.
**문제 ) 이름이 '진달래' , '개나리' , '라일락' 조회
select aver,uname
from sungjuk
where uname='진달래' or uname='개나리' or uname='라일락';
--in 연산자 (일치하는 값)
select aver, uname
from sungjuk
where uname in ('진달래' , '개나리' , '라일락');
9) LIKE 연산자
- 문자열에서 만능문자(% _)를 이용해 비슷한 유형을 조회
ex1) 홍씨성을 조회하시오
select uname
from sungjuk
where uname like '홍%'; --홍으로 시작하는 문자열
select uname
from sungjuk
where uname like '%화';
select uname
from sungjuk
where uname like '%나%';
--두글자중에서 나로 끝나는 문자열 조회
select uname
from sungjuk
where uname like '_나';
select uname
from sungjuk
where uname like '__나'; --세글자중에서 나로 끝나는 문자열 조회
select uname
from sungjuk
where uname like '_나'_;
**문제 ) 자유게시판 검색시 제목+내용을 선택하고 검색어 happy를 입력했을 때 레코드를 조회하시오.
/내가 한 답
select subjuct, content
from sungjuk
where subject in ('happy');
/선생님 답
where subject like '%happy%' or content like '%happy%';
'공부 > 응용 SW' 카테고리의 다른 글
6월24일 - SW활용 (0) | 2019.06.24 |
---|---|
6월21일 - SW활용 JDBC : java에 DB연결하기 (0) | 2019.06.21 |
6월19일 - SW활용 : DB (0) | 2019.06.19 |
6월18일 - SW활용 네트워크 (0) | 2019.06.18 |
6월17일 - SW활용 운영체제 + 네트워크(thread) (0) | 2019.06.17 |