DML 2
DML(SELECT 1)
DML문의 꽃인 SELECT문을 알아보자.
SELECT 문을 통해 특정 칼럼이나 특정 행만을 조회한다.
기본 사용법
SELECT 칼럼명,칼럼명 from 테이블명 where 여러 조건;
-- 칼럼명 대신 *을 사용하면 모든 칼럼을 가져온다
SELECT 칼럼명||'x' from 테이블명 where 여러 조건 ;
-- ||'x' 의 형식을 통해 가져온 칼럼의 속성 뒤에 x를 붙여서 가져온다.
SELECT 칼럼명 *10 as '곱하기10' from 테이블명 where 여러조건 ;
-- 위의 쿼리로 칼럼의 값에 *10을 한 결과값에 곱하기10이라는 칼럼명으로 조회가 가능하다.
정렬과 중복데이터 제외
ORDER BY를 이용한 정렬
-
order by를 통해 데이터를 정렬 할 수 있다.
-
default는 오름차순으로 정렬하며 DESC 를 추가해 내림차순으로 정렬이 가능함
-
데이터 출력 바로 직전이 실행됨
-
메모리를 많이 사용하여 정렬로 인한 성능 저하가 발생함
SELECT 칼럼명 from 테이블명 where 조건 order by desc ;
기본키를 index number로 사용하여 정렬로 인한 메모리 과부하를 피할 수 있음.
Distinct
Distinct 문을 통해 칼럼명 앞에 지정하여 중복된 데이터를 한번씩만 조회하게 한다.
특정 칼럼내의 도메인에 대한 정보를 확인할 때 유용하게 사용가능하다.
SELECT DISTINCT 칼럼명 FROM 테이블 ;
-- 예를들어 칼럼에 10 20 30 40 10 20 여섯개의 row가 존재할 때 중복 값을 제외하고
-- 10 20 30 40 4개의 row만 출력해준다.
WHERE문 사용
Where 문에는 비교, 부정비교, 논리, SQL,부정 SQL 이렇게 다섯 가지의 연산자가 존재한다.
비교 연산자, 부정 SQL 연산자를 제외하고 나머지 3가지의 연산자를 알아본 후 세부적인 연산자 사용법을 알아보자.
부정 비교 연산자
부정 비교 연산자 | 설명 |
---|---|
!= | 같지 않은 것을 조회 |
^= | 같지 않은 것을 조회 |
<> | 같지 않은 것을 조회 |
not 칼럼명 = | 같지 않은 것을 조회 |
not 칼럼명 > | 크지 않은 것을 조회 |
논리 연산자
논리 연산자 | 설명 |
---|---|
AND | 조건이 모두 만족해야 참 |
OR | 조건중 하나만 만족해도 참 |
NOT | 참->거짓, 거짓-> 참으로 변경 |
SQL 연산자
SQL 연산자 | 설명 |
---|---|
LIKE ‘%비교문자열%’ | 비교 문자열을 조회한다. ‘%’는 모든 값을 의미 |
BETWEEN A and B | A와 B사이의 값을 조회 |
IN(list) | OR를 의미하며 list 값 중에 하나만 일치해도 조회 |
IS NULL | NULL 값을 조회 |
LIKE문 사용법
LIKE문은 와일드 카드를 사용해서 데이터를 조회할 수 있다.
SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명A LIKE '%윤정호';
-- 칼럼A의 속성중에 윤정호로 끝나는 모든 속성을 조회
SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명A LIKE '윤정호%';
-- 칼럼A의 속성중에 윤정호로 시작하는 모든 속성을 조회
SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명A LIKE '%윤정호%';
-- 칼럼A의 속성중에 윤정호가 들어가는 모든 속성을 조회
BETWEEN 문 사용
between문은 지정된 범위에 있는 값을 조회한다.
SELECT 칼럼명 FROM 테이블명 where 칼럼명a between 1000 and 2000;
-- 칼럼명 a에서 값이 1000~ 2000 사이인 모든 값을 조회한다.
SELECT 칼럼명 FROM 테이블명 where 칼럼명a not between 1000 and 2000;
-- 칼럼명 a에서 값이 1000미만 2000초과인 모든 값을 조회한다.
IN문 사용
IN문은 OR의 의미를 가지고 있어서 하나의 조건만 만족해도 조회가 가능하다.
SELECT 칼럼명 FROM 테이블 명 where 칼럼명a in ('윤정호','홍길동')
-- 칼럼명 a에서 값이 윤정호이거나 홍길동인 모든 값을 조회한다.
SELECT 칼럼명 FROM 테이블 명 where (칼럼명a,칼럼명b) in (('윤정호','홍길동'),('개','사자'));
-- 한번에 여러 칼럼을 조회할 때는 위와 같이 소괄호로 묶어준다.
NULL
- NULL은 모르는값 또는 값의 부재를 의미한다.
- 숫자 혹은 날짜와 NULL을 더하면 NULL이 됨.
- NULL을 다른 값과 비교하면 ‘알수없음’을 반환
SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 is NULL;
-- 값이 Null것을 조회
SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 is NOT NULL;
-- not null이 아닌 즉 값이 존재하는 것을 조회
NULL 관련 함수
NULL 함수 | 설명 |
---|---|
NVL 함수 | - NULL이면 다른 값으로 바꾸는 함수 - NVL(‘칼럼명’,변경할 값) |
NVL2 함수 | - NVL과 DECODE가 합쳐진 함수 - NVL2(‘칼럼명’,NULL이 아닐경우의 값,NULL일 경우의 값) |
NULLIF 함수 | - 두개의 값이 같으면 NULL을 , 같지 않으면 첫번째 값을 반환. - NULLIF(A,B) |
COLAESCE | - NULL이 아닌 최초의 인자값을 반환 - COALESCE(A,B,C….) |
GROUP BY
group by는 테이블에서 소규모행을 그룹화 하여 여러 값을 계산 할 수 있다.
WHERE이 아닌 HAVING 으로 조건문을 사용한다.
ORDERBY 를 사용 가능하다.
기본 사용법
SELECT 칼럼a,sum(칼럼b) from 테이블명 group by 칼럼 a having 칼럼 b >2000;
-- DISTINCT 처럼 칼럼a의 값을 기준으로 칼럼 b를 그룹화 한다.
-- having 을 통해 조건을 추가할 수 있다.
-- 칼럼b의 값이 2000이 넘는 값들을 칼럼a의 값을 기준으로 그룹화 하여 해당 그룹에 속하는 값의 모든 합을 조회하는 쿼리문이다.
집계 함수 종류
집계 함수 | 설명 |
---|---|
COUNT() | 행 수를 조회 |
SUM() | 합계 계산 |
AVG() | 평균 계산 |
MAX()와 MIN() | 최댓값 최솟값 계산 |
STDDEV() | 표준편차 계산 |
VARIAN() | 분산 계산 |
SELECT문 실행 순서
SQL의 실행순서는 조회된 데이터를 이해하는 데 아주 중요하다.
순서는 다음과 같다.
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
댓글남기기