DB
SQL WHERE, GROUP BY, HAVING , ORDER BY절
짱코딩러
2022. 8. 3. 13:51
SQL 작성 순서
문법 작성 순서
- SELECT 컬럼명
- FROM 테이블명
- WHERE 조건식
- GROUP BY 컬럼명
- HAVING 조건식
- ORDER BY 컬럼명
실행 작동 순서
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- CUBE | ROLLUP
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- TOP
WHERE 절
원하는 로우만 얻으려면 로우를 제한하는 조건을 SELECT 문에 적고 WHERE 절을 추가하여 제시해야한다.
더보기
-연산자 우선순위
우선순위 | 연산자 |
1 | 산술 연산자 ( * , / , + , - ) |
2 | 연결 연산자 ( || ) |
3 | 비교 연산자( < , > , <= , => , <> , = ) |
4 | IS NULL, LIKE, IN |
5 | BETWEEN |
6 | NOT (논리연산자) |
7 | AND (논리연산자) |
8 | OR (논리연산자) |
-비교연산자
연산자 | 의미 |
= | 같다 |
> | 보다 크다 |
< | 보다 작다 |
>= | 보다 크거나 같다 |
<= | 보다 작거나 같다 |
<>, !=, ^= | 다르다 |
-논리연산자
연산자 | 의미 |
AND | 두가지 조건 모두 만족하면 검색 |
OR | 두가지 조건중에서 한가지만 만족해도 검색 |
NOT | 조건에 만족하지 못하는 것만 검색 |
WHERE조건과 비교연산자
SELECT 필드명
FROM 테이블명
WHERE 컬럼 연산자 비교대상값
select *
from emp
where deptno = 10;
BETWEEN AND 연산자
A~B 범위 내에 속하는 데이터
칼럼명 BETWEEN A AND B
SELECT *
FROM EMP
WHERE SAL BETWEEN 2000 AND 3000;
(날짜에 적용한 예시)
SELECT *
FROM EMP
WHERE HIREDATE BETWEEN '1987/01/01' AND '1987/12/31';
IN 연산자
A,B,C 중 하나 이상을 만족하는 데이터
칼럼명 IN(A, B, C)
SELECT *
FROM EMP
WHERE COMM IN(300, 500, 1400);
LIKE 연산자와 와일드 카드
검색하고자 하는 값을 정확히 모를 경우에도 검색할 수 있다.
칼럼명 LIKE pattern
SELECT *
FROM EMP
WHERE ENAME LIKE 'F%';
(NOT을 넣어서 적용한 예시)
SELECT *
FROM EMP
WHERE ENAME NOT LIKE 'F%';
-와일드카드 : %, _
‘%A%’ 앞뒤로 머가 오든 상관X A들어간애 찾어
‘%A’ A로 끝나는 애들 찾어
‘A%’ A로 시작하는 애들 찾어
‘J__ES’
'_A%' 두번째 글자가 A인 애
JAVA에서 DB로 보낼 때 사용하는 방법
//[1] String에 입력하기
String sql = "select * from notice where subject like '%'||?||'%' ";
pstmt.setString(1, subject);
//[2] 변수에 입력하기
String sql = "select * from notice where subject like ?";
pstmt.setString(1, "%"+subject+"%");
IS NULL
null(모르는 값)에는 =을 적용할 수 없기 때문에 is null을 적용해준다.
컬럼명 IS NULL(비교값)
(IS NOT NULL을 넣어줄수도 있다.)
SELECT *
FROM EMP
WHERE COMM IS NOT NULL;
ORDER BY 절
로우를 정렬하기 위해 SELECT문에 ORDER BY절을 추가하고 어떤 컬럼을 기준으로 어떤 정렬을 할 것인지를 결정해야 한다.
더보기
ASC(오름차순) | DESC(내림차순) | |
숫자 | 작은 값부터 정렬 | 큰 값부터 정렬 |
문자 | 사전 순서로 정렬 | 사전 반대 순서로 정렬 |
날짜 | 빠른 날짜 순서로 정렬 | 늦은 날짜 순서로 정렬 |
NULL | 가장 마지막에 나온다. | 가장 먼저 나온다. |
(정렬값을 생략하게 되면 오름차순으로 출력된다.)
문자순 출력
문자 데이터는 아스키코드값으로 저장되므로 아스키코드값을 기준으로 정렬된다.
SELECT 필드명
FROM 테이블명
ORDER BY 칼럼명 [ASC, DESC]
SELECT *
FROM EMP
ORDER BY ENAME;(오름차순 생략가능)
날짜순 출력
오름차순으로 지정하면 가장 오래된 과거의 시점이 가장 위에 출력되고 내림차순인 경우 최근시점부터 출력된다.
여러 조건 제시
급여를 오름차순으로 정렬하려고 할때, 급여가 같은 사람이 존재할 경우 이름의 철자가 빠른 사람부터 출력되도록 하는 등
정렬방식을 여러가지로 지정해야 한다.
SELECT *
FROM EMP
ORDER BY SAL DESC, ENAME ASC;
GROUP BY절
더보기
구 분 |
설 명 |
SUM | 그룹의 누적 합계를 반환합니다. |
AVG | 그룹의 평균을 반환합니다. |
COUNT | 그룹의 총 개수를 반환합니다. |
MAX | 그룹의 최대값을 반환합니다. |
MIN | 그룹의 최소값을 반환합니다. |
STDDEV | 그룹의 표준편차를 반환합니다. |
VARIANCE | 그룹의 분산을 반환합니다. |
SELECT SUM(칼럼명)
그룹함수를 쓰되 특정 컬럼을 기준으로 집계를 낼 때 사용.
그룹 함수를 GROUP BY절에 지정된 컬럼의 값이 같은 행에 대해서 통계 정보를 계산하라는 의미
SELECT GROUP BY 절에 지정된 컬럼명, GROUP BY별로 집계할 값
FROM 테이블명
GROUP BY 그룹으로 묶을 컬럼명
HAVING 조건
GROUP BY 절과 함께 사용되며, 조건을 사용해 집계 함수 결과를 제한할 때 사용한다.
부서의 최대값과 최소값을 구하되 최대 급여가 2900이상인 부서만 출력하는 예시
SELECT DEPTNO, MAX(SAL), MIN(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING MAX(SAL) > 2900;