RDB & SQL-SELECT

2019. 12. 2. 13:16Security/sql

* SELECT문의 이해

SQL의 데이터 유형

- VARCHAR : 가변 문자

- DATE : 날짜

- NUMBER : 숫자

 

SELECT문을 이용한 테이블 검색

- SELECT [컬럼] FROM 테이블; 

  -> 테이블로부터 지정한 컬럼을 검색할때 사용.

- DESC 테이블;

  -> 테이블의 구조를 검색한다. 

select * from tab;

  -> 현재 스키마의 모든 테이블 목록을 검색. 암기해야 함.

 

[SQL 실행해보기]

#SQL > @st.sql

select * from tab;

-> 현재 스키마의 모든 테이블 목록을 검색

#SQL > select tname from tab;

-> tname의 테이블 목록 검색

#SQL > desc emp;

  -> emp 테이블의 구조를 검색. ex) eno는 영어로 4글자까지 들어갈 수 있다. ENAME은 영어로 10글자까지 들어갈 수 있다.

#SQL > SELECT * FROM emp;

-> emp 테이블의 모든 컬럼 검색

ENO : 사번

ENAME : 1번

SEX : 성별

JOB : 업무

MGR : 사수의 사번

HDATE : 입사일 

SAL : 월급

COMM : 상여

DNO : 부서 번호

#SQL > DESC dept;

-> dept 테이블의 구조를 검색. DNAME : 부서 이름, LOC : 위치 

#SQL > select * from dept;

-> dept 테이블의 모든 컬럼 검색

#SQL > SELECT eno, ename, job FROM emp; 

-> 사원의 이름과 업무를 검색한다.(동명이인의 경우 때문에 사번도 같이)

#SQL > SELECT eno, ename, sal FROM emp;

-> 사번, 이름, 급여를 검색. 여기서 문자열은 왼쪽에서부터 출력, 숫자는 오른쪽부터 출력됨을 알 수 있다. 

 

[실습]

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

#SQL > desc student;

#SQL > desc course;

#SQL > desc professor;

#SQL > desc score;

 

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

#SQL >SELECT * FROM student;

 

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

#SQL >SELECT * FROM professor;

 

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

#SQL >SELECT * FROM course;

 

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

#SQL > SELECT RESULT FROM score;

 

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

#SQL > SELECT syear, major from student;

 

7. 각 과목의 이름을 검색한다.

#SQL > SELECT cno, cname FROM course;

 

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

#SQL > SELECT pno, pname, orders FROM professor;

 

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

#SQL > SELECT cname, st_num, pno

 

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

#SQL > SELECT sno, sname, major, syear FROM student;

 

* 다양한 SELECT문의 사용 

별명을 이용한 검색

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

  -> as는 생략 가능하고 ""도 컬럼에 공백(띄어쓰기가 없다면) 생략 가능하다. 만약 공백이 있다면 _(언더바)를 사용.

 

[예제]

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

-> 각 사원의 이름, 담당업무를 검색해서 보여준다.

 

수식을 이용한 검색

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

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

-> 각각 사원이 연간 급여(상여 제외)를 검색한다.

SELECT eno 사번, ename 이름, sal 급여, comm 상여, sal*12+comm 연봉 FROM emp;

-> 사원의 연봉을 검색. 만약 상여금값이 아무 것도 입력이 안 되어있으면 연봉이 계산이 안되며 이러한 값을 NULL이라고 한다.

 

NULL 연산을 위한 NVL 함수의 사용

NVL (컬럼, 치환 값)의 형태로 사용. 보안, 회계상의 문제로 어떤경우에도 숫자값에 NULL값을 입력할 수 없게 되어있다. 

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

-> NVL 함수를 이용해서 상여가 NULL값이어도 연봉이 출력되게 검색.

 

[실습]

1. 각 학생의 평균 평점을 검색.

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

 

2. 각 과목의 학점을 검색.

#SQL > SELECT CNAME 과목, ST_NUM 학점 from course;

 

3. 각 교수의 지위를 검색.

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

 

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

#SQL > SELECT eno 사번, ename 이름, sal*12*1.1 인상된_연간_급여 FROM emp;

 

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

#SQL > SELECT sno 학번, sname 이름, avr*4.5/4 환산된_평점 FROM student;

 

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

#SQL > SELECT eno 사번, ename 이름, sal*1.1*12 인상된_급여, comm 상여, (sal*1.1*12)+NVL(comm,0) 연봉 FROM emp;

 

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

#SQL > SELECT eno 사번, ename 이름, sal*1.1*12 인상된_급여, sal*12 급여, (sal*12*1.1)-(sal*12) 급여간_차액 from emp;

 

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

#SQL > SELECT sno 학번, sname 이름, avr*4.5/4 환산_평점, avr 기존_평점, (avr*4.5/4)-avr 평균_평점 FROM student;

 

* 용어 및 개념 정리

- TNS(Transparent Network Substrate) : 오라클에서 사용하는 네트워크 기술이며  Client/Server 또는 Server/Server 간에도 Data의 전송을 가능하게 해주는 기술. 필요한 프로토콜 및 포트번호, 서버주소, 인스턴스 등을 설정.

 

RDB의 특징 : 모든 데이터는 테이블(표)에 들어있음

table에서 세로(열)는 columm이라고 하고, 가로(행)는 row라고 한다. 모든 테이블에는 기본키(primary key)가 있어야 한다.

 

SQL에서 CHAR타입을 쓰지 않는 이유 : CHAR타입은 고정 문자이기 때문에 정해진 글자를 채우지 못 할 경우 랜덤값을 지정하기 때문에 쓰지 않는다.

 

col tname format a15; : SQL내에서 가독성이 좋게 수정

'Security > sql' 카테고리의 다른 글

SQL-서브쿼리  (0) 2019.12.06
SQL-모델링, join  (0) 2019.12.05
SQL-관계 연산자와 LIKE 연산자, BETWEEN, IN  (0) 2019.12.04
SQL-WHERE  (0) 2019.12.03
SQL-SELECT(2)  (0) 2019.12.03