2022. 10. 25. 17:03ㆍ데이터베이스
SELECT
- 테이블에서 행을 검색
SELECT [컬럼, 컬럼, .... | * ]
FROM 테이블;
- *을 통해 검색된 결과의 컬럼의 순서는 DESC명령으로 검색한 컬럼 순서이다.
- *는 컬럼과 같이 사용할수 없고 반드시 단독으로 사용한다.
- * = 사용x ,모든 컬럼을 검색할때 사용한다.
- SELECT 과 FROM절은 생략할수 없다.
- 네이버를 사용할때 구글을 통해 들어가는 것처럼 오라클은 서버이고 사용하는 프로그램은 client 프로그램이다.
SELECT * FROM tab;
- 현재 스키마(현재 유저)의 모든 테이블 목록을 검색한다.
- tab는 실제 테이블이 아니라 테이블의 목록을 보여주기 위한 가상 테이블
- 오라클에서 스키마는 유저와 동일한 의미를 갖는다.
- SQL문은 반드시 ' ; ' 으로 끝난다.
- SQL문은 대소문자를 구별하지 않는다.
- SQL문은 반드시 결과(출력)가 존재한다.
SQL> SELECT tname FROM tab;
DESC 테이블명
- 테이블의 구조를 검색한다.
- 컬럼의 이름, 데이터 타입을 확인한다.
SQL> DESC emp;
이름 널? 유형
----------------------------------------- -------- ----------------------------
ENO VARCHAR2(4) - 문자4개가 들어간다.
ENAME VARCHAR2(15)
SEX VARCHAR2(4)
JOB VARCHAR2(12)
MGR VARCHAR2(4)
HDATE DATE
SAL NUMBER
COMM NUMBER
DNO VARCHAR2(2)
SQL> SELECT * FROM emp;
(사수번호)
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
-------- ------------------------------ -------- -------------------------------- -------- ---------- ---------- ------
0001 안영희 여 경영 91/01/01 4800 0 01
0201 안영숙 여 지원 0001 91/02/01 3900 2000 01
0202 손하늘 여 지원 0001 91/12/01 3510 980 01
SQL> DESC dept;
이름 널? 유형
---------------- -------- -------------
DNO VARCHAR2(2)
DNAME VARCHAR2(10)
LOC VARCHAR2(6)
SQL> SELECT * FROM dept;
DNO DNAME LOC
---- ---------- ------
01 총무 서울
02 회계 서울
10 ERP 서울
.............
.............
예제 3. 사원의 이름과 업무를 검색한다.
SQL> SELECT eno, ename, job FROM emp;
ENO ENAME JOB
-------- ---------- ------
0001 안영희 경영
0201 안영숙 지원
0202 손하늘 지원
.............
.............
예제 4. 사번, 이름, 급여를 검색하고 검색된 데이터에 따라 출력 형식을 비교해본다.
SQL> SELECT eno, ename, sal FROM emp;
ENO ENAME SAL
-------- ---------- ----------
0001 안영희 4800
0201 안영숙 3900
0202 손하늘 3510
.............
.............
- 데이터타입이 문자면 왼쪽정렬 출력 숫자타입이면 오른쪽정렬 출력
emp(사원) | |||||
eno (사번) |
ename (사원이름) |
job (직무) |
sal (임금) |
comm (1년에받는보너스) |
deptno (부서 번호) |
12345 | 홍길동 | 총무 | 2100 | 200 | 10 |
INSERT - 테이블에 행을 입력
UPDATE - 테이블의 데이터(행)을 수정
DELETE - 테이블의 행을 삭제
CREATE - 테이블을 생성
ALTER - 테이블의 구조를 수정
DROP - 테이블을 삭제
GRANT - 권한을 할당
REVOKE - 권한을 해제
show - 데이터 베이스 목록이나, 테이블 목록 등 다양한 정보를 보기 원할 때 사용
sql은 대소문자 구분을 하지 않지만 리퍼럴은 대소문자를 구분한다.
실습
1. Student, course, professor, score table의 구조를 검색한다.
A) DESC STUDENT;
A) DESC COURSE;
A) DESC PROFESSOR;
A) DESC SCORE;
2. 모든 학생의 정보를 검색한다.
A) SQL> SELECT * FROM STUDENT;
3. 모든 교수의 정보를 검색한다.
A) SQL> SELECT * FROM PROFESSOR;
4. 모든 과목의 정보를 검색한다.
A) SQL> SELECT * FROM COURSE;
5. 기말고사 시험 점수를 검색한다.
A) SQL> SELECT * FROM SCORE;
6. 학생들의 학과와 학년을 검색한다.
A) SQL> SELECT MAJOR, SYEAR FROM STUDENT;
7. 각 과목의 이름을 검색한다.
SQL> SELECT CNAME FROM COURSE;
8. 모든 교수의 직위를 검색한다.
SQL> SELECT ORDERS FROM PROFESSOR;
9. 각 과목의 학점수와 담당교수 번호를 검색한다.
SQL> SELECT ST_NUM, PNO FROM COURSE;
10. 각 학생들이 속한 학과와 학년을 검색한다.
SQL> SELECT MAJOR, SYEAR FROM STUDENT;
별명을 이용한 검색
SQL> SELECT 컬럼 as "별명", 컬럼 as "별명", ...
2 FROM 테이블;
예제 1. 각 사원의 이름과 담당업무를 검색해서 결과를 보고한다.
SQL> SELECT eno 사번, ename 이름, job 업무 FROM emp;
사번 이름 업무
---- --------------- --------
0001 안영희 경영
0201 안영숙 지원
0202 손하늘 지원
.............
.............
수식을 이용한 검색
SQL> SELECT 수식 [as 별명], ...
2 FROM 테이블;
예제 2. 각 사원의 연간 수급하는 급여를 검색한다.
SQL> SELECT eno 사번, ename 이름, sal*12 연간_급여 FROM emp;
사번 이름 연간 급여
---- --------------- ----------
0001 안영희 57600
0201 안영숙 46800
0202 손하늘 42120
.............
.............
예제 3. 별명에 반드시 이중 인용 부호가 필요한 경우를 확인한다.
SQL> SELECT ename 10name FROM emp;
SELECT ename 10name FROM emp
*
1행에 오류:
ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
SQL> SELECT ename "10name" FROM emp;
10name
----------
안영희
안영숙
손하늘
.............
.............
예제 4. 사원의 연봉을 검색한다. (연봉 = 12개월분 급여(sal) + 보너스(comm))
SQL> SELECT eno 사번, ename 이름, sal 급여, comm 보너스, sal*12+comm 연봉
2 FROM emp;
사번 이름 급여 보너스 연봉
---- ----------- -------- ---------- ----------
0001 안영희 4800 0 57600
0201 안영숙 3900 2200 49000
0202 손하늘 3510 980 43100
.............
.............
NULL 연산을 위한 NVL함수의 사용
NVL (컬럼, 치환 값)
예제 5. 사원의 연봉을 검색한다.
SQL> SELECT eno 사번, ename 이름, sal*12+NVL(comm,0) 연봉
2 FROM emp;
사번 이름 연봉
---- --------------- ----------
0001 안영희 57600
0201 안영숙 49000
0202 손하늘 43100
.............
.............
- 덧셈의 항등원은 0 곱셈의 항등원은 1이다.
- 보너스를 챙겨주지는 않았지만 연봉은 띄워야하기때문에 0으로 바꾼것이다.
실습
1. 각 학생의 평균 평점을 검색한다.(별명을 이용)
A) SELECT AVR 평균_평점 FROM STUDENT;
2. 각 과목의 학점수는 검색한다.(별명을 이용)
A) SELECT ST_NUM 학점 FROM COURSE;
3. 각 교수의 지위를 검색한다.(별명을 이용)
A) SELECT ORDERS 지위 FROM PROFESSOR;
4. 급여를 10% 인상했을 때 연간 지급되는 급여를 검색한다.
A) SELECT SAL 평소급여, SAL*1.1 인상급여 FROM EMP;
5. 현재 학생의 평균 평점은 4.0 만점이다. 이를 4.5 만점으로 환산해서 검색한다.
A) SELECT AVR 평균_평점, AVR*1.125 변경평균_평점 FROM STUDENT;
6. 급여가 10% 인상될 경우 각 사원의 연봉을 검색한다.
A) SELECT SAL 평소급여, SAL*1.1 인상급여, SAL*1.1+NVL(COMM,0) 연봉 FROM EMP;
7. 1년 동안 지급되는 급여와 10% 인상되어 1년 동안 지급되는 급여 간에 차액을 검색한다.
A) SELECT SAL 평소급여, SAL*1.1 인상급여, (SAL*12*1.1) - (SAL*12) 차액 FROM EMP;
8. 각 학생들의 평균평점을 4.5 만점으로 환산한 경우 각각 평점의 상승폭은 얼마인지 검색한다.
A) SELECT AVR 평균_평점, AVR*1.125 변경평균_평점, (AVR*1.125) - AVR 상승폭 FROM STUDENT;
연결 연산자의 사용
SQL> SELECT 컬럼 || '리터럴' || ......
2 FROM 테이블;
예제 1. 다양한 방법으로 사원의 이름을 급여 또는 업무와 함께 검색한다.
SQL> SELECT ename||sal 이름_급여
2 FROM emp;
이름_급여
--------------------
안영희4800
안영숙3900
손하늘3510
.............
.............
SQL> SELECT ename||' '||sal 이름_급여
2 FROM emp;
이름_급여
--------------------
안영희 4800
안영숙 3900
손하늘 3510
.............
.............
SQL> SELECT ename||'의 업무는 '||job||'입니다.'
2 FROM emp;
ENAME||'의 업무는'||JOB||'입니다.'
-----------------------------------
안영희의 업무는 경영입니다.
안영숙의 업무는 지원입니다.
손하늘의 업무는 지원입니다.
.............
.............
예제 2. 주의해야할 연결 연산자를 이용
SQL> SELECT ename||' '||sal+100
2 FROM emp;
SELECT ename||' '||sal+100
*
1행에 오류:
ORA-01722: 수치가 부적합합니다
아래 두 문장을 비교해 보자.
(출력의)중복 제거
SQL> SELECT [DISTINCT | ALL] 컬럼, 컬럼, ...
2 FROM 테이블;
예제 3. 직원들의 업무는 어떤 것이 있는지 검색한다.(업무의 종류를 검색한다.)
SQL> SELECT job 업무 FROM emp;
업무
--------
경영
지원
지원
.............
.............
(오라클은 정렬x)
SQL> SELECT DISTINCT job 업무 FROM emp;
업무
--------
회계
개발
지원
.............
.............
실습
1. '____학과인 ____학생의 현재 평점은 __입니다.' 형태로 학생의 정보를 출력한다.
A) SELECT MAJOR||'학과인 '||SNAME||'학생의 현재 평점은 '||AVR||'입니다' FROM STUDENT;
2. '____과목은 ____학점 과목입니다.' 형태로 과목의 정보를 출력한다.
A) SELECT CNAME||'과목은 '||ST_NUM||' 학점과목입니다.' FROM COURSE;
3. '____교수는 ____학과 소속입니다.' 형태로 교수의 정보를 출력한다.
A) SELECT PNAME||'교수는 '||SECTION||' 학과 소속입니다.' FROM PROFESSOR;
4. 학교에는 어떤 학과가 있는지 검색한다.(학생 테이블 기반으로 검색한다.)
A) SELECT DISTINCT MAJOR 학과 FROM STUDENT;
5. 학교에는 어떤 학과가 있는지 검색한다.(교수 테이블 기반으로 검색한다.)
A) SELECT DISTINCT SECTION 학과 FROM PROFESSOR;
6. 교수의 지위는 어떤 것들이 있는지 검색한다.
A) SELECT DISTINCT ORDERS FROM PROFESSOR;
7. '____학생의 4.5 환산 평점은 ____입니다.' 형태로 학생의 환산 평점을 출력한다.
A) SELECT SNAME||'학생의 4.5 환산 평점은 '||AVR*1.125||' 입니다' FROM STUDENT;
8. '____과목의 담당 교수 번호는 ____입니다.' 형태로 과목의 정보를 출력한다.
A) SELECT CNAME||'과목의 담당 교수 번호는 '||PNO||' 입니다' FROM COURSE;
9. 학교에 개설된 과목들은 몇 학점짜리인지 검색한다.
A) SELECT DISTINCT CNAME 과목, ST_NUM 학점 FROM COURSE;
10. 학생들이 수강중인 과목의 과목번호를 검색한다.
A) SELECT DISTINCT CNAME 과목, CNO 과목번호 FROM COURSE;
'데이터베이스' 카테고리의 다른 글
오라클Q02 네트워크 설정 (0) | 2022.11.03 |
---|---|
데이터 베이스 기초4(자기참조 조인, 외부조인) (0) | 2022.11.01 |
데이터 베이스 기초3(SELECT/BETWEEN, IN, 등가조인, 비등가조인) (1) | 2022.10.31 |
데이터베이스 기초2(SELECT/ASC, DESC, WHERE, 관계연산자, LIKE) (0) | 2022.10.27 |
데이터베이스 설치 및 기초 (0) | 2022.10.24 |