1. SELECT 문장을 이용해 원하는 데이터 가져오기
[준비]
oracle 계정에는 관리자계정과, 일반용계정이 있다.
- 관리자 계정 : sys, system
- 일반용 계정 : scott, HR
11g single 설치할 때 dbca할때 sample schema를 체크하면 같이 깔려. (연습용 자료) _ 실제 밖에서는 체크하면 안되.
1. scott 계정으로 접속 (밑에는sys)
$ sqlplus scott/tiger
$ sqlplus / as sysdba
설명) sqlplus는 프로그램 이름이고, 계정/암호 이렇게 로그인한다. (리눅스에서)
SQL> SET sqlprompt "_USER>" : 이렇게치면 어떤계정으로 접속했는지 알 수 있어서 편해.
SYS> @/home/oracle/test_data.sql : 파일 불러오기 (중간에 에러나면 한번더)
........
commit complete
2. 접속 에러
1) 데이터베이스가 종료되어 있어서 연습용 계정으로 접속안될때.
$ sqlplus scott/tiger
ERROR :
ORA-01034 : ORACLE not available
사용자명 입력 : sys/oracle as sysdba : 휴지인스턴스에 접속
SQL> startup : oracle 인스턴스가 시작 - 마운트 - 데이터베이스 열림.
SQL>conn scott/tiger : 관리자계정으로 접속
2) 처음에, 연습용계정에 들어가지 못하게 잠겨 있을 경우.
방법1)
SYS>conn scott/tiger 일반계정으로 접속하면 잠겨있어서 에러뜸
ERROR:
ORA-28000: the account is locked
Warning: You are no longer connected to ORACLE.
>conn sys/oracle as sysdba 관리자계정으로 접속
Connected.
SYS>alter user scott identified by tiger account unlock;
User altered.
SYS>conn scott/tiger
Connected.
SCOTT>
3. 명령어
1) DESC [테이블명] : 특정 테이블에 어떤 칼럼이 있는지 조회. (ROW:행 , collum : 열)
2) SELECT [칼럼명또는표현식]
FROM [테이블명또는 뷰 명]
3) DISTINCT [칼럼명] : 중복된 데이터를 빼고 출력 (반드시 SELECT 키워드 바로 다음에 와야한다.)
(10g R1까지는 정렬을 하고, R2부터는 hash라는 기법을 이용하는데, 입력값이 같으면 출력값이 같고, 입력값이 다르면 출력값도 다르다는 것을 보장해주는 기법이다.)
FROM [테이블명]
ex) SELECT DISTINCT deptno, job :: deptno와 jop 칼럼 두개 다 같이 적용된다.
4) WHERE [원하는조건] : 원하는 데이터만 골라서 조회할때 사용하며,
숫자는 그대로 써도 되지만, 문자와 날짜 조회시 반드시 홑따옴표를 붙여야 하고, 문자조회시에는 반드시 대소문자 구별해야 한다. (날짜는 대소문자 구별 없음)
(1번 그림은 윈도에서 조회. "년도/월/일") (2번그림은 일-월영문-년도)
-> 윈도와 유닉스 계열 사이에 데이터를 옮기는 작업을 할 때 에러가 나므로 조심해야 한다.
[Tip] Column Alias(속성 별칭) |
alias는 SELECT 절에 expression을 사용할 때 유용하다. column명이나 expression 바로 뒤에 명시하거나 column명과 alias 사이에 AS를 끼워 넣어 사용한다 Double Quotation (" ")을 사용하여 alias내에 공백이나 특수문자를 포함할 수 있다.
SELECT (salary + commission_pct) 실제 급여 FROM employees; => 별칭에 공백문자 때문에 오류 발생할 수 있다.
SELECT (salary + commission_pct) "실제 급여" FROM employees; => 헤딩이 실급여라는 문자열로 출력이 됨
SELECT (salary + commission_pct) AS "실제 급여" FROM employees; => AS를 넣어서 사용 가능
|
4. 칼럼길이 조정 및 TIP
1) 데이터가 숫자일 경우
COL empno FOR 9999 : 9는 숫자 한 자리를 의미.
2) 데이터가 문자일 경우
COL ename FOR a8 : 8byte까지 들어가도록. (주의! 숫자와 같이 섞인 900730*******도 문자로 생각해야되)
3) 한 화면에 출력 가능한 줄 길이 설정 (가로 길이 설정)
SET LINE 200 : 한 화면을 가로로 200 바이트까지 되게 함.
4) 한 페이지에 출력 가능한 줄 수 설정
SET PAGES 50 : 한 페이지에 50줄까지 출력.
5) ed : 마지막에 쓴 쿼리가 vi창으로 열림.
6) show line : 현재 출력가능한 줄 수 보여줌.
7) show page : 현재 페이지 사이즈 보여줌.
5. 출력하기.
* 홑따옴표 1개를 출력하기 위해 2개를 사용해야 한다. (표현식 또는 리터럴상수 또는 리터럴문자라고함.-> '')
* 별명을 줄 때 공백이나 특수문자, 대소문자 구분이 필요할 경우에는 반드시 "(쌍따옴표)로 감싸줘야 한다.
* % : 글자수 제한 없고, 어떤 글자가 와도 상관 없음 (0개 이상)
* _ : 글자수 한글자를 의미. (ex. WHERE HIREDATE LIKE '___12%' :: 입사일이 12월 달인 사람들( 80/12/17)
* %나 _를 가장 먼저 쓰면 절대 안된다.
* & : 사용자에게 입력받음
6. 연산자
1) 연결연산자 : ||
2) 다양한 연산자 (where 명령어와 함께 쓰임)
연산자 종류 |
설 명 |
= |
같은 조건 검색 |
!= , <> |
같지 않은 조건 검색 |
> |
큰 조건 |
>= |
크거나 같은 조건 |
< |
작은 조건 |
<= |
작거나 같은 조건 |
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은 작은 값을 앞에, 큰 값을 뒤에 쓰고, 두 값을 모두 포함하는 결과를 출력한다.
* 숫자의 경우, 특정 구간의 값을 검색할 때, 가급적 BETWWEN연산자 쓰지 않고 비교연산자(>,<,>=,..) 를 쓴다.
* BETWEEN연산자에서 한글은 시작글자만 포함이고, 끝글자는 제외한다.
* null과 N/A는 다르다. null은 모를때. N/A는 not available.
* null은 '=' 연산자를 쓰지 않는다. Is NULL , Is not NULL
3) 집합 연산자 (두 개의 쿼리의 칼람 결과가 다르거나 데이터형이 다르면 에러가 발생한다.)
연산자 종류 |
내 용 |
UNION |
두 집합의 결과를 합쳐서 출력. (중복 값 제거) (정렬함) |
UNION ALL |
두 집합의 결과를 합쳐서 출력. (중복 값 포함 ALL) (정렬안함) |
INTERSECT |
두 집합의 교집합, 결과를 출력. (정렬함) |
MINUS |
두 집합의 차집합 결과를 출력. 쿼리 순서 중요 |
ex)
7. 정렬하기.
* ORDER BY ASC : 오름차순 정리 (기본값) (ORDER BY) (가나다순)
* ORDER BY DESC : 내림차순 정리
* SELECT ENAME, SAL, HIREDATE
블라블라 ORDER BY 2,1 :: 이렇게 적으면 SAL순으로 먼저 정렬 한후, 동일한 SAL값은 ENAME으로 한번 더 정렬
* ORDER BY는 최대한 쓰지 말것!!
* 면접tip) order by 절을 쓰지 않고, 정렬하는법 -> index이용해서 처리.