2019. 12. 2. 13:16ㆍSecurity/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 |