연결 연산자

SELECT 컬럼 || '리터럴' || ......
FROM  테이블;

 

중복 제거

SELECT [DISTINCT | ALL] 컬럼, 컬럼, ...
FROM  테이블;

 

예제 1.  다양한 방법으로 사원의 이름을 급여 또는 업무와 함께 검색한다.

SELECT ename||sal 이름_급여
FROM emp;

SELECT ename||' '||sal  이름_급여
FROM emp;

SELECT ename||'의 업무는 '||job||'입니다.'
FROM emp;

 

예제 2.  주의해야 할 연결 연산자를 이용

SELECT ename||' '||sal+100
FROM emp;

위와 같이 하면 오류가 난다. (연산자 우선순위 때문)

괄호를 붙여주도록 한다.

SELECT ename||' '||(sal+100)
FROM emp;

 

예제 3. 직원들의 업무는 어떤 것이 있는지 검색한다.(업무의 종류를 검색한다.)

SELECT job 업무 FROM emp;

기본으로 출력되는 것이 ALL이기 때문에 전체가 출력된다.

아래와 같이 출력하면 중복을 제거해 출력한다.

SELECT DISTINCT job 업무 FROM emp;

 

실습

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)||'입니다.'
FROM student;

 

8. '____과목의 담당 교수 번호는 ____입니다.' 형태로 과목의 정보를 출력한다.

SELECT cname||'과목 담당 교수번호는 '||pno||'입니다.'
FROM course;

 

9. 학교에 개설된 과목들은 몇 학점짜리인지 검색한다.

SELECT cno 과목번호, cname 과목이름, st_num 학점수
FROM course;

 

10. 학생들이 수강중인 과목의 과목 번호를 검색한다.

SELECT DISTINCT cno "수강 과목번호"
FROM course;

별명을 이용한 검색

SELECT 컬럼 as "별명", 컬럼 as "별명", ... 
FROM  테이블;

as" "는 생략 가능

_ : 공백 표시

 

수식을 이용한 검색

SELECT 수식 [as 별명], ...
FROM  테이블;

 

NULL 연산 위한 NVL 함수

NVL(컬럼, 치환 값)

치환 값은 연산자의 항등원으로 바꾼다.

+, - : 0

*, / : 1

계산한 값이 정확하지 않을 수도 있기 때문에 이런 경우 확실히 적어주는 것이 좋다.

 

 

예제 1. 각 사원의 이름과 담당업무를 검색해서 결과를 보고한다.

SELECT eno 사번, ename 이름, job 업무 FROM emp;

 

예제 2. 각 사원의 연간 수급하는 급여를 검색한다.

select eno 사번, ename 이름, sal*12 연간_급여
from emp;

 

예제 3. 별명에 반드시 이중 인용 부호가 필요한 경우를 확인한다.

select ename "10name" from emp;

 

예제 4. 사원의 연봉을 검색한다. (연봉 = 12개월분 급여(sal) + 보너스(comm))

select eno 사번, ename 이름, sal 급여, comm 보너스, sal*12+comm 연봉
from emp;

보너스 값 NULL이라 연봉이 NULL이 나옴

 

예제 5. 사원의 연봉을 검색한다.

select eno 사번, ename 이름, sal*12+NVL(comm,0) 연봉
from emp;

 

실습

1. 각 학생의 평균 평점을 검색한다.(별명을 이용)

SELECT sno 학번, sname 이름, avr 평균_평점
FROM student;


2. 각 과목의 학점수는 검색한다.(별명을 이용)

SELECT cno 과목번호, cname 과목이름, st_num 학점수
FROM course;


3. 각 교수의 지위를 검색한다.(별명을 이용)

SELECT pno 교수번호, pname 이름, orders 지위
FROM professor;

 

4.  급여를 10% 인상했을 때 연간 지급되는 급여를 검색한다.

SELECT eno 사번, ename 이름, (sal*1.1*12) 연간_급여
FROM emp;


5. 현재 학생의 평균 평점은 4.0 만점이다. 이를 4.5 만점으로 환산해서 검색한다.   

SELECT sno 학번, sname 이름, (avr*4.5/4) "4.5만점 환산"
FROM student;

 

6. 급여가 10% 인상될 경우 각 사원의 연봉을 검색한다. 

SELECT eno 사번, ename 이름, (sal*1.1*12)+NVL(comm,0) 연봉
FROM emp;


7. 1년 동안 지급되는 급여와 10% 인상되어 1년 동안 지급되는 급여 간에 차액을 검색한다.

SELECT eno 사번, ename 이름, (sal*1.1*12)-(sal*12) "1년 급여 차액"
FROM emp;


8. 각 학생들의 평균 평점을 4.5 만점으로 환산한 경우 각각 평점의 상승폭은 얼마인지 검색한다.

SELECT sno 학번, sname 이름, (avr*4.5/4)-avr "4.5만점 환산 상승폭"
FROM student;

SELECT

형식

SELECT [ 컬럼, 컬럼, ... | * ]  
FROM  테이블;

- [ ; ] 로 끝내기

- 대소문자 구별 X

- 반드시 출력 결과 존재

 

테이블 구조 검색

DESC 테이블;

- 컬럼의 이름, 데이터 타입 확인

 

테이블 목록 검색

SELECT * FROM tab;  # tab : 가상 테이블

- 현재 스키마(shema)의 모든 테이블 목록 검색 (스키마 = 유저)

 

수식 검색

SELECT 수식
FROM  dual;

 

* 테이블은 2차원 배열과는 다르다.

 

 

예제

select * from tab;

실행 결과

 

DESC emp;

실행 결과

 

SELECT * FROM emp;

실행 결과

 

DESC dept;

실행 결과

 

 

SELECT * FROM dept;

실행 결과

 

SELECT eno, ename, job FROM emp;

실행 결과

 

 

SELECT eno, ename, sal FROM emp;

실행 결과

 

SELECT 2+3 FROM dual;

실행 결과

 

 

실습

1. student, course, professor, score table의 구조 검색

DESC student;
DESC professor;
DESC course;
DESC score;

각각 실행한다.

실행 결과

 

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

SELECT * FROM student;

실행 결과 (아래 정보 생략)

 

3. 모든 교수의 정보를 검색

SELECT * FROM professor;

실행 결과

 

4. 모든 과목의 정보를 검색

SELECT * FROM course;

실행 결과 (아래 정보 생략)

 

5. 기말고사 시험 점수를 검색

SELECT * FROM score;

실행 결과 (아래 정보 생략)

 

6. 학생들의 학과와 학년을 검색

SELECT sno, sname, major, syear FROM student;

실행 결과 (아래 정보 생략)

 

7. 각 과목의 이름을 검색

SELECT cname FROM course;

실행 결과 (아래 정보 생략)

 

8. 모든 교수의 직위를 검색

SELECT pno, pname, orders FROM professor;

실행 결과 (아래 정보 생략)

 

9. 각 과목의 학점수와 담당교수 번호를 검색

SELECT cno, cname, st_num, pno FROM course;

실행 결과 (아래 정보 생략)

 

10. 각 학생들이 속한 학과와 학년을 검색

SELECT sno, sname, major, syear FROM student;

실행 결과 (아래 정보 생략)

sql 디렉토리에 파일을 복사해둔다.

 

cmd 창에서 sql 디렉토리로 이동해 파일이 잘 복사된 것을 확인할 수 있다.

 

sql 접속 및 school_euc.sql 파일 실행

실행화면

 

위와 같이 만들어진 것을 확인할 수 있다.

 

 

Oracle Database Client 설치

Oracle Base : C:\dev\ora19c

Oracle 홈 위치 : C:\dev\ora19c\client

 

클라이언트로 사용할 것이기 때문에 런타임으로 설정한다.

 

Windows 내장 계정을 사용한다.

 

소프트웨어 위치는 오라클 홈이다.

오라클 홈이 너무 복잡하므로 아래와 같이 설정해준다.

 

클라이언트 홈을 지정한다.

 

Oracle Base, Oracle 홈 위치는 둘 다 외워둔다.

 

설치 완료.

 

SQL 사용하기

sql을 사용하기 위해서는 다음과 같이 수행한다.

Oracle Home에 [ tnsnames.ora ] 파일을 넣는다.

오라클은 다중 프로토콜 허용한다.

네트워크와는 분리되어있기 때문에 네트워크와 관련된 프로토콜은 알려줘야 한다.

따라서 ora 파일을 넣어 사용한다.

 

[ tnsnames.ora ]

[ tnsnames.ora ]에는 위와 같은 oracle, dal서버 정보가 적혀있다.

oracle와 dal 서버 주소는 같은 주소이다.

 

[ sqlplus st04/st04@oracle  또는  sqlplus st04/st04@dal ]을 실행하면

tnsnames.ora에 적힌 oracle, dal에 적힌 서버로 이동한다. 

여기서 oracle와 dal 서버는 같으므로 둘 중 아무거나 사용하도록 한다.

sqlplus를 사용

st04/st04 → ID/PW

@oracle 또는 @dal → oracle, dal 서버로 접속

 

종료할 때는 quit 하고 종료한다.

 

하지만 이런 방식으로 바로 실행하지 않고 다음과 같이 실행하도록 한다.

사용자 폴더에 sql이라는 폴더를 만든다.

 

sql 디렉토리로 이동 후 sql 서버로 접속해 사용한다.

+ Recent posts