본문
실습을 시작하기 전에…
▶ DB 연습용 계정인 SCOTT로 접속하기
$ sqlplus scott/tiger (대소문자 구분)
Connected to an idle instance => 이 메시지가 나오면 DB가 종료되어 있다는 의미
$ sqlplus / as sysdba
…
Connected to an idle instance
SQL> startup
…
Database opend.
SQL> conn scott/ tiger
Connected.
▶ 현재 접속중인 사용자 확인
SQL> show user;
USER is "SCOTT"
▶ 프롬프트을 현재 접속한 계정으로 바꾸기
SQL> set sqlprompt "_USER> "
SCOTT>
※ /home/oracle/login.sql 파일에 set sqlprompt "_USER> "을 등록해 두면 sqlplus가 실행할 때마다 자동으로 반영된다.
▶ test_data.sql 스크립트 가져오기
SCOTT> @/home/oracle/test_data.sql
▶ 칼럼 길이 조정하는 방법
- 데이터가 숫자일 경우 : COL [칼럼명] FOR 9999 (숫자 4자리)
- 데이터가 문자일 경우 : COL [칼럼명] FOR a10 (10바이트)
- 페이지 조절 : SET PAGESIZE 50 (한 화면에 최대 50줄)
- 가로 길이 조절 : SET LINESIZE 50
1. DESC 명령어
- 특정 테이블에 어떤 칼럼이 있는지 조회하는 명령어
SCOTT> DESC 테이블명 ;
2. SELECT
- 데이터를 조회하는 명렁어
문법 : SELECT [칼럼명 또는 표현식] FROM [ 테이블명, 뷰명] ;
(1) 모든 칼럼 조회하기
> SELECT * FROM [테이블명] ;
(2) 원하는 칼럼 조회하기
> SELECT [칼럼명], [칼럼명] FROM [테이블명] ;
(3) 표현식을 사용하여 출력하기
> SELECT [칼럼명], '리터럴 상수(문자)' FROM [테이블명] ;
SCOTT> select name, '교수님 배고파요' from professor;
NAME '교수님배고파요
---------- ---------------
조인형 교수님 배고파요
박승곤 교수님 배고파요
(4) 칼럼 별칭(Column Alias)을 사용하여 출력하기
> SELECT [칼럼명] "별칭", [칼럼명] "별칭" FROM [테이블명] ;
SCOTT> SELECT studno "학번", profno "지도교수번호"FROM student;
학번 지도교수번호
---------- ---------------
9411 1001
9412 2001
(5) DISTINIC - 중복된 값을 제거하고 출력하기
> SELECT DISTINIC [칼럼명], [칼럼명] FROM [테이블명] ;
※ 반드시 SELECT 다음에 와야 한다.
※ 1개의 칼럼에만 적어도 모든 칼럼에 적용된다. 이로 인해 뜻하지 않은 성능 저하가 발생 할 수 있다.
(6) 연결 연산자
- 연결 연산자는 바 기호를 두번(||) 사용
(7) 산술 연산자
- 산술 연산 : +, -, *, /
(8) WHERE - 원하는 조건만 조회하기
> SELECT [칼럼명] FROM [테이블명] WHERE [원하는 조건] ;
SCOTT> SELECT ename, empno, sal from emp
2 where ename = 'SCOTT' ;
ENAME EMPNO SAL
---------- ---------- ----------
SCOTT 7788 3000
※ WHERE절에 조건으로 주어지는 것이 숫자일 경우는 그냥 써도 되지만 문자나 날짜를 조회할 경우 반드시 홑따옴표(')를 해주어야 한다.
※ 문자의 경우 대소문자를 구분한다.
(9) 다양한 연산자
연산자 종류 |
설 명 |
= |
같은 조건 |
!=, <> |
같지 않은 조건 |
> |
큰 조건 (초과) |
>= |
크거나 같은 조건 (이상) |
< |
작은 조건 (미만) |
<= |
작거나 같은 조건 (이하) |
BETWEEN a AND b |
A와 B 사이에 있는 범위 값 |
IN(a,b,c) |
A이거나 B이거나 C인 조건 |
Like |
특정 패턴을 가진 조건 |
Is Null / Is Not Null |
Null값 검색 / Null이 아닌 값 검색 |
A AND B |
A와 B를 모두 만족하는 값 |
A OR B |
A 또는 B 둘 중 한가지만 만족하는 값 |
NOT A |
A가 아닌 모든 조건 |
- BETWEEN a AND b
: 성능 측면에서 보면 BETWEEN 보다 비교 연산자를 사용하는 것을 권장.
오라클 내부적으로 비교 연산자로 변경해서 작업을 수행.
※ 작은 값이 먼저 오고 큰 값이 나중에 와야한다.
※ a, b값을 다 포함하여 출력. 한글의 경우 a 포함, b 미포함
- LIKE 연산자
· % : 글자수 제한 없고 어떤 글자가 와도 상관 없다.
· _(Underscore) : 글자수는 한글자만 올 수 있고 어떤 글자가 와도 상관 없다.
ex) 성은 김, 마지막 글자는 호를 검색 : WHERE name LIKE '김_호' ;
※ 문자에 '%'나 '_'가 있을 경우에는 Escape문자로 표시 주어야 한다.
(10) ORDER BY - 출력 결과 정렬하기
- 오름차순 : ASC (기본값) , 내림차순 : DESC
- 한 글: 가 , 나 , 다 , 라 …..
- 영 어: A , B , C , D……
- 숫 자: 1 , 2 , 3 , 4……
- 날 짜: 예전 날짜부터 시작해서 최근 날짜로 정렬
※ ORDER BY절은 SQL의 가장 마지막에 적어야 한다. 날짜는 최근날짜가 더 크다는 것을 기억!
(11) 집합 연산자(Set Operator)
- 집합연산자 사용 주의 사항
1. 두 집합의 SELECT 절에 오는 칼럼의 개수가 동일해야 한다.
2. 두 집합의 SELECT 절에 오는 칼럼의 데이터형이 동일해야 한다.
3. 두 집합의 칼럼명은 달라도 상관 없다.
연산자 종류 |
내 용 |
UNION |
두 집합을 더해서 결과를 출력 , 중복값 제거하고 정렬 |
UNION ALL |
두 집합을 더해서 결과를 출력 , 중복값 제거 안하고 정렬 안함 |
INTERSECT |
두 집합의 교집합 결과를 출력. 정렬 |
MINUS |
두 집합의 차집합 결과를 출력. 정렬. 쿼리의 순서 중요 |
SELECT 절의 컬럼 개수가 다를 경우 발생하는 에러
SCOTT> SELECT studno, name FROM student
2 UNION
3 SELECT profno FROM professor;
SELECT studno, name FROM student
*
ERROR at line 1:
ORA-01789: query block has incorrect number of result columns
SELECT 절의 컬럼의 데이터 타입이 다를 경우 발생하는 에러
SCOTT> SELECT studno, name FROM student
2 UNION
3 SELECT name, profno FROM professor;
SELECT studno, name FROM student
*
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression
서진수,『오라클 SQL과 PL/SQL』, 생능출판사, 2012, pp.14-50
'Oracle > Oracle_SQL' 카테고리의 다른 글
[4장] JOIN(조인) (0) | 2014.10.22 |
---|---|
[3장] SQL 복수 행 함수 (그룹 함수) (0) | 2014.10.22 |
[2장] SQL 단일 행 함수(2) - 숫자함수, 날짜함수, 형변환함수, 일반 함수 (0) | 2014.10.15 |
[2장] SQL 단일 행 함수(1) - 문자함수, 정규식 (0) | 2014.10.15 |
오라클 SQL과 PL/SQL / 서진수 지음 (0) | 2014.10.15 |