오라클         ANSI

WHERE        ON

AND           AND

OR               OR

JOIN     ,                JOIN

 =                 =

BETWEEN         BETWEEN




기본 : 구조조회(DESC)

1

2

3

4

5

6

DESC TABLE;

이름      널 유형          

------- - ----------- 

WEEK      VARCHAR2(1

DAY       VARCHAR2(2

NUM_DAY   VARCHAR2(2

cs

기본 : 해당 테이블 내의 컬럼을 조회하는 명령어 

1

SELECT 컬럼명 ||* FROM 테이블명;

cs

기본 : SELECT 컬럼 FROM 테이블 WHERE 컬럼 조건식 값

WHERE 다중 조건문 사용시


대한민국이라는 큰 키워드로 먼저 조회하기보다는 서울이라는 데이터를 먼저 조회하여 양을 줄여가며 

조회하는 것이 DATABASE에 효율 적이다.


조건문 (WHERE)

1

2

3

4

 select 구문

 select 컬럼명 ||* from 테이블명 WHERE 컬럼 연산자 (+, -, >, <) 레코드;

 [Where 조건문 (레코드 선택)]   => 없으면 모든 레코드 조회

                          => 있으면 조건문 만족하는 레코드 조회

cs


확장 : WHERE 컬럼 BETWEEN A AND(OR) B

WHERE문을 사용할 때 2가지의 값을 충족하는 데이터를 분류할 때 사용

1

SELECT 컬럼 FROM 테이블 WHERE 컬럼 BETWEEN A AND B

cs

1

2

-- 관계 연산자 변경

select name, weight from student where weight >=60 and weight <=80;

cs

확장2 : WHERE 컬럼 IN (A....)

컬럼 내부에 A를 포함하는 컬럼을 따로 출력 한다.

1

2

3

IN 연산자

 

SELECT 컬럼 FROM 테이블 WHERE 컬럼 IN (A,B)

cs

확장3 : WHERE 컬럼 LIKE '값'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--<< like 연산자 >>
 -- % : 0개 이상
 -- _ : 문자 1개 (무엇이 들어와도 관계 X)
 -- 학생 중에 이름이 성이 김씨인 학생의 이름과 부서코드 조회
 
 SELECT 컬럼 FROM 테이블 WHERE 컬럼 like '김%';
김XXXXXXXX
 
 SELECT 컬럼 FROM 테이블 WHERE 컬럼 like '%김%';
XXXXXX김XXXXXXX
가운데 위치 관계 없음 
 
SELECT 컬럼 FROM 테이블 WHERE 컬럼 like '%김';
XXXXXXX김 
 
SELECT 컬럼 FROM 테이블 WHERE 컬럼 LIKE '____'
언더바  갯수 4개 = 글자 4개짜리 모두를 가져온다.
EX ) _ 6개는 6자리 글자를 가져온다. 
 
SELECT 컬럼 FROM 테이블 WHERE 컬럼 NOT LIKE '____'
언더바 갯수만큼의 글자가 아닌 값을 가져온다. 
 
SELECT 컬럼 FROM 테이블 WHERE 컬럼 NOT LIKE '%김'
김으로 끝나지 않는 값들을 가져온다.
cs


확장4 : WHERE 컬럼 IS NOT NULL OR IN NULL;


1
2
3
4
5
6
SELECT 컬럼 FROM 테이블 WHERE 컬럼 IS NULL;
NULL = 아무 값도 없다.
컬럼의 값이 널이면 컬럼의 내용을  출력
 
SELECT 컬럼 FROM 테이블 WHERE 컬럼 IS NOT NULL;
컬럼의 값이 널이아니면 출력
cs

기본 : 더미 테이블 (ORACLE 일회용 테이블) = 바로 출력할 때 사용

1

select sysdate from dual; 

cs

기본 : 컬럼에 문자를 작성할 때는 콜론(;) 오른쪽에 있는 리터널 ( ' 내용 ' ) 작성

1

select empno, ename, 'Very Good~' from emp;

cs

기본 : 컬럼에 별명(AliAS) 주기

1

2

3

4

5

6

--1

select name 교수이름, profno 교수번호 from PROFESSOR;

--2

select name "교수 이름", profno "교수 번호" from PROFESSOR;

--3

select name as "교수 이름", profno as 교수번호 from PROFESSOR;

cs



기본 : 문자을 연결해서 작성할 때

1

2

3

4

5

6

7

-- 연결 연산자 || : 두개의 컬럼을 연결하는 연산자

 

-- 교수 테이블에서 이름과 직급을 연결하여 교수 별명으로 모든 레코드를 출력하자;

 

select * from PROFESSOR;

 

select name || position 교수 from PROFESSOR;

cs

결과 : 이름포지션 <= 이렇게 붙어서 출력 ( || (쉬프트 + 역슬래쉬) 연결고리 )


기본 : 중복 제거(DISTINCT)

1

2

3

4

5

6

7

-- distinct : 중복 제거하여 조회하기 성능이 안좋다


--            컬럼의 제일 앞에 한번만 사용이 가능

 

-- 교수가 속한 부서코드 조회하기 // 

 

select distinct deptno from PROFESSOR;

cs

기본 : 정렬 (ORDER BY 컬럼 ASC OR DESC) 


SELECT 컬럼 FROM 테이블 ORDER BY DESC(내림/큰) OR ASC(DEFAULT)(오름/작은)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 컬럼 FROM 테이블 ORDER BY 컬럼(기준) ASC(DEFAULT 기본값) (오름/작은순) ;
 
SELECT 컬럼 FROM 테이블 ORDER BY 컬럼(기준) DESC(내림/작은순) ;
 
컬럼을 기준으로 오름차순 또는 내림차순 정렬 가능
 
SELECT 컬럼 FROM 테이블 ORDER BY A,B,C,D(기준) DESC(내림/작은순) ;
다중 컬럼 정렬도 가능
 
SELECT 컬럼1, 컬럼2, 컬럼3  FROM 테이블 ORDER BY 1,2,3,4(기준) DESC(내림/작은순) ;
SELECT 뒤에있는 컬럼1 = , 컬럼2 = 2, 컬럼3 = 식으로 컬럼 위치 값으로도 가능
 
SELECT 컬럼 '바보', 컬럼2 '멍충이' FROM 테이블 ORDER BY 바보,멍충이(기준) DESC(내림/작은순) ;
ALIAS (별명) 으로도 정렬 가능
 

cs

총 정리


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1. desc : table 구조 조회. SQL&PLUS(PLSQL)
2. select 컬럼명|| * from 테이블명
    where 조건문 : 행(row, 레코드) 선택기준 조건
    order by : 정렬, asc(오름차순), desc(내림차순)
              별명사용가능, 조회된 컬럼의 순서가능
3. || 연결 연산자 : 두개의 컬럼을 연결해서 조회
                   리터널 컬럼과도 연결가능
4. distinct : 중복제거.
              조회된 컬럼의 값을 한번만 출력
               컬럼조회시 제일 앞에 한번만 사용 가능 성능이 안좋다.
5. 산술연산자 : +,-,*,/ : 컬럼의 연산에 사용가능
              where 조건문에서 사용 가능
6. between 연산자 : where 컬럼명 between a and b
7. in 연산자 : where 컬럼명 in (값1, 값2, 값3...)
             값1 또는 값2 또는 값3
8. like 연산자 : % : 0개 이상
                _ : 1개. 자리수
9. is null, is not null
              : null 값은 값이 없는 경우. 연산의 대상이 아님
10. order by : 정렬
               ASC DESC
11. 별명 지정 가능 : " " , as , 문자바로
cs


기본 : 합집합연산자 UNION  (중복 절대 불가)

SELECT MATH FROM STUDENT WHERE MATH = '10'

UNION

SELECT ENG FROM STUDENT WHERE MATH = '20'

1
2
3
4
5
6
7
8
-- 집합 연산자
-- union      : 합집합(중복 제거)
 
SELECT 컬럼 FROM 테이블 WHERE 컬럼 연산자 값
UNION
SELECT 컬럼2 FROM 테이블 WHERE 컬럼 연산자 값;
 
컬럼의 수와 자료형(VARCHAR,???)등이 동일 해야 합할 수 있다.
cs


기본 : 합집합연산자 UNION  (중복 가능)

SELECT MATH FROM STUDENT WHERE MATH = '10'

UNIONALL

SELECT ENG FROM STUDENT WHERE MATH = '20'

1
2
3
4
5
6
7
8
-- 집합 연산자
-- UNIONALL      : 합집합(중복 가능)
 
SELECT 컬럼 FROM 테이블 WHERE 컬럼 연산자 값
UNIONALL
SELECT 컬럼2 FROM 테이블 WHERE 컬럼 연산자 값;
 
컬럼의 수와 자료형(VARCHAR,???)등이 동일 해야 합할 수 있다.
cs



기본 : 교집합연산자 INTERSECT  

SELECT MATH FROM STUDENT WHERE LIKE = '김%'

INTERSECT

SELECT ENG FROM STUDENT WHERE LIKE = '%현'


1
2
3
4
5
6
7
8
-- 집합 연산자
-- INTERSECT      : 교집합
 
SELECT 컬럼 FROM 테이블 WHERE 컬럼 연산자 값
INTERSECT
SELECT 컬럼2 FROM 테이블 WHERE 컬럼 연산자 값;
 
A와 B 둘다 충족하는 값
cs



기본 : 차집합연산자 MINUS

SELECT MATH FROM STUDENT

MINUS

SELECT ENG FROM STUDENT WHERE LIKE = '%현'


 현으로 끝나는 사람을  A에서 뺀다.

1
2
3
4
5
6
7
8
9
10
-- 집합 연산자
-- MINUS      : 차집합
 
SELECT 컬럼 FROM 테이블 WHERE 컬럼 연산자 값
MINUS
SELECT 컬럼2 FROM 테이블 WHERE 컬럼 연산자 값;
 
A에 있는 값을 B의 값으로 빼고 출력한다.
SELECT 컬럼 FROM 테이블 WHERE 컬럼 != '값'
이랑 동일함.
cs

===================조인부터 =======================


CROSS JOIN 

결과 : EX) 테이블 1번(컬럼5개) * 테이블 2번(컬럼 10개) = 테이블(컬럼50개)

속도가 매우 느려 효율성이 떨어진다.

1
2
3
4
5
6
7
8
9
10
11
Cross join (기본형 조인)
 
SELECT 컬럼 FROM 테이블1번;
SELECT 컬럼 FROM 테이블2번;     1번과 2번을 조인
 
오라클 방식(SQLPLUS)
SELECT 컬럼 FROM 테이블1번,테이블2번;
 
공통(ANSI)
SELECT 컬럼 FROM 테이블1번 CROSS JOIN 테이블2번;
 
cs


EQUI JOIN (등가 조인) 동일 자료형태 조인


결과 : EX) 테이블 1번과 2번의 ID 컬럼이 하나의 형태로 출력


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
등가 조인 (EQUI JOIN)
 
2개의 테이블을 참조할 때 동일한 자료형태의 컬럼을 기준으로 잡아 하나의 형태로 출력함
 
A와 B 테이블에 각각 ID 컬럼이 존재한다.
EX)
SELECT 컬럼(ID) FROM TABLE(A);
SELECT 컬럼(ID) FROM TABLE(B);
 
오라클
SELECT 컬럼(ID) FROM TABLE(A,B) 
WHERE A.ID = B.ID;  
 
ANSI
SELECT 컬럼(ID) FROM A JOIN B
ON A.ID = B.ID;            (WHERE 대신 ON)
=> A와 B의 테이블이 동일 한 자료의 테이블 이기 때문에 보기 편하게 정렬 가능하다.
 
cs


NON EQUI JOIN (비등가 조인) 동일 자료형태 + 범위 조인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
비등가 조인(NON EQUI JOIN)
 
EX) A,B테이블에서 1~100까지의 해당하는 자료를 찾으시오
 
SELECT 컬럼 FROM A;
SELECT 컬럼 FROM B;
 
오라클
 
SELECT 컬럼 FROM A ,B
WHERE A.ID BETWEEN 1 AND B;
 
ANSI
SELECT 컬럼 FROM A JOIN B
ON A.ID BETWEEN 1 AND B;
형태이다 .
 
등가 조인과 동일하게 ID라는 컬럼으로 합쳐지지만 
비등가 조인은 범위로 한다.
 
 
cs


OUTER JOIN ( 아웃터 조인 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
OUTER JOIN ( 아웃터 조인 )
 
두개의 조인 조건에 충족하지 않더라도 모든정보를 출력해준다 ( 충족하지 않는 값은 NULL 로 표시됨)
 
 
SELECT 컬럼(ID) FROM 테이블(A);
SELECT 컬럼(ID) FROM 테이블(B);
 
SELECT 컬럼(ID) FROM 테이블(A,B)
WHERE A.ID = B.ID;                 기본 EQUI 조인이지만 값을 충족하지 않는다면 NULL 처리 되어 출력 불가하다.
 
오라클 방식
 
=> WHERE A.ID = B.ID(+)            B.ID의 모든 값을 출력(겹치지 않는 값은 NULL 처리) LEFT OUTER JOIN (항상 반대)
 
=> WHERE (+)A.ID = B.ID            A.ID의 모든 값을 출력(겹치지 않는 값은 NULL 처리) RIGHT OUTER JOIN (항상 반대)
 
 
=> WHERE A.ID(+= B.ID            
            
    UNION                        A.ID와 B.ID의 모든 값을 출력(겹치지 않는 값은 NULL 처리) FULL OUTER JOIN (UNION밖에 기능이 없다).
        
=> WHERE A.ID = B.ID(+);            
 
ANSI 방식
 
SELECT 컬럼(ID) FROM 테이블(A);
SELECT 컬럼(ID) FROM 테이블(B);
 
 
SELECT 컬럼(ID) FROM 테이블(A LEFT OUTER JOIN B)        B.ID의 모든 값을 출력(겹치지 않는 값은 NULL 처리) LEFT OUTER JOIN (항상 반대)
ON A.ID = B.ID
 
SELECT 컬럼(ID) FROM 테이블(A RIGHT OUTER JOIN B)    A.ID의 모든 값을 출력(겹치지 않는 값은 NULL 처리) RIGHT OUTER JOIN (항상 반대)
ON A.ID = B.ID
 
SELECT 컬럼(ID) FROM 테이블(A FULL OUTER JOIN B)        A.ID와 B.ID의 모든 값을 출력(겹치지 않는 값은 NULL 처리) FULL OUTER JOIN 
ON A.ID = B.ID
 
 
cs




SELF JOIN ( 셀프 조인 )

EQUI JOIN과 방식은 동일

단 양쪽이 한개의 테이블로 사용되기 때문에 별명(ALIAS) 지정 필수

1
2
3
4
5
6
7
8
9
10
11
SELF JOIN (셀프 조인)
 
SELECT 컬럼(ID) FROM TABLE(A);
 
SELECT 컬럼(ID) FROM TABLE(B);
 
SELECT 컬럼(ID) FORM TABLE(A A1,B B1);
WHERE A1.ID = B1.ID(+);
EX) 사용예 자신의 상위부서를 출력하라
 
 
cs


SUB QUERY ( 서브 쿼리)


  단일 행 서브쿼리 : 서브쿼리의 결과가 1개 레코드인 경우, 보통 컬럼도 1개


          사용가능 연산자 : =,>,<


        다중 행 서브쿼리 : 서브쿼리의 결과가 여러개 레코드 인 경우 


                         =, >, < ... 연산자 사용불가


          사용가능 연산자 : in, any, all



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SUB QUERY ( 서브 쿼리)
 
SELECT 컬럼 FROM TABLE(A);
 
SELECT 컬럼 FROM TABLE(A)
 
WHERE 컬럼 ><= (SELECT 컬럼 FROM TABLE(B);
 
A의 컬럼과  B에서 조회된 컬럼을 비교하여 결과를 출력한다.
 
EX)
 
SELECT WEIGHT FROM TABLE(A)
 
WHERE 컬럼 < SELECT 컬럼 FROM TABLE(B) WHERE NAME ='홍길동';
 
=> '홍길동' 보다 작은 사람들의 
 
 
cs






Posted by 드리데이
Comments
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-- Select Column FROM tabs(조회할 테이블);
 
-- Select     : 조회
 
-- Column     : 행(가로줄 제목 부분)
 
-- FROM        : 참조할 테이블을 가리킴
 
-- tabs        : 데이터베이스 - 테이블 순에서 테이블을 가리킴 ( 저장한 파일이라는 개념)
 
select table_name from tabs;
 
--sysdate : 시스템의 현재시간 // dual = 더미테이블(일회용 테이블)
select sysdate from dual;
 
-- select sysdate시 출력되는 시간의 형식 변경 ( ex) 2017-04-05)
alter SESSION set nls_date_format='YYYY-MM-DD';
 
-- desc emp 테이블의 형식과 목록을 출력 
desc emp ;
 
-- 문제 : emp 테이블의 모든 컬럼과 모든 row를 조회하기
select * from emp;
 
-- 문제2 : emp 테이블의 이름 (ename) 번호(empno), 부서코드(deptno)
 
select Ename,empno,deptno from emp;
 
 
cs


'Database > 오라클 Oracle' 카테고리의 다른 글

Oracle 오라클 약어(명령어)  (0) 2017.04.05
Posted by 드리데이
Comments