@ Synonym 이란?
: 다른 유저도 자신의 테이블을 Synonym으로 지정한 이름으로 사용할 수 있게 해주는 기능
grant로 다른유저에게 테이블 사용권한을 준다고 하더라도 그 유저는 유저명.테이블명 이런식으로 자신의
테이블에 접근해야한다. 이런 번거로움을 피하기위해 Synonym으로 선언하면 다른 유저도 자신의 테이블에
쉽게 접근 가능하다.
* private synonym : 특정 스키마(schema)에서 생성되고 단지 그것을 갖는 스키마에 의해 접근할 수 있음.
* public synonym : public schema에 의해 소유되고 데이터베이스내의 모든 schema가 참조할 수 있음.
디폴트는 private synonym이다.
Synonym의 조회
* all_synonyms : 모든 synonym 정보
* user_synonyms : 사용자가 만든 synonym 정보
Synonym의 삭제
@ in 조건절 작성~~
만약 이런 쿼리문이 있다고 가정하자
select * from emp where dept='30' or dept='40' dept='50' or dept='60'
이 쿼리문은 IN 조건절을 이용해서 간단히 표현할 수 있다.
select * from emp where dept in ('30','40','50','60')
즉 공통되는 칼럼의 여러 조건들을 묶어서 한꺼번에 표현해 줄 수 있는 조건이라 할 수 있다.
@ UNION
다음 지식에서 퍼옴.
TABLE_A TABLE_B
----------------- -----------------
FLD1 FLD1
----------------- -----------------
1 5
2 3
3 1
----------------- -----------------
이 때...
SELECT FLD1 FROM TABLE_A
UNION ALL
SELECT FLD1 FROM TABLE_B
하면 결과는
-----------------
FLD1
-----------------
1
2
3
5
3
1
-----------------
이 됩니다. 두 쿼리의 결과를 단순히 합친 것이죠.
그런데
SELECT FLD1 FROM TABLE_A
UNION
SELECT FLD1 FROM TABLE_B
하면 결과는
-----------------
FLD1
-----------------
1
2
3
5
-----------------
이 됩니다. 두 테이블의 결과를 합치되, 중복된 값을 제외하죠.
이렇게 중복을 제거하기 위해 불가피하게 '소트'를 하게 됩니다.
따라서 자료가 많거나 Index가 되어 있지 않은 필드를 대상으로 하게 되면
쿼리 시간이 길어질 수 있습니다.