하루 10분 SQL (위키북스, 한상일 지음)에서 독학하며 모르거나 중요한 부분을 기록한 것 입니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=16395921
하루 10분 SQL
《하루 10분 SQL》은 데이터베이스를 처음 접하는 사용자와 초급 개발자를 대상으로 SQL을 쉽게 익힐 수 있도록 구성한 입문서이다. 먼저 실습에 필요한 이론을 배운 후 데이터베이스 시스템 개발
book.naver.com
1. SELECT (필드 검색)
- 벌명은 '필드 AS 별명' 형색으로 지정하며, 이때 'AS'는 생략 가능
- 기본적으로 별명은 숫자가 아닌 문자로 시작, 중간에 공백이 없어야 함 → 숫자로 시작하는 별명이나 중간에 공백이 있는 별명을 사용하려면 따옴표("") 안에 별명을 넣어줌
-- 숫자로 시작하는 별명이나 중간에 공백이 있는 별명 사용
SELECT customer_cd AS "Customer Cd", customer_nm AS "01_고객명", phone_number AS "_성별_", email "전화 번호"
FROM TB_CUSTOMER;
[실행결과]
2. WHERE (조건에 맞게 검색), AND (모두 만족하면 검색), OR (하나라도 만족하면 검색)
SELECT 검색필드명
FROM 테이블명
WHERE 조건식1 AND/OR 조건식2 AND/OR ... 조건식n;
예제) 고객 테이블에서 남성인 고객 중 생년월일이 '19700101' 이전(조건1)이거나 누적포인트가 20,000 이상(조건2)인 고객을 검색하기
-> WHERE 남성인 고객(M) AND (조건1 OR 조건2)
SELECT *
FROM TB_CUSTOMER
WHERE MW_FLG = 'M'
AND (BIRTH_DAY < '19700101'
OR TOTAL_POINT >= 20000);
[실행결과]
3. BETWEEN .. AND (범위에 만족하면 검색)
SELECT 검색필드명
FROM 테이블명
WHERE 필드명 [NOT] BETWEEN 시작값 AND 종료값;
예제) 고객 테이블에서 누적포인트가 10,000 미만이거나 30,000 이상인 고객을 검색하기
-> 10,000 이상이며 30,000 이하의 반대 조건이므로 NOT BETWEEN ~ AND ~ 사용
SELECT *
FROM TB_CUSTOMER
WHERE TOTAL_POINT NOT BETWEEN 10000 AND 30000;
[실행결과]
4. 비교 연산자 (같다, 같지 않다, 크다, 작다 조건으로 검색)
- = : 같다
- <>, !=, ^= : 다르다
ex) WHERE REG_DTTM <> SYSDATE : REG_DTTM 값이 현재 일시가 아닌 데이터를 검색한다.
예제) 고객 테이블에서 여성이 아니면서 누적포인트가 10,000 이하인 고객을 검색하기 -> <>, AND 사용
SELECT *
FROM TB_CUSTOMER
WHERE MW_FLG <> 'W' -- 여성이 아니면서
AND TOTAL_POINT <= 10000;
[실행결과]
5. LIKE (포함된 문자로 검색)
SELECT 검색필드명
FROM 테이블명
WHERE 필드명 [NOT] LIKE '%검색값%'
SELECT 검색필드명
FROM 테이블명
WHERE 필드명 [NOT] LIKE '_검색값_'
- '문자%' : 문자로 시작하는 값
- '%문자' : 문자로 끝나는 값
- '%문자%' : 문자가 포함된 값
- '_' : 지정한 위치에 1자리 문자면 무엇이든 가능
예제1) 고객 테이블에서 고객코드가 '2017' 또는 '2019'로 시작하는 여성 고객을 검색하기
-> OR(고객코드), AND(여성) 사용
SELECT *
FROM TB_CUSTOMER
WHERE (CUSTOMER_CD LIKE '2017%'
OR CUSTOMER_CD LIKE '2019%')
AND MW_FLG = 'W';
[실행결과]
예제2) 고객 테이블에서 전화번호가 '___-____-____' 형식이 아닌 고객을 검색하기
-> NOT LIKE 형식 사용
SELECT *
FROM TB_CUSTOMER
WHERE PHONE_NUMBER NOT LIKE '___-____-____';
[실행결과]
6. IN (여러 데이터로 검색)
SELECT 검색필드명
FROM 테이블명
WHERE 필드명 [NOT] IN (검색값1, 검색값2, .... , 검색값n);
예제) 고객 테이블에서 고객코드가 '2017108', '2018254', '2019167'인 고객 중 남성고객을 검색
-> IN(고객코드), AND(남성) 사용
SELECT *
FROM TB_CUSTOMER
WHERE CUSTOMER_CD IN ('2017108', '2018254', '2019167')
AND MW_FLG = 'M';
[실행결과]
7. ORDER BY (정렬 필드 지정)
SELECT 검색필드명
FROM 테이블명
WHERE 조건식
ORDER BY 필드명1/필드번호1[ASC|DESC], 필드명2/필드번호2 [ASC|DESC] .... , 필드명n/필드번호n [ASC|DESC];
예제) 고객 테이블에서 성별로 내림차순 정렬한 결과를 다시 고객명으로 오름차순해 검색
-> ORDER BY DESC(성별) 후 ASC(고객명) 사용 (기본값이 오름차순이므로 생략 가능)
SELECT *
FROM TB_CUSTOMER
ORDER BY MW_FLG DESC, CUSTOMER_NM;
[실행결과]
8. GROUP BY (최소, 최대, 합계, 평균값 등의 취득을 위한 그룹화)
SELECT 검색필드명
FROM 테이블명
WHERE 조건식
GROUP BY 필드명1, 필드명2, ...., 필드명n
HAVING 그룹 내 조건식;
예제) 성적 테이블에서 반코드 그룹을 만들고 국어, 영어, 수학 점수의 합계와 평균을 구하되 국어 점수의 평균이 80점 이상이면 검색
-> GROUP BY(반코드), SUM(합계), AVG(평균), HAVING(국어 80점 이상) 사용
SELECT CLASS_CD,
SUM(KOR) AS TOT_KOR,
SUM(ENG) AS TOT_ENG,
SUM(MAT) AS TOT_MAT,
ROUND(AVG(KOR), 1) AS AVG_KOR,
ROUND(AVG(ENG), 1) AS AVG_ENG,
ROUND(AVG(MAT), 1) AS AVG_MAT
FROM TB_GRADE
GROUP BY CLASS_CD
HAVING AVG(KOR) >= 80;
[실행결과]
9. DISTINCT (출력 필드의 중복 없애기)
SELECT DISTINCT 검색필드명
FROM 테이블명
WHERE 조건식;
예제) 판매 테이블에서 판매일과 상품명을 중복 없이 검색
-> 판매일과 상품명 필드명 앞에 DISTINCT 붙이기
SELECT DISTINCT SALES_DT, PRODUCT_NM
FROM TB_SALES
ORDER BY SALES_DT, PRODUCT_NM;
[실행결과]
'Data analysis > 개념(SQL)' 카테고리의 다른 글
SQL 수치 관련 함수 (0) | 2022.04.08 |
---|---|
SQL 날짜 관련 함수 (0) | 2022.04.02 |
SQL 집합 명령어 (0) | 2022.04.02 |
SQL 명령어와 함수 (3) (0) | 2022.04.01 |
SQL 명령어와 함수 (2) (0) | 2022.04.01 |