1. 관계 대수 (formal query language)
1) 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여
질의하는 방법을 기술하는 언어.
2) 절차적인 언어, DBMS 내부의 처리 언어로 사용됨.
3) 수학기호을 사용하여 데이터 처리를 기술한 언어.
4) 관계 대수 연산자
- select (셀랙션) : 릴레이션에서 조건에 만족하는 투플을 선택
- theta join, outer join
2. SQL
1) 수학적인 원리를 기반으로 사용하기 쉽게 만들어진 언어.
2) commercial language
3) 관계 대수로 만들어진 모든 질의가 표현 가능.
3. select operation
1) 형식 : σ<조건> (R)
2) 조건에서 비교연산자, 논리연산자 이용하여 속성의 값을 비교하는 비교식을 사용.
4. SELECT
1) 테이블에서 원하는 데이터를 검색하는 SQL
2) Syntax
- SELECT [DISTINCT] {* | <column_name>,...}
FROM 테이블 이름(들)
[WHERE 검색조건(들)]
[GROUP BY 속성이름]
[HAVING 검색조건(들)]
[ORDER BY 속성이름[ASC|DESC]]
- SELECT
[ALL | DISTINCT]
{* | <column_name>[AS ] 별칭,...}
FROM
{테이블 이름 [AS 테이블이름별칭] [JOIN 테이블 이름]}
[WHERE 검색조건(들)]
[GROUP BY 속성이름]
[HAVING 검색조건(들)]
[ORDER BY 속성이름[ASC|DESC]]
3) example
- SELECT DISTINCT dept_name from student;
- DISTINCT : 결과 테이블에서 중복된 레코드를 제거하는 키워드.
4) select 절에 산술식 포함 가능
- +,-,*, /
- select id, name, salary/12 from employee;
5. SELECT with WHERE
1) 테이블에서 조건에 맞는 데이터만 검색하기 위해 WHERE 절 이용.
2) Syntax
- SELECT [DISTINCT] {* | <column_name>,...}
FROM <table list>
[WHERE condition]
- Condition : 비교 연산자(=, <>, <, >, <=, =>)
논리 연산자(AND, OR, NOT)
3) example
- SELECT name from employee
WHERE dept_name = 'SALES' AND salary > 1000000
4) LIKE 키워드 (패턴)
- 문자열 컬럼인 경우 부분적인 매칭으로 조건 검색 가능
- % : 0개 이상의 문자
_ : 1개의 문자
- SELECT * FROM employee WHERE name like '이%';
SELECT * FROM employee WHERE name like '이순_';
5) BETWEEN (범위)
- price BETWEEN 10000 AND 20000
IN, NOT IN (집합)
- price in (10000, 20000, 30000)
6) is null, is not null
- price is null
6. NULL value
1) null은 empty가 아닌 unknown
2) null 값은 산술 연산 및 비교 연산 결과는 null
- 5 + null ========> null
- null > 5 ========> null
- null = null ======> null
3) null과 논리 연산 결과
- OR
- (null OR true) = true,
(null OR false) = null
(null or null) = null
- AND
- (true AND null) = null
(false AND null) = false
(null and null) = null
- NOT
- (NOT null) = null
4) null값을 가진 row를 찾기 위한 조건식 -- IS NULL
- SELECT id, name FROM customer
WHERE age is NULL;
7. ORDER BY
1) SELECT의 검색 결과를 정렬하기 위해 ORDER BY 키워드 사용
2) Syntax
- SELECT [DISTINCT] {* | <column_name>,...}
FROM <table list> [WHERE condition]
[ORDER BY <column_name>, ... [ASC|DESC]];
- ASC : 오름 차순 정렬 (default), DESC : 내림 차순 정렬
3) example
- select id,name,age, address from customer ORDER by age desc;
- select id,name,dept_name, salary from employee ORDER by salary;
- select id,product,quantity, order_date from salesOrders
order by order_date asc,quantity desc;
4) 결과값을 특정 컬럼을 기준으로 오름차순(asc)/내림차순(desc) 정렬해서 표현.
여러 개의 경우 컬럼 나열된 순서로 적용(1차정렬, 2차정렬,....)
8. Aggregation Function
1) 특정 컬럼의 값을 통계적으로 계산한 결과를 보여주는 SQL 함수
- COUNT : 컬럼 값의 개수
- MAX : 컬럼 값의 최대값
- MIN : 컬럼 값의 최소값
- SUM : 컬럼 값의 합계 ==> 숫자 데이터만 가능
- AVG : 컬럼 값의 평균 ==> 숫자 데이터만 가능
2) example
- select sum(salary) from employee WHERE dept_name = 'SALES';
- select count(id) from orders where product = 'smartphone';
9. 별명(Alias)
1) SQL 쿼리 결과생성시 컬럼명에 대한 별명을 사용해 표시하는 기능
2) select 컬럼명1 AS 별명1, 컬럼명2 별명2
from 테이블명
3) 조인할때 많이 사용됨.
10. NULL value in Aggregation Function
1) SELECT SUM(salary) FROM employee;
- 만약 컬럼 값이 NULL이면 합을 계산할 때 무시.
- 만약 컬럼 값이 모두 NULL이면 NULL이 출력됨.
2) MAX,MIN,SUM,AVG 경우 NULL이 아닌 값으로만 계산.
- 모두 NULL인 경우 NULL을 리턴.
3) COUNT : NULL이 아닌 값의 개수를 출력
- 컬럼이 모두 NULL인 경우 0 리턴.
4) 테이블에 레코드가 없는 경우
- SUM,AVG,MAX,MIN : return NULL;
- count : return 0
11. GROUP BY
1) 테이블에서 특정 컬럼의 값이 같은 ROWS를 모아 그룹을 만들고, 그룹별로 검색하기 위해 사용되는 KEYWORD.
2) 그룹에 대한 조건을 추가하려면 HAVING 키워드를 이용.
- WHERE 조건 : 레코드들을 grouping 하기 전에 조건을 검색
- HAVING 조건 : 레코드들을 grouping 후에 그룹에 대한 조건을 검색
3) SELECT [DISTINCT] {* | <column_name>,...}
FROM <table list> [WHERE condition]
[GROUP BY <column_name list> [HAVING condition]]
[ORDER BY <column_name_list>, ... [ASC|DESC]];
4) Aggregation Function을 제외한 select 문의 컬럼은 grouping by 컬럼 리스트에 포함된 컬럼들만 가능함.
- select dept_name,Id, avg(salary)
from employee
GROUP by dept_name;
==> return error : select list is not in GROUP by clause
and contains nonaggregated column.
5) example
- select dept_name,avg(salary) from employee GROUP by dept_name;
- select dept_name,avg(salary) from employee GROUP by 1;
- select dept_name,avg(salary) from employee GROUP by dept_name
HAVING avg(salary) > 5000000;
12. where절과 having절의 사이
1) where
- "집계 전" 데이터를 필터링
2) having
- "집계 후" 데이터를 필터링
3) where절에는 집계함수가 올수 없고
having절에는 집계함수만 올수 있음.
13. select [컬럼명],.... 5
from [테이블명] 1
where [조건절] 2
group by [컬럼명] 3
having [집계함수 조건절] 4
order by [컬럼명] 6
14. select절에서 많이 하는 실수
1) 컬럼명을 새로 명명할 경우
- 띄어쓰기, 숫자로 시작하는 단어, 특수문자가 포함된 단어는 올수 없음.
2) 컬럼명을 큰따옴표("")로 감싸준 경우에는 위 1)의 경우 다 가능함.
15. where절 조건
의미 긍정 부정
------------------------------------------------------------------------
일치/불일치 조건 = != <>
대소 조건 (숫자와 많이씀) >, >=, <, <=
범위 조건 (숫자와 많이씀) BETWEEN ~ AND ~ not BETWEEN ~ AND ~
다수의 값 일치/불일치 조건 IN (~,~,~) not IN (~,~,~)
특정문자열 포함/불포함 조건 like '%~%' not like '%~%'
null값 포함/제외 조건 is null is not null
16. where절에 and와 or를 함께 쓸때는, 반드시 ()로 의미 단위끼리 묶을것.
17. group by절에서 가장 많이 하는 실수
1) select절에 등장한 컬럼이 group by에 모두 명시되지 않은 경우 (집계함수 제외)
- select category, yyyy, sum(gmv) as gmv
from gmv_trend
group by category, yyyy;
2) 집계함수 빼고는 모두 group by에 명시할것!
3) 집계함수 앞의 컬럼을 추가하거나 뺄때 group by 절도 같이 수정해줘야 함!
18. online_ORDER 주문 테이블 컬럼
1) PRICE : 판매가격
UNITSOLD : 판매수량
GMV : 거래액 (PRICE * UNITSOLD)
PRODUCT_PROFIT : 상품 이익
DISCOUNT : 할인액
TOTAL_PROFIT : 거래액 (PRODUCT_PROFIT - DISCOUNT)
19. 데이터 탐색 결과 정리
1) online_ORDER
- 상품 ID만 있고, 상품명이 없음.
- User ID만 있고, 고객 정보(성/연령)이 없음.
- Item ID만 있고, 카테고리 정보가 없음.
- User ID 컬럼에 null값이 있음.
2) Item
- 상품(item) ID에 매핑되는 상품명, 카테고리 ID가 있음.
3) Category
- 카테고리 ID에 매핑되는 카테고리 이름이 있음.
- 카테고리 분류는 cate1이 세부분류, cate2가 중분류, cate3가 대분류임.
4) User_info
- User ID에 매핑되는 성별, 연령대 정보가 있음.
20. 문자형 데이터 가공하기
1) 특정 문자열만 잘라내기 : substr()
2) 문자열 합치기 : A || B , concat(A,B)
3) 조건별로 그룹핑하기 : case when ~ else ~ end
4) null값 치환하기 : nvl(컬럼명, ~~~)
5) trim(), replace(), upper(), lower(), length ..
21. 숫자형 데이터 가공하기
1) 반올림 : round()
2) 절대값 : abs()
3) sin()...
22. 날짜 데이터 가공하기
1) 날짜 더하기 / 빼기
2) 날짜에서 특정 월/주 등 추출하기
'Web > Oracle SQL' 카테고리의 다른 글
7. 조인 (0) | 2022.01.29 |
---|---|
6. 내장함수 (0) | 2022.01.29 |
3. SQL 기초 (0) | 2022.01.29 |
2. 관계형 데이터 모델 (0) | 2022.01.29 |
1. DB & DBMS 개념 (0) | 2022.01.29 |
댓글