C#,Delphi,Oracle,MSSQL 개발자블로그
[Oracle/기본]1. 기본적인 SQL문장 작성. 본문
● SQL의 SELECT 문장의 성능
- Selection : 질의에 대해 리턴하고자 하는 테이블의 행을 선택.
- Projection : 질의에 대해 리턴하고자 하는 테이블의 열을 선택.
- Join : 공유 테이블의 양쪽의 열에 대해 링크를 생성하여 다른 테이블에 저장되어 있는 데이터를 가져옴.
● 기본적인 SELECT 문장.
SELECT [DISTINCT] {*, COLUMN [ALIAS], ...}
FROM TABLES
★ keyword, clause, statement 란?
1. keyword : 독립적인 SQL 요소
ex) SELECT 와 FROM
2. clause : SQL 문장의 한 부분
ex) SELECT empno, ename, ...
3. statement : 둘 이상의 clauses의 조합
ex) SELECT * FROM emp
- 일반적으로 keyword는 대문자로, 다른 모든단어(테이블 이름, 열 이름 등)은 소문자로 입력한다.
● 디폴트 열 헤딩
- 좌측 : 날짜, 문자
- 우측 : 숫자
- 디폴트 디스플레이 : 대문자
● 산술연산자 (+, -, *, / )
FROM 절을 제외한 SQL문장에서 산술 연산자를 사용할 수 있다.
ex) SELECT ename, sal, sal+300
FROM emp;
● Null 값 정의
Null은 이용할 수 없거나, 지정되지 않았거나, 알 수 없거나 또는 적용할 수 없는 값이다.
Null은 숫자 0이나 공백과는 다르다.
0은 숫자이며, 공백은 문자이다.
● 산술 표현식에서의 Null 값
Null값을 포함하는 산술 표현식은 Null로 계산된다. (산술 표현식에서 어떤 열 값이 null이면 결과는 null 이다.)
예를들면, 0으로 나누기를 시도하면 에러가 발생하지만, Null로 숫자를 나누면 결과는 Null 또는 Unknown이다.
● 열 별칭(Alias) 사용
ex) SELECT ename AS name
FROM emp
SELECT ename "Name" -> Alias에 특수문자(#, $ 같은..) 또는 대소문자를 포함할때 사용.
FROM emp
SELECT ename name
FROM emp
● 연결연산자. ( || )
두 개의 열을 연결하여 보여준다.
ex) SELECT ename||job AS "Employees"
FROM emp;
-> 별칭이름앞의 AS 키워드는 SELECT 절을 보다 읽기 쉽게 한다.
● 리터럴(Literal)문자 스트링 (')
ex) ename 은 KING이고, job은 PRESIDENT 일 때,
SELECT ename ||' '||'is a'||' '||job
FROM emp;
-> KING is a PRESIDENT
ex) ename 은 KING이고, sal은 5000일 때,
SELECT ename || ': '||'1'||' Month salary = '||sal Monthly
FROM emp;
-> KING: 1 Month salary = 5000
● 중복 행 제거 (DISTINCT 와 GROUP BY 의 차이)
* 참고 : http://intomysql.blogspot.kr/2011/01/distinct-group-by.html
- DISTINCT : 주로 Unique한 컬럼이나 로우를 조회하는 경우 사용.
- GROUP BY : 데이터를 그룹핑해서 그 결과를 가져오는 경우.
SELECT DISTINCT fd1 = SELECT fd1
FROM tab; FROM tab
GROUP BY fd1
SELECT DISTINCT fd1, fd2 = SELECT fd1, fd2
FROM tab; FROM tab
GROUP BY fd1, fd2
DISTINCT와 GROUP BY 는 동일한 코드를 사용한다. 하지만,
DISTINCT는 정렬된 결과가 아니지만, GROUP BY는 정렬된 결과를 보내준다.
★ DISTINCT와 GROUP BY의 고유의 기능.
- DISTINCT
SELECT COUNT(DISTINCT fd1)
FROM tab;
: 중복 제거한 것을 count하는 경우.
- GROUP BY
SELECT fd1, MIN(fd2), MAX(fd2)
FROM tab
GROUP BY fd1;
: 집합함수가 필요한 경우에는 GROUP BY를 사용해야 한다.
<<주의사항>>
가끔 어떤 사용자는 DISTINCT가 마치 함수인 것처럼 (괄호를 사용하여) 아래와 같이 사용을 하는데 만약 fd1 컬럼은 unique값,
fd2 는 전체 값을 원한다면 절대 그 결과를 얻을 수 없다.
☞ DISTINCT 키워드는 괄호를 사용하여 함수처럼 이용하면 안된다.
SELECT DISTINCT(fd1), fd2 FROM tab;
SELECT 문장에 DISTINCT라는 키워드가 있으면, SQL은 SELECT 되는 모든 컬럼(로우) 들에 대해서 DISTINCT를 적용해서 결과를 보여주게
된다.
위와 같은 요건을 처리하기 위해서도 아래와 같이 GROUP BY 로만 해결할 수 있다.
SELECT fd1, fd2
FROM tab
GROUP BY fd1;
: 두 개 이상의 컬럼 중 한가지만 중복 제거 하고 싶은 경우 GROUP BY 사용.
● 테이블 구조 디스플레이
DESCRIBE(DESC) 테이블명
'Programming > Oracle 공부' 카테고리의 다른 글
[Oracle/기본]5. 그룹 함수를 사용한 데이터 집계 (2) | 2017.05.22 |
---|---|
[Oracle/기본]4. 다중 테이블로부터 데이터 디스플레이 (0) | 2017.05.22 |
[Oracle/기본]3. 단일 행 함수 (0) | 2017.05.19 |
[Oracle/기본]2. 데이터 제한과 정렬 (0) | 2017.05.15 |
[Oracle/기본]Oracle 개론(소개) (1) | 2017.05.15 |