SQL기초 중 다시 보고싶은 내용만 정리.
데이터타입
- 성별을 남 : 0, 여 : 1로 표현할 경우 데이터타입은 숫자타입인가 문자타입인가?
: 산술연산이 들어가지 않으므로 '숫자형의 문자타입'
- 급여, 점수 등 산술연산이 들어갈 가능성이높은 컬럼은 숫자타입.
ALIAS
- SELECT에서 컬럼에 ALIAS를 사용하면 ORDER BY 절에서 ALIAS를 이용해 접근이 가능하다.
- ORDER BY 외에 HAVING절 등에서는 ALIAS를 통한 접근이 불가능하다.
(내부적으로 FROM, GROUP BY, HAVING절 등이 먼저 실행되고 이후에 SELECT, ORDER BY 순으로 실행되므로
컬럼의 ALIAS는 ORDER BY에서만 사용 가능하다.)
DISTINCT
- DISTINCT는 SELECT 바로 뒤에 한 번만 쓴다.
- DISTINCT 뒤에 컬럼을 여러개 나열하면 여러개가 합쳐져서 중복이 제거됨.
Pseudo Column (의사 열)
: 오라클에서 내부적으로 사용되는 컬럼으로, 가상컬럼이라고도 한다.
테이블의 컬럼처럼 동작하지만 실제로 테이블에 저장되지는 않는 컬럼.
1. ROWID
- 행의 고유한 값.
- 인덱스와 행을 연결해 주는 값.
- 테이블 내의 특정한 행을 유일하게 구별해 주는 값. 데이터 타입은 ROWID.
select *
from emp
where ROWID = 'AAAR8nAADAAACibAAH';
2. ROWNUM
- select문 실행될 때 마다 부여되는 번호.
몇 번째로 가져온 값인지?
- 리턴되어지는 값의 개수를 제한할 때 사용할 수 있다.
- 각 검색된 행의 일련번호로써, ORDER BY에 의한 정렬 이전에 부여됨.
EX > emp테이블에서 행을 3개만 조회하기.
select *
from emp
where ROWNUM < 4;
IN
- IN 은 =ANY 와 같다.
- NOT IN은 !=ALL 과 같다.
select player_name, e_player_name
from player
where player_name in ('고종수', '홍명보', '서동명');
위 쿼리는 아래 쿼리와 결과가 같다.
select player_name, e_player_name
from player
where player_name = '고종수'
or player_name = '홍명보'
or player_name = '서동명';
LIKE
- % : 0개 이상의 문자와 대응
- _ : 1개의 문자와 대응
- ESCAPE : 검색할 문자에 %, _ 포함시 사용
EX > 영문선수 이름에 %문자가 포함된 선수들의 정보 조회
SELECT player_name 선수이름, e_player_name 영어이름, height 키
FROM player
WHERE e_player_name LIKE '%#%%' ESCAPE '#';
ESCAPE에서 꼭 #을 사용하지 않아도 된다.
(임의의 문자 아무거나 사용해도 상관 없다.)