일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 파일호출
- javaBeans
- Import
- 영감
- 팝업창
- 페이지이동
- \
- 동기 부여
- target
- iframe
- BEANS
- 파일 호출
- scanner
- 버리자
- 향상된 for문
- 데이터사이언스
- 미래직장
- static
- 동기부여
- 로그인화면
- Alert
- "
- 빈즈
- 자바빈즈
- ;
- 페이지 이동
- opener
- session.getAttribute
- session.removeAttribute
- session.setAttribute
- Today
- Total
갈림길 이정표
SQL 문법 및 개념 훈련 연습 본문
SQL 문법 & 처리 순서
SELECT column(s) |
FROM table(s) |
WHERE condition(s) |
GROUP BY column(s) |
HAVING aggregate function condition(s) |
ORDER BY column(s) |
⑤ 데이터(레코드) 조회 |
① 테이블 확인 | ② 조건에 맞는 데이터 추출 |
③ 묶음 출력 (그룹화) |
④ 조건에 맞는 그룹 추출 |
⑥ 특정 column 오름/내림 차순 |
~을 출력하라 | 어떤 테이블에서 | ~ 조건에 맞는 | 분류된 데이터 종류따라 |
그룹함수 조건 만족시키는 그룹 |
~ 순으로 |
그렇다면 나도 처리 순서 대로 생각하면 되지 않을까? 🤔
① 테이블 확인 | ② 조건에 맞는 데이터 추출 |
③ 묶음 출력 (그룹화) |
④ 조건에 맞는 그룹 추출 |
⑤ 데이터(레코드) 조회 |
⑥ 특정 column 오름/내림 차순 |
어떤 테이블에서 | ~ 조건에 맞는 | 분류된 데이터 종류따라 |
그룹함수 조건 만족시키는 그룹 |
~을 출력하라 | ~ 순으로 |
① FROM 테이블 확인
- 필요시 JOIN 가능
(FROM 테이블1.명 JOIN 테이블2.명 ON (연결할)칼럼1from테이블1.명 = 칼럼2from테이블2.명)
② WHERE 조건에 맞는 데이터 추출
③ GROUP BY 묶음 출력 (그룹화)
④ HAVING 그룹 조건 (aggregate function)에 맞는 그룹 추출
- COUNT, MAX, MIN, AVG, SUM, VARIANCE (분산), STDDEV (표준편차)
※ COUNT (NULL 제외 하고 셈 ⇒ ∴ * 이 더 정확)
※ 따라서 AVG 할 때도 nvl() 써서 NULL을 0으로 취급한 후 계산 해야함.
※ MIN, MAX: 여러 건의 데이터를 입력 받아서 순서대로 정렬 후 그 중에 최대/최소 값을 추출이 원리 때문에 시간이 오래 걸리는 함수 중 하나, 인덱스를 활용하는 것을 적극 권장
- 반드시 하나의 값만을 반환한다.
- NULL 값은 무시된다.
- NULL 값이 무시되지 않으려면 NVL, NVL2와 같은 함수를 이용한다.
- GROUP BY 설정 없이 일반 컬럼과 기술될 수 없다. (출처: keep-cool.tistory.com/37)
⑤ SELECT 데이터(레코드)조회
- 조회할 데이터가 다른 테이블에서 참조하는 값이면 같은 형태와 값을 가진 칼럼들이 존재한다면 JOIN 가능
-
⑥ ORDER BY 특정 column 오름/내림 차순
예제 문제 :
+------+--------+--------+------+----------+----------+
| 사번 | 이름 | 부서 | 직급 | 근무년수 | 고객확보 |
+------+--------+--------+------+----------+----------+
| 1 | 홍두깨 | 총무부 | 이사 | 11 | O |
| 29 | 박가희 | 총무부 | 사원 | 3 | X |
+------+--------+--------+------+----------+----------+
자주 쓰이는 OPERATER
한번이라도 쓰인 OPERATER
DISTINCT
- WHAT? 같은 칼럼 내 중복되지 않는 레코드 나열
- WHEN? 칼럼에 존재하는 모든 레코드 종류를 알고 싶을 때 (결국 GROUP BY 기능이랑 같음)
- WHERE? SELECT 뒤에 바로
ex. DB 데이터 중 직급의 종류를 모두 알고 싶어 (NULL 포함)
MariaDB [test]> SELECT jikwon_jik FROM jikwon GROUP BY jikwon_jik;
+------------+
| jikwon_jik |
+------------+
| NULL |
| 과장 |
| 대리 |
| 부장 |
| 사원 |
| 이사 |
+------------+
6 rows in set (0.001 sec)
MariaDB [test]> SELECT DISTINCT jikwon_jik FROM jikwon;
+------------+
| jikwon_jik |
+------------+
| 이사 |
| 부장 |
| 과장 |
| 대리 |
| NULL |
| 사원 |
+------------+
6 rows in set (0.001 sec)
ex. DB 데이터 중 성별과 직급 조합의 모든 경우의 수를 알고 싶어
MariaDB [test]> SELECT DISTINCT jikwon_gen, jikwon_jik FROM jikwon ORDER BY jikwon_gen;
+------------+------------+
| jikwon_gen | jikwon_jik |
+------------+------------+
| 남 | 과장 |
| 남 | 대리 |
| 남 | 부장 |
| 남 | 사원 |
| 남 | 이사 |
| 여 | NULL |
| 여 | 과장 |
| 여 | 대리 |
| 여 | 부장 |
| 여 | 사원 |
+------------+------------+
10 rows in set (0.001 sec)
※ DISTINCT 와 GROUP BY 차이
DISTINCT: 그룹핑 만 해줌
(고유 기능: COUNT() 함수로 데이터 종류 수를 알고 싶을 때 SELECT COUNT(DISTINCT jikwon_jik) FROM jikwon;)
GROUP BY: 그룹핑 + 정렬 같이 해줌 (두가지 기능이 있으니 더 느린 처리 속도)
(고유 기능: COUNT 외 SELECT 집계함수() 되어 있는 경우)
LIMIT 숫자
- WHAT? 상단열 부터 출력값(보여지는 값) 개수 제한 (LIMIT 5; [= 상위 5열까지의 결과만 출력]
- WHEN? ORDER BY 오름차순, 내림차순 과 같이 쓰면 좋음
- WHERE? 보통 맨 오른쪽 끝쪽에 쓴다
헷갈리는 개념:
ANY vs. ALL
엇 상반된 개념 이네 ⇒ ANY (최소값 보다 큰 ... , 최대값 보다 작은 ...)
엇 비슷한 개념 이네 ⇒ ALL (최소값 보다 작은 ... , 최대값 보다 큰...)
~ 값보다 작은 ⇒ <ANY,ALL (SELECT ...)
~ 값보다 큰 ⇒ >ANY,ALL (SELECT ...)
'Programming Language > SQL (Maria DB)' 카테고리의 다른 글
[SQL] ERD(Entity Relational Diagram) (0) | 2020.08.03 |
---|---|
[SQL] 계정 (사용자) 생성 및 권한, 보안 (2) | 2020.08.03 |
[SQL] (problem 6) view 연습문제 (0) | 2020.07.31 |
[SQL] view 파일 (0) | 2020.07.31 |
[SQL] CREATE TABLE , INSERT, UPDATE, DELETE SubQuery (0) | 2020.07.31 |