반응형

서브 쿼리란?
단일 열 단일 행 서브 쿼리 (데이터하나):  
- 서브 쿼리가 하나의 컬럼에서 하나의 행을 검색한다. 
단일 열 다중 행 서브 쿼리 (열은하나 행이 여러개):
- 서브 쿼리가 하나의 컬럼에서 여러 개의 행을 검색한다. 
다중 열 서브 쿼리 :
- 서브 쿼리가 여러 개의 컬럼을 검색한다. 

서브 쿼리는 WHERE절, HAVING절과 같이 조건 절에 주로 쓰이고 FROM절에 쓰이는 경우도 있다. 
특히 FROM절에 쓰인 서브 쿼리는 인라인 뷰(Inline View)라고 부른다.

 예측하기 힘든 단일 행 서브 쿼리를 수정하는 방법 (단일 행 연산자를 다중 행 연산자로 바꾼다.)
 ① '=' 연산자는 'IN' 연산자로 바꾼다.
 ② 부등호 ('<', '>', '<=', '>=')는 any, all 연산자를 추가한다. (가독성이 떨어져 상대적으로 잘 안씀)
 ③ Max(), Min()과 같은 그룹 함수를 사용 한다.

 실습


1. 김혁윤 보다 평점이 우수한 학생의 학번과 이름을 검색한다.
select sno 학번, sname 이름
from student
where avr > (select avr from student where sname = '김혁윤') ;


 
2. 권현와 동일한 학년 학생 중에 평점이 강은혜와 동일한 학생을 검색한다. 
select syear 학년, sname 이름, avr 학점
from student
where avr = (select avr from student where sname = '강은혜')
AND syear = (select syear from student where sname = '권현') ;

3. 이학수학 과목과 동일한 학점수인 과목을 검색한다.
select cname 과목명, st_num 학점수
from course
where st_num = (select st_num from course where cname = '이학수학') ; 

4. 타 학과에 송강 교수와 동일한 지위의 교수 명단을 검색한다.
select pname 이름, section 소속학과, orders 직위
from professor
where section != (select section from professor where pname = '송강')
AND orders = (select orders from professor where pname = '송강'); 

5. 제갈민의 입사일보다 나중에 부임한 교수의 명단을 검색한다.
select pname 교수명, hiredate 부임일
from professor
where hiredate > (select hdate from emp where ename = '제갈민');


6. 강태용보다 일반 화학 과목의 학점(A,B,..)이 더 낮은 학생의 명단을 학점과 검색한다. 
select sname 이름, c.result 학점, b.cname 과목명
from student a, course b, score c
where a.sno = c.sno AND b.cno = c.cno
AND b.cname = '일반화학' 
AND c.result = (select result from student a, score b where a.sno = b.sno AND a.sname = '강용태');

select a.sname 이름, b.result 학점, c.cname 과목명
from student a, score b, course c
where a.sno = b.sno AND b.cno = c.cno AND c.cname = '일반화학'
AND b.result < (select result from student a, score b where a.sno = b.sno AND a.sname = '강용태');

select a.sname 이름, c.cname 과목명, d.grade 학점
from student a, score b, course c, scgrade d
where c.cname = '일반화학'
AND d.scgrade < (select scgrade from student a, score b, course c, scgrade d where a.sname = '강용태' AND c.cname ='일반화학');

select grade
from student a, course b, scgrade c, score d
where a.sno = d.sno AND b.cno = d.cno AND result between loscore AND hiscore
AND a.sname = '강태용' AND b.cname = '일반화학';

select a.sno, sname, cname, grade
from student a, course b, score c, scgrade d
where
AND b.cname = '일반화학'
AND d.grade > (select grade
from student a, course b, scgrade c, score d
where a.sno = d.sno AND b.cno = d.cno 
result BETWEEN loscore AND hiscore
AND sname ='강태용' AND cname ='일반화학');

SELECT s.sno, sname, cname, grade
FROM student s, course c, score r, scgrade g
WHERE s.sno=r.sno AND r.cno=c.cno 
AND result BETWEEN loscore AND hiscore
AND cname='일반화학' 
AND grade > (SELECT grade
             FROM student s, course c, scgrade g, score r
             WHERE s.sno=r.sno AND r.cno=c.cno 
             AND result BETWEEN loscore AND hiscore
             AND sname='강태용' AND cname='일반화학');

any 어떤것보다 작다
all 전체보다 작다

select eno 사번, ename 이름, dno 부서번호, job 업무
from emp
where (dno, job) IN (select dno, job from emp where ename ='김선유')
AND ename ! ='김선유';

select eno 사번, ename 이름, dno 부서번호, job 업무
from emp
where dno in (select dno from emp where ename = '김선유')
AND job in (select job from emp where ename = '김선유')
AND ename != '김선유';

select dno, eno, ename, job
from emp
where ename = '김선유';

실습
1. 화학과 학생과 평점이 동일한 학생들을 검색한다. 
select sname 이름, sno 학번, major 학과
from student
where avr in (select avr from student where major = '화학')
AND major != '화학';

2. 화학과 교수와 부임일이 같은 직원을 검색한다.
select ename 이름, hdate 입사일
from emp
where hdate in (select hiredate from professor where section = '화학'); 

3. 화학과 학생과 같은 학년에서 평점이 동일한 학생들을 검색한다. 
select syear 학년, sname 이름, major 학과, avr 평점
from student
where avr in (select avr from student where major = '화학')
AND syear in (select syear from student where major = '화학')
AND major != '화학';
4. 10번 부서 사원들보다 년봉을 많이 받는 사원을 검색한다. 
5. 10번 부서 사원들과 업무와 성별이 동시에 일치하는 사원을 검색한다.

중복제거 (dis 정렬해서 제거함)
집합 연산자

합집합 :    UNION  :검색된 결과의 합으로 중복은 제거된다.    (정렬을 유발함)
           UNION ALL : 중복을 포함한 결과의 합을 검색한다. (정렬을 유발하지않음)
교집합 :     INTERSECT : 양쪽 모두에서 포함된 행을 검색한다. (일반적으로는 거의 안씀)
차집합 :     MINUS     : 첫 번째 검색된 결과에서 두 번째 검색 결과를 제외한
나머지를 검색한다. (일반적으로는 거의 안씀)

SQL> SELECT ...
 2 [UNION ALL | UNION | INTERSECT | MINUS]
 3 SELECT ... 

실습
1. 화학과 학생과 교수를 검색한다. (집합 연산자를 이용한다.)
select sno 교수번호_학생번호, sname 이름, major 학과
from student
where major = '화학'
union
select pno, pname, section from professor where section = '화학'; 


2. 정교수의 명단과 모델링이 업무인 직원의 이름, 입사일(부임일)을 검색한다.
select pname 이름, hiredate 부임일, orders 직위_업무
from professor
where orders = '정교수'
union
select ename, hdate, job from emp where job = '모델링';



DML(INSERT, UPDATE, DELETE) 문의 이해 (테이블을 조작)

SQL> INSERT INTO <테이블> [(컬럼, 컬럼, ... )]
 2 VALUES (값, 값, ...);

SQL> UPDATE 테이블 
 2 SET 컬럼 = 값, 컬럼 = 값, ...
 3 [WHERE 조건];

SQL> DELETE FROM 테이블 
 2 [WHERE 조건];

SQL> COMMIT; 작업완료 명령어 (반드시 작업이 끝난뒤에 명령어를 써야한다.)
SQL> ROLLBACK;  작업을 취소하는 명령어 (전에 했던 모든 작업들이 취소됨)

ALTER SESSION SET nls_date_format='YYYY/MM/DD';  -> 날짜 입력 포맷
ALTER SESSION SET nls_date_format = 'YYYY/MM/DD:HH24:MI:SS'; -> 시분초까지 입력 포맷
없는 값은 null ''쓰지않는다

SQL> SELECT sysdate FROM dual;  -> 현재 날짜 표시

읽기일관성 -> 커밋 또는 롤백한 이후의 데이터만 봐야함
redo = 되돌림 , undo = 취소
트렌젝션 : insert, update, delete를 이용하여 commit 또는 rollback 하는 과정

데이터를 가져오는 것 scan
scan 1) full table : 위에서 부터 아래까지 다 읽음 > 성능 떨어짐 (만약 데이터양이 많은 테이블을 읽게되면 메모리를 많이 차지하게 되서 느림)
     2) index      : 특정 컬럼을 정렬해서 복사, rowid 컬럼을 만들어서 행의 데이터 위치를 표시함 (데이터 찾을때 빠름)
                     insert 하는 과정에서 index의 공간이 부족할수도 있다. 이러한 이유로 무한정 만들어 놓지 않는다.
select * from emp
order by ename;     
                    >> full table은 모든 데이터를 다 읽고 정렬해야해서 시간이 오래걸림
                    >> index는 정렬되어있어서 바로 출력됨

반응형
반응형

사용자 프로세스 : sqlplus 접속 제외 다 자기가 알아서 해야한다.

서버 프로세스  : sql 실행은 서버 프로세스 -> 사용자 프로세스에 전달

인스턴스 - 메모리에 만들어짐
데이터베이스 - 하드웨어

백그라운드프로세서
버퍼 - 반드시 쓰여지는 데이터
캐시 - 사용하고 없어지는 데이터

파라미터 파일 : 오라클의 환경변수
패스워드 파일 : 관리자패스워드만 들어 있다.
UNIX    : root
Windows : administrator
ORACLE  : sys
mysql   : mysql

UNDOTBS1 취소할 데이터 저장 = 롤백
TEMP

shutdown immediate >> 오라클 종료

 

오라클 베이스, 홈, 환경변수 위치
$ORACLE_BASE = c:\dev\ora19c

$ORACLE_HOME = $ORACLE_BASE_client

환경변수 $TNS_ADMIN = $ORACLE_HOME\network\admin

데이터베이스가 켜져있어도 리스너가 죽어있다.
서버프로세스가 실행중이여도 접속이 불가능 하다.
리스너를 구동해야한다.

listener.ora : 접속하고자하는 데이터베이스의 주소를 적어야한다.
tnsnames.ora ----> listener (listener.ora)
$TNS_ADMIN
$ORACLE_HOME/network/admin 안에 tnsnames.ora, listener.ora파일이
있어야한다.

클라이언트는 호스트명에 해당하는 ip에 접근 가능 해야한다.

HOST : 서버의 호스트명이나 ip주소

PORT : TCP PORT 번호

SID_NAME : instance 명

 

$ lsnrctl 옵션 <리스너명>

start 리스너 시작

stop 리스너 종료

status 리스너 상태 출력

reload listener.ora를 다시 읽음

 

local naming 방식의 tnsnames.ora

TNS명 : 접속 서버의 네트워크 이름    (st01)

HOST : 오라클 서버의 ip주소 

PORT : 접속 서버의 리스너 PORT번호

SID : 접속 오라클 서버의 SID

 

오라클 계정 만드는 방법


create user st01
identified by st01
default tablespace users
quota unlimited on users;

grant connect, resource to st01;
grant create view to st01;

tnsping 계정이름 >> 데이터베이스 연결 확인방법



반응형
반응형

자기 참조 조인 (self join)
SQL> SELECT 별명1.컬럼1, ... 별명2.컬럼1, ...
 2 FROM 테이블 별명1, 테이블 별명2, ...
 3 WHERE 조인_조건
 4 AND 일반_조건


외부 조인(Outer join)
SQL> SELECT 테이블1.컬럼, ..테이블2.컬럼, ...
 2 FROM 테이블1, 테이블2, ...
 3 WHERE 조인_조건(+)
 4 AND 일반_조건

 

실습
1. 학생 중에 동명이인을 검색한다.
select a.sname, a.syear
from student a, student b
where a.sno != b.sno AND a.sname = b.sname;

2. 전체 교수 명단과 교수가 담당하는 과목의 이름을 학과 순으로 검색한다.
select DISTINCT b.pname, cname, section
from professor b, course c, score d
where b.pno = c.pno AND c.cno = d.cno ORDER BY b.section;
 
3. 이번 학기 등록된 모든 과목과 담당 교수를 학점 순으로 검색한다.
select cname, pname, a.st_num
from course a, professor b
where a.pno = b.pno order by a.st_num;
 
4. 직원 중에 자신의 관리자 보다 급여가 높은 사람의 급여 정보를 관리자 급여 정보와 같이 검색한다. 

select a.eno 사번, a.ename 이름, a.mgr 사수번호, a.sal 급여, b.sal 사수급여
from emp a, emp b
where a.mgr = b.eno AND a.sal > b.sal;

5. 교수의 정보와 교수가 담당하는 과목명을 검색한다. 
select pname 이름, a.pno 교수번호, cname 과목명
from professor a, course b
where a.pno = b.pno;

6. 직원과 사수의 명단을 검색한다. 단 직원 명단은 모든 직원 명단이 출력되어야 한다.
select a.ename 직원이름, a.eno 사번, a.mgr 사수번호, b.ename 사수이름
from emp a, emp b
where a.mgr = b.eno(+);
 
7. 화학과 학생 중에 학점이 동일한 학생을 검색한다.
select DISTINCT a.major, a.syear, a.sname, b.sname, a.avr, b.avr
from student a, student b
where a.sno != b.sno AND a.avr = b.avr AND a.major = '화학';

반응형
반응형

IP
: 컴퓨터를 찾아가기위한 인터넷 주소( = 네트워크주소 + 호스트주소 )

서브넷마스크
: IP주소의 네트워크, 호스트주소를 나누는 기준을 알려주는 주소

게이트웨이주소
: 라우터의 주소

MAC
: 각 기기들이 가진 고유한 주소값


목차
1.........................................................................................DNS 서버 설치
2.........................................................................................DNS 서버 설치 확인
3.........................................................................................DNS 서버 작동 확인
4.........................................................................................DNS 서버를 이용한 네임서버 추가
5.........................................................................................추가된 네임서버의 작동 확인

윈도우 2019서버를 통해 DNS 네임서버를 만들 수 있다.

 

 

 

 

1. DNS 서버 설치

서버관리자의 관리탭을 눌러 역할 미 기능 추가 마법사를 클릭하고
설치 유형선택을 '역할 기반 또는 기능 기반 설치' 체크하여 다음을 눌러준다.
서버 선택탭에서
'서버 풀에서 서버 선택' 체크를 하고 '서버 풀' 칸에 윈도우 2019서버 컴퓨터의 이름과
ip주소가 있는지 확인하고 다음을 눌러 준다. 서버 역할 탭에서 'DNS서버'를 체크해주고
다음을 눌러 준다. 역할 및 기능 추가 마법사 창이 뜨는데 '기능 추가'를 눌러 준다.
기능 탭에서 설정하지 않고 다음을 눌러 준다. DNS 서버 탭에서도 다음을 눌러준다.
확인 탭에서 '필요한 경우 자동으로 대상 서버 다시 시작' 을 체크해주고 설치를 눌러
설치를 시작해준다.

2. DNS 서버 설치 확인
1. 제어판-시스템 및 보안에서 'Windows 방화벽에서 앱 허용'을 눌러 준다.
허용되는 앱을 확인할 수 있는 창이 뜨는데 여기에서 'DNS 서비스'가 허용되어있는지
확인해준다.
2. 제어판-시스템 및 보안-관리도구-서비스를 실행해준다. 서비스 창에서 DNS server의
상태가 실행중인지 확인해준다.

네트워크오른쪽클릭- 속성 - 어댑터 설정 변경- 이더넷 오른쪽클릭 - 속성 - 인터넷 프로토콜 버전 4 선택후 속성
다음 ip 주소 사용을 체크하여 ip주소와 기본 설정 DNS 서버 ip를 설치한 DNS서버의 ip로 입력해주고 서브넷 마스크와
게이트 웨이도 입력한 뒤 확인을 눌러준다.



3. DNS 서버 작동 확인
명령 프롬포트를 실행하여 명령어 nslookup를 이용하여 작동 되는지 확인한다.
예로 nslookup www.naver.com 을 입력 하였을 때
서버의 이름과 설치한 DNS서버의 ip주소가 화면에 출력되고 그 밑에
해당 사이트의 이름과 ip주소, 도메인이름이 나온다면 정상 작동 되는 것이다.

4. DNS 서버를 이용한 네임서버 추가
서버관리자-도구-DNS 실행해준다. DNS관리자 탭에서 정방향조회 영역 탭을 오른쪽 클릭하여
새 영역을 눌러 새 영역 마법사 시작을 실행해준다. 영역 형식은 주 영역으로 하고 영역 이름에
네임서버의 이름을 설정해 준다.(ex st01.abc) '다음 이름으로 새 파일 만들기'에 체크하고 다음을 눌러준다.
'동적 업데이트 허용 안 함' 체크 후 다음을 눌러준다. 마침을 누르면 정방향조회 영역 탭 아래에 만들고자 하는
네임서버 이름의 폴더가 생기는데 폴더 오른쪽 클릭을 하여 '새 호스트'를 클릭한다. 이름 입력란에 gw,ns,www로 각각 만들어주고
gw에는 게이트웨이 주소를 ns에는 해당 서버 컴퓨터의 ip주소를 www에는 웹서버로 사용할 ip주소를 입력하여 호스트를 추가해준다.

5. 추가된 네임서버의 작동 확인
명령 프롬포트를 실행하여 명령어 nslookup를 이용하여 확인할 수 있다.
ex) nslookup www.st01.abc를 입력하면 DNS 서버 작동 확인에서 확인한 것 처럼
DNS 서버의 이름과 ip주소, 해당 사이트의 이름과 ip주소가 화면에 출력한 것을 보고 정상 작동 됨을 확인 할 수 있다.

윈도우 - sqlplus id/pw@tns명
유닉스 - sqlplus id/pw

반응형

'Network' 카테고리의 다른 글

IP 헤더  (0) 2022.12.27
OSI 7 Layer  (0) 2022.12.27
윈도우2019서버를 이용한 DNS 서버 설치, 작동 확인 및 DNS 서버를 이용한 네임서버 추가  (0) 2022.10.27
DNS 서버  (0) 2022.10.24
Net2 DNS 질의 과정  (0) 2022.10.24
반응형

SET LINE ## 출력폭 지정 명령어
SET PAGES 100 >>> 50행마다 하나씩 나옴
COL job FORMAT A##  >> 문자컬럼 (바이트수)
COL eno FORMAT A4
COL job FORMAT A10
COL ename FORMAT A15
COL sal FORMAT ##   >> 숫자컬럼
-----------------------------------------------------------
C:\app\client\st01\product\19.0.0\client_1\sqlplus\admin ----> glogin 파일에 추가

관계 연산자와 LIKE 연산자

관계 연산자
SQL> SELECT * FROM emp
 2 WHERE dno = 10 OR sal > 1600 AND comm > 600;
-----> 맞고 안맞고의 유무와 상관없이 괄호가 없어서 진위여부를 판단할 수 없다.
SQL> SELECT * FROM emp
 2 WHERE (dno = 10 OR sal > 1600) AND comm > 600;
-----> 괄호를 써야한다.
or 조건중 하나만 참이면 참
AND 

LIKE 연산자
패턴연산자

'%문자열'
'경%' ------- 경으로 시작하는 모든 문자열 ----- 경, 경제, 경범죄, 경영학과 등등
'%과" ------- 과로 끝나는 모든 문자열 -------- 과, 다과, 화학과, 물리학과 등등
'%김%'------- 김이란 글자가 들어간 모든 문자열 - 김, 김씨, 돌김, 되새김질 등등
'화_' ------- 화로 시작하는 두글자 단어 ------- 화학, 화약, 화상 등등
'__화'------- 화로 끝나는 세 글자 단어 ------- 무궁화, 운동화
'_동_' ------ 동이 가운데 들어간 세글자 단어 --- 원동기, 자동차
'%이#%%'  ESCAPE '#' 으로 지정한 경우, '이%' 가 포함된 문자열
'_#%_'   ESCAPE '#' 으로 지정한 경우, '%'가 포함된 세 글자 단어

. 김씨 성을 가진 사원
SQL> SELECT * FROM emp
 2 WHERE ename LIKE '김%'; 

. 이름이 '하늘'인 사원
SQL> SELECT * FROM emp
 2 WHERE ename LIKE '%하늘';

. 성과 이름이 각각 한 글자인 사원을 검색한다.
SQL> SELECT * FROM emp
 2 WHERE ename LIKE '__';
선택된 레코드가 없습니다.

이름에 '%' 문자가 포함된 사원을 검색한다.
SQL> SELECT eno, ename 
 2 FROM emp
 3 WHERE ename LIKE '%#%%' ESCAPE '#'; 
선택된 레코드가 없습니다.

실습
1. 화학과와 물리학과 학생을 검색한다. 
select * from student where major = '물리' or major = '화학';
2. 화학과가 아닌 학생 중에 1학년 학생을 검색한다. 
select * from student where major! = '화학' AND syear = '1'; 
3. 화학과 3학년 학생을 검색한다.
select * from student where major = '화학' AND syear = '3'; 
4. 평점이 2.0에서 3.0 사이인 학생 검색한다. 
select * from student where avr >= '2.0' AND avr < '3.0';
5. 교수가 지정되지 않은 과목 중에 학점이 3학점인 과목을 검색한다. 
select * from course where pno is null AND st_num = '3';
6. 화학 관련된 과목 중 2학점 이하인 과목을 검색한다.
 (화학 관련 과목은 과목명에 화학이 들어간 과목을 의미한다.)
select * from course where cname LIKE '%화학%' AND st_num <='2';
7. 화학과 정교수를 검색한다.
select * from professor where section = '화학' AND orders = '정교수';  
8. 화학과 학생 중에 성이 권씨인 학생을 검색한다. 
select * from student where sname LIKE '권%%' AND major = '화학';
9. 부임일이 1995년 이전인 정교수를 검색한다.
select * from professor where orders = '정교수' AND hiredate >= '1995/01/01';
10. 성과 이름이 각각 한글자인 교수를 검색한다.
select * from professor where pname LIKE '__';

BETWEEN와 IN 연산자

WHERE sal BETWEEN 1000 AND 2000 = (sal >= 1000 AND sal <= 2000)

SQL> SELECT * FROM emp
 2 WHERE dno BETWEEN '10' AND '20';
이거보다 (dno = '10' 

SQL> SELECT * FROM emp
 2 WHERE hdate BETWEEN '1992/01/01' AND '1996/12/31' 3 ORDER BY hdate;
>>>> 시분초가 의미가 있는 데이터인지 확인하고 시분초까지 쓸지 말지 생각해봐야함

IN연산자
개발이나 관리 업무를 담당하는 사원. 
select * from emp where job in ('개발','관리')
order by job;

10, 20번 부서 사원
select * from emp where dno in ('10','20')
order by dno;

실습
1. 평점이 3.0에서 4.0 사이의 학생을 검색한다. 
select * from student where avr BETWEEN '3.0' AND '4.0' order by avr desc;

2. 1999년에서 2001년까지 부임한 교수의 명단을 검색한다.
select * from professor where hiredate BETWEEN '1999/01/01' AND '2001/12/31' order by hiredate;

3. 화학과와 물리학과, 생물학과 학생을 검색한다.
select * from student where major IN ('화학','물리','생물') order by major; 

4. 정교수와 조교수를 검색한다.
select * from professor where orders IN ('정교수','조교수') order by orders;

5. 학점수가 1학점, 2학점인 과목을 검색한다.
select * from course where st_num IN ('1','2') order by st_num;

6. 1,2 학년 학생 중에 평점이 2.0에서 3.0사이인 학생을 검색한다.
select * from student where syear IN ('1','2') AND (avr >= '2.0' AND avr <= '3.0');

7. 화학, 물리학과 학생 중 1,2 학년 학생을 성적순으로 검색한다.
select * from student where major IN ('화학','물리') AND syear IN ('1','2') order by avr desc;  

8. 물리, 화학과 학생 중 4.5 환산 평점이 3.5에서 4.0 사이인 학생을 검색한다.
select avr*4.5/4.0 환산평점, sname 이름, syear 학년, major 학과  from student where major IN('물리','화학') AND avr*4.5/4.0 BETWEEN '3.5' AND '4.0' order by syear desc;

9. 물리, 화학과 학생의 정보를 학년별 성적순으로 검색한다. 
select * from student where major IN ('물리','화학') order by syear desc,avr desc;

10. 물리, 화학과 교수 중에 1999년에서 2000년 사이에 부임한 교수의 정보를 직위별로 검색한다.
select * from professor where section IN ('물리','화학') AND hiredate BETWEEN '1999/01/01' AND '2000/01/01' order by orders;


st01.emp.eno >>> 원래 컬럼 이름
조인 : 등가 조인(Equi join)과 비 등가 조인(Non Equi-join) = INNER JOIN

SQL> SELECT 테이블1.컬럼, ...테이블2.컬럼, ...
 2 FROM 테이블1, 테이블2, ...
 3 WHERE 조인_조건
 4 AND 일반_조건

- 조인 조건은 두 테이블간의 관계를 수식으로 표현한 것이다. 
- 조인 조건은 SELECT 문에 사용된 테이블의 개수에 따라 달라지지만 테이블 n개 라면 조인 조건의 개수는 항상 (n-1)개 이상이다.
- 조인 조건에 '='를 이용하는 조인을 등가 조인(Equi-join)이라고 하고 부등호가 포함된 조인 조건을 이용하는 경우 비 등가 조인(Non equi-join)이라고 한다.

예제 1. 각 사원의 근무 부서를 검색한다.

SQL> SELECT eno 사번, ename 이름, emp.dno 부서번호,
 2 dept.dno 부서번호, dname 부서명 
 3 FROM dept, emp 
 4 WHERE dept.dno = emp.dno; 

예제 2. 광주에서 근무하는 직원의 명단을 검색한다.(부서번호와 부서명도 검색한다.)
SQL> SELECT loc 근무처, d.dno 부서번호, dname 부서명, 
 2 eno 사번, ename 이름 
 3 FROM dept d, emp e 
 4 WHERE d.dno=e.dno
 5 AND loc = '광주';

예제 3. 각 직원의 급여를 10% 인상한 경우 급여 등급을 검색한다.
SQL> SELECT eno 사번, ename 이름, 
 2 sal*1.1 인상된급여, grade 등급
 3 FROM emp, salgrade
 4 WHERE sal*1.1 BETWEEN losal AND hisal;


조인조건을 미리 관계도를 알고 작성해야 한다.


실습
1. 송강 교수가 강의하는 과목을 검색한다.
select p.pno 교수번호, p.pname 이름, p.orders 직위, c.cno 강의번호, c.cname 과목명, c.pno 교수번호
from professor p, course c
where p.pno = c.pno
AND p.pname = '송강';

2. 과목명에 화학이 포함된 과목을 강의하는 교수의 명단을 검색한다.
select p.pno 교수번호, p.pname 이름, p.orders 직위, c.cno 강의번호, c.cname 과목명, c.pno 교수번호
from professor p, course c
where p.pno = c.pno
AND c.cname like '%화학%';
 
3. 학점이 2학점인 과목과 이를 강의하는 교수를 검색한다.
select p.pno 교수번호, p.pname 이름, p.orders 직위, c.cno 강의번호, c.cname 과목명, c.st_num 학점수
from professor p, course c
where p.pno = c.pno
AND c.st_num = '2';
 
4. 화학과 교수가 강의하는 과목을 검색한다.
select p.pno 교수번호, p.pname 이름, p.orders 직위, c.cno 강의번호, c.cname 과목명, c.st_num 학점수
from professor p, course c
where p.pno = c.pno
AND p.section like '%화학%';
 
5. 화학과 1학년 학생의 기말고사 성적을 검색한다.
select s.sname 이름, s.sno 학번, s.syear 학년, s.sex 성별, s.major 학과, ss.cno 과목번호, ss.result 점수
from student s, score ss
where s.sno = ss.sno
AND s.major = '화학' AND s.syear = '1';

6. 일반화학 과목의 기말고사 점수를 검색한다.
select a.sno 학번, a.sname 이름, a.syear 학년, a.major 학과, b.cno 과목번호, b.cname 과목명, c.result 점수
from student a, course b, score c
where a.sno = c.sno AND b.cname = '일반화학' AND b.cno = c.cno;

7. 화학과 1학년 학생의 일반화학 기말 고사 점수를 검색한다. 
select a.sno 학번, a.sname 이름, a.syear 학년, b.cno 과목번호, b.cname 과목명, c.result 점수
from student a, course b, score c
where a.sno = c.sno AND b.cno = c.cno
AND b.cname = '일반화학' AND a.syear = '1';

8. 화학과 1학년 학생이 수강하는 과목을 검색한다. 
select a.sno 학번, a.sname 이름, a.syear 학년, a.major 학과, b.pno 교수번호, b.pname 교수이름, c.cno 과목번호, c.cname 과목명
from student a, professor b, course c
where a.major = b.section AND b.pno = c.pno
AND a.major = '화학' AND a.syear = '1';

9. 일반화학 과목에서 평가 점수가 A인 학생의 명단을 검색한다.
select a.sno 학번, a.sname 이름, a.syear 학년, a.major 학과, b.cno 과목번호, b.result 점수, c.grade 등급, d.cname 과목명
from student a, score b, scgrade c, course d
where a.sno = b.sno AND b.cno = d.cno AND b.result BETWEEN c.loscore AND c.hiscore AND d.cname = '일반화학' AND c.grade = 'A'; 

10. 송강 교수의 과목을 수강하는 학생의 기말고사 점수를 성적 순서로 검색한다.
select a.pno 교수번호, a.pname 교수이름, b.sno 학번, b.sname 학생이름, b.syear 학년, b.major 학과, c.cno 과목번호, 
c.cname 과목명, d.result 점수 from professor a, student b, course c, score d 
where b.sno = d.sno AND a.pno = c.pno AND a.pname = '송강' order by d.result desc;


11. 화학과 1학년 학생의 기말고사 성적을 학점(A,B,C,D,F)으로 검색한다.
select a.sno 학번, a.sname 이름, a.syear 학년, a.major 학과, b.result 점수, c.grade 등급
from student a, score b, scgrade c
where a.sno = b.sno AND b.result BETWEEN c.loscore AND c.hiscore AND a.major = '화학' AND a.syear = '1';

select major, syear, sname, a.sno, grade
from student a, score b, scgrade c
where a.sno = b.sno AND b.result BETWEEN c.loscore AND c.hiscore AND a.major = '화학' AND a.syear = '1';


12. 송강 교수가 강의하는 과목에서 평가 점수가 A인 학생의 명단을 과목명과 함께 검색한다.
select DISTINCT pname, cname, grade, sname
from student a, professor b, course c, scgrade d, score e
where result BETWEEN d.loscore AND d.hiscore AND d.grade = 'A' 
AND pname = '송강' AND a.sno = e.sno AND e.cno = c.cno AND b.pno = c.pno;


13. 화학과 1학년 학생에게 강의하는 교수의 명단을 검색한다.
select DISTINCT b.pname 교수명, b.pno 교수번호, a.syear 학년, a.major 학과
from student a, professor b, course c, score d
where a.sno = d.sno AND c.pno = b.pno AND c.cno = d.cno AND a.major = '화학' AND a.syear = '1';




반응형
반응형

가상머신을 이용하여 CentOS 7 리눅스에 oracle를 설치할 수 있다.

 

 

 

목차

1.................................... 가상머신 설정 및 리눅스 설치과정

2.................................... 리눅스 초기 설정 및 오라클계정, 그룹 만들기

3.................................... 오라클 설치 전 리눅스에 설치해야하는 파일

4.................................... 오라클 계정 설정

5.................................... 설치용 패키지 준비

6.................................... 오라클 설치

7.................................... 오라클 사용자 계정 생성

8.................................... 오라클 네트워크 설정과 접속

   1)................................ 오라클 서버 설정 : 리스너 구동

   2)................................ 리눅스 클라이언트 설정과 접속

   3)................................ 윈도우 클라이언트 설정과 접속

9.................................... 오라클 자동실행 설정

10.................................. 관리자 패스워드 지정

11.................................. 인스턴스 클라이언트

   1)................................ 오라클 인스턴스 클라이언트 설치

   2)................................ 접속 환경 설정

   3)................................ 접속 테스트

 

 

 

 

1. 가상머신 설정 및 리눅스 설치과정

 

 

 가상머신에 리눅스 데이터베이스를 설치하기 전 먼저 하드웨어는 40GB이상, 메모리는 2GB이상으로 설정해 준다.

 

 

설정이 끝났으면 가상머신에서 설치를 실행해준다.

x윈도우가 꼭 필요하므로 GNOME 데스크탑으로 소프트웨어를 선택해준다.

 

KDUMP는 비활성화 시켜준다.

파티션 설정에서 boot은 500MB, swap은 기존 설정한 메모리의 2배를 해준다. 나머지는 / 에 할당하면 된다.

네트워크 설정을 해주어 연결이 원활하게 되었으면 완료버튼을 누른다.

 

 

 

 

2. 리눅스 초기 설정

 

 

ntsysv를 실행하여 방화벽인 firewalld.service 항목의 체크를 해제해 주고 저장해 준다.

 

# vi /etc/selinux/config를 입력하여       vi에디터로 SELINUX=enforcing를  SELINUX disabled 변경해주고 저장한다.

 

 

 

 

로컬파일에 실행권한을 주기 위하여 해당 명령어를 입력해준다.

 

 

 

vi /etc/rc.d/rc.local 명령어를 입력하여     rdate -s time.bora.net  입력해주고 저장해 준다.

 

vi /etc/hosts 입력하여 오라클을 설치할 리눅스의 ip주소와 도메인주소와 데이터베이스의 이름을 입력해 준다.

 

오라클에서 사용할 사용자 계정과 오라클 그룹을 만들어주고 오라클베이스와 오라클 홈의 경로를 만들어주고 반드시 기억해야 한다.

 

 

 

 

3. 오라클 설치 전 리눅스에 설치해야하는 파일

 

 

[root@ora19c ~]# yum -y install ksh
[root@ora19c ~]# yum -y install libaio-devel 
[root@ora19c ~]# yum -y install compat-libcap1 
[root@ora19c ~]# yum -y install compat-libstdc++-33
[root@ora19c ~]# yum -y install glibc-devel 
[root@ora19c ~]# yum -y install libstdc++-devel 
[root@ora19c ~]# yum -y install gcc-c++ 
[root@ora19c ~]#  yum install -y https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

 

해당 명령어를 입력해 설치를 해준다.

 

 

4. 오라클 계정 설정

 

[ora19c@ora19c ~]$ vi .bash_profile 입력하여

.............
.............
# oracle setup
export ORACLE_OWNER=ora19c
export ORACLE_BASE=/app/ora19c 
export ORACLE_HOME=/app/ora19c/19c
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORACLE_SID=DB19 
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export ORACLE_HOSTNAME=DB19.itclass.co.kr 
export TMP=/tmp 
export TMPDIR=$TMP
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME:/usr/bin:.

해당 내용을 입력해 준다.

 

5. 설치용 패키지 준비

 

root계정으로 로그인 하여 yum -y install ftp와 yum install -y vsftpd를 설치해주고 ftp를 이용하여 오라클의 설치 파일을 다운받아 줘야 한다.  systemctl start vsftpd를 실행해주고 파일질라(FTP프로그램)로 ora19c 접속 LINUX.X64_193000_db_home.zip 파일을 /app/ora19c/19c위치에 다운받아 준다. 
다운로드가 다 되었으면 systemctl stop vsftpd로 vsftpd실행을 꺼주고  cd $ORACLE_HOME 디렉토리로 가서

ls 명령어로 LINUX.X64_193000_db_home.zip파일이 있는지 확인하고
unzip LINUX.X64_193000_db_home.zip 명령어로 압축을 풀어준다.

 

 

6. 오라클 설치

 

X윈도우를 오라클계정으로 접속하여 터미널을 실행해준다.

cd %ORACLE_HOME  ( /app/ora19c/19c/)  설치 파일이 있는 오라클 홈 디렉토리로 이동하여
./runInstaller 명령어로 설치를 실행해 준다.

 

 

인스턴스는 오라클의 메모리구조, 데이터베이스 하드웨어구조를 나타내 준다 체크를하고 다음을 눌러준다.

 

데스크톱 클래스를 체크하여 기본설정이 포함된 클래스로 설치를 진행한다.

 

오라클 베이스와 데이터베이스 파일의 위치는 절대 경로를 변경해서는 안되고 자동으로 잡혀 있어야한다.

전역 데이터베이스 이름을 hosts에서 입력한 DB19로 입력해주고 오라클의 비밀번호를 설정해 준다.

컨테이너 데이터베이스로 생성은 체크를 해제해 준다.

 

인벤토리 디렉토리에 대한 쓰기 권한이 있는 멤버가 속한 운영체제 그룹을 dba로 설정하고 다음을 눌러준다.

 

자동으로 구성 스크립트 실행을 체크하고 리눅스의 루트 비밀번호 입력해 준다.

 

필요 조건 검사후 입력했었던 값들이 출력해서 보여주는데 문제가 없다면 설치버튼을 눌러준다.

 

설치 프로그램에서 생성한 구성 스크립트는 권한이 부여된 사용자(루트)로 실행되어야 한다고 나오는데 예(Y) 눌러 주어

설치를 계속 진행한다.

 

문제없이 설치가 안료 되었다면 푸티로 ora19c 계정으로 로그인 해준다.

 

 

[ora19c@linux85 ~]$ sqlplus / as sysdba 로 오라클 관리자로 오라클에 접속을 해준다 이때 설치과정에서 설정한 비밀번호를 묻지 않는데 그 이유는 리눅스 접속시 오라클관리자 그룹에 속한 계정으로 로그인 했음으로 보안상 문제가 없다고 판단하여 묻지 않는다. 만약 오라클관리자 그룹에 속하지 않은 계정에서 접속시 접속이 안된다.

 

SQL> show sga 는 오라클의 메모리 구성을 보여주는 명령어로 

Total System Global Area  830469472 bytes
Fixed Size                  8901984 bytes
Variable Size             562036736 bytes
Database Buffers          251658240 bytes   >> 데이터를 이안에서 불러와서 읽음 (메모리에 올려서 읽음)
Redo Buffers                7872512 bytes   >> 작업내용을 저장(다시수행) / (반대로 undo는 취소)

 

SQL> shutdown immediate
데이터베이스 종료

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
데이터베이스 실행

SQL> startup
ORACLE instance started.

실행과 종료등 작동 여부를 확인해 준다.

 

 

7. 오라클 사용자 계정

 

 st 계정 생성
 - st 계정을 생성한다. 암호는 임의로 선택한다.
 - 사용할 테이블스페이스 이름은 ② 단계에서 확인한다.
 - 명령
 SQL> CREATE USER [사용자]
 2 IDENTIFIED BY [암호]
 3 DEFAULT TABLESPACE [테이블스페이스]
 4 TEMPORARY TABLESPACE [임시테이블스페이스]
 5 QUOTA UNLIMITED ON [테이블스페이스]; 

 

SQL > CREATE USER st IDENTIFIED BY zaqxsw123 DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users; 

st 유저를 생성하고 

생성한 계정에 권한을 부여해 주어야 하는데 먼저 sys계정으로 sqlplus 로그인하여

SQL> GRANT connect, resource TO st;
SQL> GRANT create view TO resource;
SQL> GRANT execute ON dbms_crypto TO resource;

 

생성한 st계정으로 sqlplus 로인한 모습

생성한 st계정이 로그인이 되는지 접속을 통해 확인한다.

 

 

8. 오라클 네트워크 설정과 접속

      1)................................ 오라클 서버 설정 : 리스너 구동

 

1. 오라클 서버
 - IP : 192.168.10.85(oracle)
 - Host명 : DB19.itclass.co.kr
 - ORACLE_OWER : ora19c
 - ORACLE_HOME : /app/ora19c/19c
 - TNS_ADMIN : $ORACLE_HOME/network/admin
 - ORACLE_SID : DB19


2. Linux 클라이언트
 - IP : 192.168.10.81
 - ORACLE_HOME : /app/ora19c/19c


3. 윈도우 클라이언트
 - IP : 192.168.10.80
 - ORACLE_HOME : C:₩DB₩ora19c₩19c

 

8. 1) 오라클 서버 설정 : 리스너 구동

 

root 계정으로 오라클 서버 리눅스로 로그인 한 후

cd /app/ora19c/19c/network/admin 로 이동한 후 

vi listener.ora로 

SID_LIST_LISTENER =
 (SID_LIST =
 (SID_DESC =
 (SID_NAME = DB19)
 (ORACLE_HOME = /app/ora19c/19c)
 )
 )

를 추가해 준다.

 

*- Default 리스너명은 listener이다.
 - HOST : 서버의 호스트명이나 IP 주소
 - PORT : TCP port 번호
 - SID_NAME : Instance 명 
 - 클라이언트는 반드시 <호스트명>에 해당하는 <IP>에 접근 가능해야 한다.

 

 

lsnrctl 명령

$ lsnrctl [옵션] <리스너명>
 - 옵션
 . start : 리스너를 시작한다.
 . stop : 리스너를 종료한다.
 . status : 리스너의 상태를 출력한다.(listener.ora 파일의 내용을 확인 할 수 있다.)
 . reload : listener.ora를 다시 읽는다.

 

$ lsnrctl start listener 로 listener를 실행해준다.

 

 

  2)................................ 리눅스 클라이언트 설정과 접속

 

<TNS 명> =
 (DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP) (HOST = <IP 주소>) (PORT = <port 번호>))
 (CONNECT_DATA = (SID = <서버의 SID>))
 )
 - TNS 명 : 접속 서버의 네트워크 이름
 . 호스트명은 각 클라이언트가 임의로 정한다. (DNS 도메인명과는 무관하다.)
 - HOST : 오라클 서버의 IP주소
 - PORT : 접속 서버의 리스너 port 번호
 - SID : 접속 오라클 서버의 SID

 

TNS_ADMIN=/app/ora19c/19c/network/admin의 tnsnames.ora 파일에 서버의 호스트ip와 SID명을 입력해준다.

vi 에디터로 TNS명과 HOST, PORT, SID를 입력 해 준다.
명령어 tnsping st01 or tnsping 192.168.10.85로 연결을 확인 할 수 있다.

 

 

 

   3)................................ 윈도우 클라이언트 설정과 접속

 

 

윈도우 TNS_ADMIN ( C:\app\client\st01\product\19.0.0\client_1\network\admin) 위치에서 tnsnames.ora 파일을 열어

 

st01 =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.10.85)(port = 1521))
      (CONNECT_DATA = (SID = DB19))
    )

해당 내용을 입력해 주고 저장해 준다.

 

CMD를 실행하여 

오라클 서버와 연결을 확인하고 SQLPLUS를 이용하여 DB접속을 한다.

DB에 접속이 잘 된 것을 확인 할 수 있다.

 

9. 오라클 자동실행 설정

 

오라클이 설치된 리눅스를 root로 로그인하여

/etc/oratab 파일 수정한다.

vi /etc/oratab

'$ORACLE_SID:$ORACLE_HOME:Y'를 추가한다.

 

리눅스 실행시 오라클의 자동실행을 위해 /etc/rc.d/rc.local 에 실행 스크립트를 추가한다.

 

vi /etc/rc.d/rc.local

 

su - ora19c -c /app/ora19c/19c/bin/"lsnrctl start"
su - ora19c -c /app/ora19c/19c/bin/dbstart

 

ora19c 계정의 권한으로 부팅시 오라클이 실행되게 스크립트를 추가한다.

 

10. 관리자 패스워드 지정

환경
SID : DB19 
네트워크 접속을 위해 sys(관리자) 패스워드를 지정한다.

 


orapwd
 file = [패스워드파일]
 password = [사용할 패스워드]
 force =[y/n]
 . 패스워드 파일이 있을 경우 강제 생성
 format = [호환버전]
 . 12이하로 지정하면 패스워드에 특수문자 불필요.
 entries = [인원수]


# orapwd file=$ORACLE_HOME/dbs/orapwDB19 password=zaqxsw123 force=y 
 format=12
# sqlplus sys/zaqxsw123@dal as sysdba

윈도우에서 관리자로 접속됨을 확인 할 수 있다.

 

11. 인스턴스 클라이언트 설치

 1). 오라클 인스턴스 클라이언트 설치

 

root 계정으로 로그인하여 ftp로 oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm과 oracle-instantclient19.5-sqlplus-19.5.0.0.0-1.x86_64.rpm을 다운받아 준다.

rpm -Uvh oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm

rpm -Uvh oracle-instantclient19.5-sqlplus-19.5.0.0.0-1.x86_64.rpm

다운받은 파일을 설치해 준다.

 

# mkdir -p /usr/lib/oracle/network/admin/ 

디렉토리를 만들고


# vi /usr/lib/oracle/network/admin/sqlnet.ora

sqlnet.ora 파일에 NAMES.DIRECTORY_PATH= (TNSNAMES)을 추가한다.

 

vi /usr/lib/oracle/network/admin/tnsnames.ora

oracle =
 (DESCRIPTION =
 (ADDRESS = (PROTOCOL = tcp) (HOST = 192.168.12.12) (port = 1521))
 (CONNECT_DATA = (SID = DB12))
 )

를 추가한다.

 2). 접속 환경 설정

vi .bash_profile에

# oracle install

export TNS_ADMIN=/usr/lib/oracle/network/admin
export LD_LIBRARY_PATH=/usr/lib/oracle/19.5/client64/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

를 추가해 준다.

 

 

 3). 접속 테스트

 접속을 확인한다.
# sqlplus 계정/패스워드@TNS명

 

반응형
반응형

 

윈도우 2019서버를 통해 DNS 네임서버를 만들 수 있다.

 

 

목차


1............................................ DNS 서버 설치
2.............................................DNS 서버 설치 확인
3.............................................DNS 서버 작동 확인
4............................................ DNS 서버를 이용한 네임서버 추가
5............................................ 추가된 네임서버의 작동 확인


1. DNS 서버 설치

서버관리자의 관리탭을 눌러 역할 미 기능 추가 마법사를 클릭하고 설치 유형선택을 '역할 기반 또는 기능 기반 설치' 체크하여 다음을 눌러준다. 서버 선택탭에서 '서버 풀에서 서버 선택' 체크를 하고 '서버 풀' 칸에 윈도우 2019서버 컴퓨터의 이름과 ip주소가 있는지 확인하고 다음을 눌러 준다. 서버 역할 탭에서 'DNS서버'를 체크해주고 다음을 눌러 준다. 역할 및 기능 추가 마법사 창이 뜨는데 '기능 추가'를 눌러 준다. 기능 탭에서 설정하지 않고 다음을 눌러 준다. DNS 서버 탭에서도 다음을 눌러준다. 확인 탭에서 '필요한 경우 자동으로 대상 서버 다시 시작' 을 체크해주고 설치를 눌러
설치를 시작해준다.

2. DNS 서버 설치 확인 및 설정


1) 제어판-시스템 및 보안에서 'Windows 방화벽에서 앱 허용'을 눌러 준다. 허용되는 앱을 확인할 수 있는 창이 뜨는데 여기에서 'DNS 서비스'가 허용되어 있는지 확인해준다.

 

2) 제어판-시스템 및 보안-관리도구-서비스를 실행해준다. 서비스 창에서 DNS server의 상태가 실행중인지 확인해준다.

 

3)네트워크오른쪽클릭- 속성 - 어댑터 설정 변경- 이더넷 오른쪽클릭 - 속성 - 인터넷 프로토콜 버전 4 선택후 속성을 클릭한 다음 인터넷 프로토콜 버전4 설정 창에서 ip 주소 사용을 체크하여 ip주소와 기본 설정 DNS 서버 ip를 설치한 DNS서버의 ip로 입력해주고 서브넷 마스크와 게이트 웨이도 입력한 뒤 확인을 눌러준다.


3. DNS 서버 작동 확인
명령 프롬포트를 실행하여 명령어 nslookup를 이용하여 작동 되는지 확인한다. 예로 nslookup www.naver.com 을 입력 하였을 때 서버의 이름과 설치한 DNS서버의 ip주소가 화면에 출력되고 그 밑에 해당 사이트의 이름과 ip주소, 도메인이름이 나온다면 정상 작동 되는 것이다.

4. DNS 서버를 이용한 네임서버 추가
서버관리자-도구-DNS 실행해준다. DNS관리자 탭에서 정방향조회 영역 탭을 오른쪽 클릭하여 새 영역을 눌러 새 영역 마법사 시작을 실행해준다. 영역 형식은 주 영역으로 하고 영역 이름에 네임서버의 이름을 설정해 준다.(ex st01.abc) '다음 이름으로 새 파일 만들기'에 체크하고 다음을 눌러준다. '동적 업데이트 허용 안 함' 체크 후 다음을 눌러준다. 마침을 누르면 정방향조회 영역 탭 아래에 만들고자 하는 네임서버 이름의 폴더가 생기는데 폴더 오른쪽 클릭을 하여 '새 호스트'를 클릭한다. 이름 입력란에 gw,ns,www로 각각 만들어주고 gw에는 게이트웨이 주소를 ns에는 해당 서버 컴퓨터의 ip주소를 www에는 웹서버로 사용할 ip주소를 입력하여 호스트를 추가해준다.

5. 추가된 네임서버의 작동 확인
명령 프롬포트를 실행하여 명령어 nslookup를 이용하여 확인할 수 있다. ex) nslookup www.st01.abc를 입력하면 DNS 서버 작동 확인에서 확인한 것 처럼 DNS 서버의 이름과 ip주소, 해당 사이트의 이름과 ip주소가 화면에 출력한 것을 보고 정상 작동 됨을 확인 할 수 있다.

반응형

'Network' 카테고리의 다른 글

OSI 7 Layer  (0) 2022.12.27
DNS 서버 설치  (0) 2022.11.08
DNS 서버  (0) 2022.10.24
Net2 DNS 질의 과정  (0) 2022.10.24
Net1-2 라우터 메세지 전송 과정  (0) 2022.10.17
반응형

정렬 : order by 칼럼or숫자 (되도록이면 숫자 쓰지말아야 함, 반드시 맨뒤로 옴)

asc(기본값으로 정해져있음) 오름차순 정렬 1,2,3,4,5...
desc 내림차순 정렬 10,9,8,7,6,5...

사회에선 일반적으로 내림차순을 많이 쓴다.

기수가 많다 = 중복이 적다
기수가 적다 = 중복이 많다


선택 (selection) : 원하는 행만 검색
select 컬럼,컬럼....
from 테이블
WHERE 조건
order by 컬럼

WHERE 컬럼 =(부등호연산가능) '문자타입'or 숫자
WHERE !(부정연산자) = '문자타입' >>>> '문자타입' 제외 하고 출력

ex) 보너스가 200 이하인 사원 검색 (데이터에 null이 있는 경우)
select eno 사번, ename 이름, comm 보너스
from emp
where comm <= 200;     
= 데이터에 null 있으면 데이터를 신뢰할 수 없다.

select eno 사번, ename 이름, comm 보너스
from emp
where nvl(comm,0) <= 200;
=null값을 다른값으로 치환 해줘야 한다.

ALTER SESSION SET nls_date_format='YYYY/MM/DD:HH24:MI:SS';
-> 날짜 출력 형식을 정의하는 명령어

입사일이 1996년 이후인 사원의 정보를 검색한다.
select * from emp
where hdate >= '1996/01/01';

널과 비교 연산
널은 결정된 값이 아님으로 '=','<' 등의 비교 연산자를 사용할 수 없다.
널에대한 직접적인 검색은 다음과 같이 특별한 연산자를 이용한다.
IS NULL : 널을 검색한다.
IS NOT NULL : 널이 아닌 값을 검색한다.

 

예제)
1. 화학과 학생을 검색한다.
select * from student where major = '화학';  


2. 평점이 2.0 미만인 학생을 검색한다.

select * from student where avr < '2.0'; 


3. 권현 학생의 평점을 검색한다.

select sname 이름, avr 평점 from student where sname = '권현'; 


4. 정교수의 명단을 검색한다.
select pname 이름, orders 직위 from professor where orders = '정교수';  


5. 화학과 소속 교수의 명단을 검색한다.
select pname 이름, orders 직위 from professor where section = '화학';


6. 송강 교수의 정보를 검색한다.
select * from professor where pname = '송강'; 


7. 학년별로 화학과 학생의 성적을 검색한다.
select syear 학년, sname 이름, avr 성적 from student where major = '화학' order by 학년;


8. 2000년 이전에 부임한 교수의 정보를 부임일순으로 검색한다.
select * from professor where hiredate <= '2000/01/01';


9. 담당 교수가 없는 과목의 정보를 검색한다.
select  * from course where pno is null;


10. 보너스가 급여의 10% 이상인 사원을 검색한다.
select ename 이름, sal 급여, comm 보너스 from emp where nvl(comm,0) >= sal/10;

반응형
반응형

SELECT     -  테이블에서 행을 검색

INSERT      -  테이블에 행을 입력
UPDATE     -  테이블의 데이터(행)을 수정
DELETE     -  테이블의 행을 삭제

CREATE    -  테이블을 생성
ALTER       -  테이블을 구조 수정
DROP        -  테이블을 삭제

GRANT       -  권한을 할당    
REVOKE    -  권한을 해제

 

SELECT tname FROM tab;   -> 테이블 목록을 확인할 수 있다.

DESC 테이블명;                    -> 테이블의 구조 ( 테이블의 컬럼 구성)

 

VARCHAR2 (숫자->사용 할 수 있는 바이트 수)
DATE (연원일시분초 저장되어있음)

 

dept       (부서)
emp        (사원)
student    (학생)
professor  (교수)
course     (과목)
score      (기말고사 점수)

SQL 명령어

as생략가능
" " 공백이 들어갔을 때, 별명이 숫자로 시작할 때 씀 = 공백자리에_써도 된다.
null은 연산시 값이 null로 되는데 더하거나 뺄때는 숫자 0으로
곱하거나 나누는것이면 1로 항등원으로 바꿔준다.
NVL(comm,0) , NVL(comm,1)

연결 연산자와 중복 제거
 ' '안에는 대소문자 구분한다.

SELECT [DISTINCT | ALL] 컬럼, 컬럼, ... DISTINCT 중복되지않게 한번만 출력



실습
1. Student, course, professor, score table의 구조를 검색한다. 

2. 모든 학생의 정보를 검색한다. 

SQL> SELECT FROM ;
3. 모든 교수의 정보를 검색한다. 

SQL> SELECT * FROM professor;
4. 모든 과목의 정보를 검색한다. 

SQL> SELECT * FROM course;
5. 기말고사 시험 점수를 검색한다. 

SQL> SELECT result 시험_점수 FROM score;
6. 학생들의 학과와 학년을 검색한다. 

SQL> SELECT major 학과, syear 학년 FROM student;
7. 각 과목의 이름을 검색한다. 

SQL> SELECT cname 과목명 FROM course;
8. 모든 교수의 직위를 검색한다. 

SQL> SELECT pno 교수번호, pname 이름, orders직위 FROM professor;
9. 각 과목의 학점수와 담당교수 번호를 검색한다. 

SQL> SELECT cname 과목명, pno 담당_교수_번호, st_num 학점수 FROM course; 
10. 각 학생들이 속한 학과와 학년을 검색한다. 

SQL> SELECT sname 이름, major 학과, syear 학년 FROM student; 

1. 각 학생의 평균 평점을 검색한다.(별명을 이용)
select sno 학번, sname 이름, avr 평균평점 from student;
2. 각 과목의 학점수는 검색한다.(별명을 이용)
select cname 과목명, st_num 학점수 from course;
3. 각 교수의 지위를 검색한다.(별명을 이용)
select pname 이름, orders 직위 from professor;
4. 급여를 10% 인상했을 때 연간 지급되는 급여를 검색한다. 
select (sal*1.1)*12 급여 from emp;
5. 현재 학생의 평균 평점은 4.0 만점이다. 이를 4.5 만점으로 환산해서 검색한다.
select avr*4.5/4.0 환삼평점 from student;
6. 급여가 10% 인상될 경우 각 사원의 연봉을 검색한다. 
select (sal*1.1)*12 연봉, ename 이름 from emp;
7. 1년 동안 지급되는 급여와 10% 인상되어 1년 동안 지급되는 급여 간에 차액을 검색한다. 
select (sal*1.1*12)-sal 차액 from emp;
8. 각 학생들의 평균평점을 4.5 만점으로 환산한 경우 각각 평점의 상승폭은 얼마인지 검색한다.
select (avr*4.5/4.0)-avr 상승폭  from student;

1. '____학과인 ____학생의 현재 평점은 __입니다.' 형태로 학생의 정보를 출력한다.
select major||'학과인'||sname||'학생의 현재 평점은'||avr||'입니다.' from student;
2. '____과목은 ____학점 과목입니다.' 형태로 과목의 정보를 출력한다. 
select cname||'과목은'||st_num||'학점 과목입니다.' from course;
3. '____교수는 ____학과 소속입니다.' 형태로 교수의 정보를 출력한다.
select pname||'교수는'||section||'학과 소속입니다.' from professor;
4. 학교에는 어떤 학과가 있는지 검색한다.(학생 테이블 기반으로 검색한다.)
select DISTINCT major from student;
5. 학교에는 어떤 학과가 있는지 검색한다.(교수 테이블 기반으로 검색한다.)
select distinct section from professor;
6. 교수의 지위는 어떤 것들이 있는지 검색한다. 
select distinct orders from professor;
7. '____학생의 4.5 환산 평점은 ____입니다.' 형태로 학생의 환산 평점을 출력한다. 
select sname||'학생의 4.5 환산 평점은'||(avr*4.5/4.0)||'입니다.' from student;
8. '____과목의 담당 교수 번호는 ____입니다.' 형태로 과목의 정보를 출력한다. 
select section||'과목의 담당 교수 번호는'||pno||'입니다.' from professor;
9. 학교에 개설된 과목들은 몇 학점짜리인지 검색한다. 
select distinct cname 과목, st_num 학점 from course;
10. 학생들이 수강중인 과목의 과목번호를 검색한다.
select distinct cname 과목명, cno 과목번호 from course; 

1. 성적순으로 학생의 이름을 검색한다.
select avr 성적, sname 이름 from student order BY 성적 desc;
2. 학과별 성적순으로 학생의 정보를 검색한다. 
select avr 성적, sname 이름, major 학과 from student order by 성적 desc;
3. 학년별 성적순으로 학생의 정보를 검색한다. 
select syear 학년, sname 이름, avr 성적 from student order by 학년,성적 desc;
4. 학과별 학년별로 학생의 정보를 성적순으로 검색한다.
select major 학과, syear 학년, sno 학번, sname 이름, sex 성별, avr 성적 from student order by 학과,학년 desc ,성적 desc; 
5. 학점 순으로 과목 이름을 검색한다. 
select cname 과목명, st_num 학점수 from course order by 학점수 desc;
6. 각 학과별로 교수의 정보를 검색한다.
select  section 소속학과, pno 교수번호, pname 이름, orders 직위, hiredate 부임일 from professor order by 소속학과;
7. 지위별로 교수의 정보를 검색한다. 
select orders 직위, pno 교수번호, section 소속학과, pname 이름, hiredate 부임일  from professor order by 직위 desc;
8. 각 학과별로 교수의 정보를 부임일자 순으로 검색한다. 
select section 소속학과, pname 이름, hiredate 부임일 from professor order by 소속학과,부임일 desc;
9. 급여가 10% 인상된 경우 부서별로 각 사원의 연봉을 연봉순으로 검색한다.
select  job 부서, ename 이름, (sal*1.1*12)+NVL(comm,0) "급여가_10%_인상된_연봉" from emp order by 1.3 desc;
10. 보너스가 100% 인상된 경우 업무별로 각 사원의 연봉을 연봉순으로 검색한다.
select job 부서, ename 이름, (sal*12)+NVL(comm,0)*2 "보너스_100%_포함된_연봉" from emp order by 1,3 desc;

반응형
반응형

오라클
오라클 베이스    : C:\app\client\st01
오라클 홈           : C:\app\client\st01\product\19.0.0\client_1
유닉스 $ORACLE_HOME,  윈도우 %ORACLE_HOME
오라클 홈은 오라클 베이스 밑에 있다. (오라클 베이스의 위치는 컴퓨터 사용환경에 따라 위치가 다름)
TNS_ADMIN : C:\app\client\st01\product\19.0.0\client_1\network\admin


sqlplus 계정/패스워드@TNS명(접속식별자/dal, oracle)
명령 프롬프트 : sqlplus st01/st01@dal (or oracle)
                       : @school.sql (예제)
                       :  select * from emp;

 

데이터베이스의는 정렬할 수 있어야 하고 검색이 되어야 한다. (쉽게 컴퓨터의 폴더 처럼 나누어져 있고 검색이 되어야 한다., 데이터보안은 무결성 보안등급을 사용한다.)

종류

1. RDB : 텍스트형에서만 사용

2. 멀티미디어데이터베이스 : 사진으로 검색하거나 추상적인 표현으로 검색, AI가 이 기능을 이용함

 

RDB
columm : 같은 성격을 가진 데이터 (세로축)
row   : 사상하는 데이터(뭔가를 나타낸다, 가로축), 실체
colum + row : table

relationship : 테이블간의 관계

sqlplus 계정/패스워드@TNS명(접속식별자/dal, oracle)
명령 프롬프트 : sqlplus st01/st01@dal (or oracle)
             @school.sql (예제)
             select * from emp;

 

school.sql 예제의 테이블 구조

dept       (부서)
emp        (사원)
student    (학생)
professor  (교수)
course     (과목)
score      (기말고사 점수)

반응형

+ Recent posts