오늘부터 본격적인 수업이 시작되었다. 오늘과 내일은 SQL에 대한 내용을 다루고 그다음에 Python을 배울 예정이다.
| 접미사 | 의미 | 상세 내용 |
|---|---|---|
| _cd | code | 코드 |
| _nm | name | 이름 또는 명칭 |
| _no | number | 번호(식별값, 연산 X) |
| _id | id | 아이디 |
| _dt | date | 날짜, 시간까지 포함하는 경우 _dtm 또는 _ts 사용 |
| _gb | gubun | 구분값 |
| _cnt | count | 개수 |
| _amt | amount | 금액 |
| _sum | sum | 수치형의 합계 |
| _avg | average | 수치형의 평균 |
현업에서는 주석처리를 간편하게 하기 위해 , 을 앞에 사용
SELECT species
, COUNT(*) as cnt
, SUM(sepal_length) as sum
, AVG(sepal_length) as avg
from IRIS
GROUP by species;
SELECT * FROM IRIS;
select * from IRIS LIMIT 10;
SELECT sepal_length, species FROM IRIS;
SELECT * FROM IRIS WHERE sepal_length >= 5;
SELECT COUNT(*) AS cnt FROM IRIS WHERE sepal_length >= 5 AND sepal_length <= 7;
SELECT COUNT(*) as cnt FROM IRIS WHERE sepal_length BETWEEN 5 AND 7;
SELECT COUNT(*) as cnt FROM IRIS WHERE species = 'versicolor' or species = 'virginica';
SELECT COUNT(*) as cnt FROM IRIS WHERE species in ('virginica', 'versicolor');
SELECT *, sepal_length / sepal_width as sepal_ratio From IRIS;
SELECT *, sepal_length / sepal_width as sepal_ratio
FROM IRIS
WHERE (sepal_length / sepal_width) >= 1.5;
SELECT * FROM IRIS ORDER by sepal_length;
SELECT * from IRIS ORDER by sepal_length DESC;
SELECT * from IRIS ORDER by sepal_length, petal_width;
SELECT * from IRIS ORDER by sepal_length DESC, petal_width;
SELECT COUNT(*) as cnt FROM IRIS;
SELECT species, COUNT(*) as cnt from IRIS GROUP by species;
SELECT species, SUM(sepal_length) as sum from IRIS GROUP by species;
SELECT species, AVG(sepal_length) as avg from IRIS GROUP by species;
SELECT species
, AVG(sepal_length) / AVG(sepal_width) as sepal_ratio
from IRIS
group by species
HAVING AVG(sepal_length) / AVG(sepal_width) >= 1.5
ORder by sepal_ratio DESC;
CREATE TABLE users(
id INT NOT NULL PRIMARY key,
name VARCHAR(10),
age INT
);
select * from users;
INSERT INTO users values(1, '김현수', 28);
INSERT INTO users values(2, '이서현', 32);
INSERT INTO users values(3, '박지민', 27);
UPDATE users SET name = '최민석' WHERE age < 30;
DELETE from users WHERE age = 27;
drop table users;
a + b : a와 b를 더하기a - b : a에서 b를 빼기a * b : a와 b를 곱하기a / b : a를 b로 나누기a % b : a를 b로 나눈 나머지 반환SELECT sepal_length, sepal_length + 2 from IRIS LIMIT 10;
SELECT sepal_length, sepal_length - 2 from IRIS LIMIT 10;
SELECT sepal_length, sepal_length * 2 from IRIS LIMIT 10;
SELECT sepal_length, sepal_length / 2 from IRIS LIMIT 10;
SELECT sepal_length, sepal_length % 2 from IRIS LIMIT 10;
데이터 타입 변환 함수 :
CAST()
- 정수를 실수로 변환할 때 REAL(또는 FLOAT) 지정
SELECT 5 / CAST(2 AS REAL);
SELECT 5.0 / CAST(2.0 AS INTEGER);
SELECT 5 >= 2;
SELECT 5 > 2;
SELECT 5 <= 2;
SELECT 5 < 2;
SELECT 5 = 2;
SELECT 5 != 2;
SELECT 5 is NULL; -- <> 사용 가능
SELECT 5 is NOT NULL;
SELECT COUNT(*) from IRIS where sepal_length >= 5;
SELECT COUNT(*) from IRIS_NULL where sepal_length >= 5;
SELECT COUNT(*) from IRIS_NULL WHERE sepal_length IS NULL;
‘A’ LIKE ‘B’ : 문자열 ‘A’와 ‘B’가 정확하게 일치하면 1, 아니면 0을 반환(와일드 카드 사용 가능)‘A’ GLOB ’B’ : LIKE와 비슷하지만 대소문자를 구분하며 와일드 카드 사용 불가능SELECT 1 = 1 and 2 != 2;
SELECT 1 = 1 or 2 != 2;
SELECT 'ABC' like 'ABC'; -- 1
SELECT 'ABC' like 'Abc'; -- 1
SELECT 'ABC' glob 'Abc'; -- 0
SELECT 'ABC' like 'A'; -- 0
SELECT 'ABC' like 'A%'; -- 1
SELECT 'ABC' like 'A_'; -- 0
SELECT 'ABC' like 'A__'; -- 1
UNION : 두 쿼리 결과에서 중복을 제거하고 하나로 결합(합집합)UNION ALL : 두 쿼리 결과에서 중복을 제거하지 않고 하나로 결합INTERSECT : 두 쿼리 결과에서 중복인 행을 선택(교집합)EXCEPT : 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 제외(차집합)SELECT * from IRIS WHERE sepal_length <= 4.4
UNION
SELECT * from IRIS_NULL WHERE sepal_length <= 4.4;
SELECT * from IRIS WHERE sepal_length <= 4.4
UNION ALL
SELECT * from IRIS_NULL WHERE sepal_length <= 4.4;
ABS(필드명) : 절대값 반환CEIL(필드명) : 소수점 올림 값 반환FLOOR(필드명) : 소수점 내림 값 반환ROUND(필드명, 소수점 자리수) : 지정한 소수점 자리수에서 반올림한 값 반환RANDOM() : 매우 큰 범위의 정수를 무작위로 반환POWER(필드명, 거듭제곱) : 거듭제곱한 값 반환SQRT(필드명) : 양의 제곱근을 반환EXP(필드명) : 네이피어 상수(e)를 필드 원소로 거듭제곱한 값을 반환(지수 함수)LOG(필드명) : 네이피어 상수(e)를 밑으로 하는 필드 원소의 로그 값을 반환SELECT sepal_length, CEIL(sepal_length) FROM IRIS LIMIT 10;
SELECT sepal_length, FLOOR(sepal_length) FROM IRIS LIMIT 10;
SELECT sepal_length, ROUND(sepal_length, 0) FROM IRIS LIMIT 10;
SELECT sepal_length, POWER(sepal_length, 2) FROM IRIS LIMIT 10;
SELECT sepal_length, ROUND(POWER(sepal_length, 2), 1) as sepal_length_squared FROM IRIS LIMIT 10;
SELECT sepal_length, SQRT(sepal_length) FROM IRIS LIMIT 10;
SELECT sepal_length, EXP(sepal_length) FROM IRIS LIMIT 10;
SELECT sepal_length, LOG(sepal_length) FROM IRIS LIMIT 10;
LENGTH(필드명) : 글자 개수 반환REPLACE(필드명, 패텅, 대체값) : 패턴을 대체값으로 변경SUBSTR(필드명, 시작, 길이) : 시작위치부터 지정한 길이만큼의 부분 문자열 반환INSTR(필드명, 탐색할 문자열) : 탐색할 문자열의 시작 위치를 반환TRIM(필드명, 삭제할 문자열) : 양 끝에서 삭제할 문자열(생략시 공백)을 삭제LOWER(필드명) : 소문자로 변환UPPER(필드명) : 대문자로 변환CONCAT(필드명, 필드명, …) : 서로 대응하는 원소를 하나의 문자열로 결합SELECT species, LENGTH(species) from IRIS GROUP by species;
SELECT species, REPLACE(species, 's', 'v') FROM IRIS GROUP by species;
SELECT species, SUBSTR(species, 1, 3) FROM IRIS GROUP by species;
SELECT species, INSTR(species, 's') FROM IRIS GROUP by species;
SELECT species, TRIM(species, 'v'), TRIM(species, 'a') FROM IRIS GROUP by species;
SELECT species, UPPER(species) from IRIS GROUP by species;
SELECT CONCAT(species, ' : ', sepal_length) FROM IRIS GROUP by species;
SUBSTR에서INSTR사용
SELECT species, SUBSTR(species, 1, INSTR(species, 's')-1) FROM IRIS GROUP by species;
COALESCE(필드명, 대체값) : 지정한 값 중 결측이 아닌 첫 번째 값 반환COALESCE(필드명1, 필드명2, 대체값)IFNULL(필드명, 대체값) : 결측이 아니면 원본, 결측이면 대체값 반환NULLIF(필드명, 비교값) : 비교값과 다르면 첫 번째 값, 같으면 NULL 반환NULLIF(필드명1, 필드명2)SELECT sepal_length, COALESCE(sepal_length, 0) from IRIS_NULL;
SELECT sepal_length, sepal_width, COALESCE(sepal_length, sepal_width, 0) from IRIS_NULL;
SELECT sepal_length, IFNULL(sepal_length, 0) from IRIS_NULL;
SELECT sepal_length, NULLIF(sepal_length, 5) from IRIS_NULL;
IIF(조건, 참값, 거짓값) : 조건을 만족하면 참값, 만족하지 않으면 거짓값 반환(구간화)SELECT sepal_width
, IIF(sepal_width > 3.5, 'L', 'S')
from IRIS;
SELECT sepal_width
, IIF(sepal_width > 3.5, 'L', IIF(sepal_width > 3, 'M', 'S'))
from IRIS;
CASE WHEN : IIF() 를 확장한 구문SELECT sepal_width
, CASE WHEN sepal_width > 3.5 THEN 'L' ELSE 'S' END as grade
from IRIS;
SELECT sepal_width
, CASE WHEN sepal_width > 3.5 THEN 'L'
WHEN sepal_width > 3.0 THEN 'M'
ELSE 'S' END as grade
from IRIS;
첫 수업이었는데 현업에서 실제로 사용하는 방식들을 배울 수 있어서 좋았고, 저번 과정보다 수업 속도나 양이 훨씬 빠르게 느껴져서 한 번 배워봤던 내용들이라 정말 다행이었다. 다른 내용들도 복습을 꾸준히 하지 않으면 따라가기 힘들 것 같으니 열심히 해야겠다.