728x90
◎ SQL_특징
- #을 통해 주석 처리한 Python과 달리 SQL에서는 --를 통해 주석처리를 한다.
- 여러 줄로 긴 주석은 /*로 시작해서 끝날 때 *과 /를 (붙여서 써) 주면 됩니다. (Python과 동일)
- SQL 구문은 대소문자 구분이 없음
- 단순 계산을 위한 의미 없는 dummy 테이블을 생산할 때 dual 사용
◎ SQL_다양한 연산자
-- 산술 연산자
SELECT 10, 10+3, 10-3, -10, 10*3, 10/3
FROM dual;
SELECT 10*10-10; # FROM daul; 문 생략 가능
-- 문자 관련 함수
SELECT CONCAT('교보','생명'),
SUBSTR('데이터분석', 1, 3),
TRIM(' 올여름의 할 일은 모르는 사람의 그늘을 읽는 일 ');
-- CONCAT( ) : 문자 접합
-- SUBSTR( ) : 부분 추출(~부터 ~개)
-- TRIM( ) : 양쪽 공백 제거
-- 날짜 변환 함수
SELECT '2018-11-01',
CAST('2018-11-01' AS DATE),
STR_TO_DATE('2018-11-01', '%Y-%m-%d'),
STR_TO_DATE('11/01/2018', '%m/%d/%y');
SELECT sysdate(); # 컴퓨터의 기준 날짜를 확인
-- EXTRACT( ) : 특정한 날짜 요소를 추출, 비교적 복잡한 구성
SELECT EXTRACT(YEAR FROM sysdate());
SELECT EXTRACT(MONTH FROM sysdate());
SELECT EXTRACT(DAY FROM sysdate());
◎ SQL_Select
--키워드 SELECT와 FROM의 사용법
SELECT Name, Population --select 기본 문
FROM world.city;
SELECT * -- "*"을 활용한 모든 변수 선택
FROM sakila.rental;
SELECT * -- Limit를 활용한 변수 갯수 선택
FROM sakila.rental
LIMIT 10;
-- 키워드, 식별자는 대소문자 구분이 없음
SELECT first_name, last_name FROM sakila.customer;
Select FIRST_NAME, LAST_NAME From SAKILA.CUSTOMER;
select First_NAME, LAST_name from SAKILA.customer;
-- 값은 대소문자 구분
-- AS를 활용한 변수이름 지정
SELECT first_name AS name,
last_name Givenname
FROM sakila.customer;
-- DB변수이름 AS 새변수이름 : AS는 생략 가능
-- DISTINCT를 활용한 중복값 제거
SELECT DISTINCT Continent
FROM world.country;
SELECT DISTINCT Name, Continent
FROM world.country;
-- 변수 각각의 중복값 제거 목록이 아니라 변수 조합의 중복값 제거 목록 생성
SELECT COUNT(*), COUNT(1), COUNT(amount), COUNT(staff_id)
FROM sakila.payment;
-- COUNT( )안에는 뭘 집어 넣든 개수만 셈
◎ SQL_Where
-- 키워드 WHERE과 조건문의 활용
SELECT *
FROM world.city
WHERE Population >=9000000 LIMIT 5; -- limit를 두어 원하는 개수만큼 표시 가능
-- creditLimit이 50000 미만인 고객 목록 확인
SELECT *
FROM sales.customers
WHERE creditLimit < 50000;
-- 전체 회원 중 creditLimit이 50000 미만인 고객수의 비율 확인
SELECT sum(IF(creditLimit < 50000, 1, 0))/count(*)
FROM sales.customers;
-- 키워드 LIKE의 활용
SELECT *
FROM world.city
WHERE Name LIKE '_eo%';
-- _ : 한 글자
-- % : 0~n 글자, "무언가 있을 수도 있고 없을 수도 있다"
-- IS NULL과 IS NOT NULL을 활용한 결측값 선택/제외
SELECT *
FROM sakila.rental
WHERE return_date IS NOT NULL; # 결측값 제외
-- IFNULL( )을 활용한 결측값 대체
SELECT *, IFNULL(return_date, '9999-12-31 00:00:00')
FROM sakila.rental
WHERE return_date IS NULL;
-- tip. AND와 OR을 함께 쓰면 AND 먼저 실행
◎ SQL_Group by
-- 대륙별 각종 통계 내용을 나타내는 함수
SELECT Continent,
COUNT(Population) AS CNT_POP,
SUM(Population) SUM_POP,
AVG(Population) AVG_POP,
MAX(Population) MAX_POP,
MIN(Population) MIN_POP
FROM world.country
GROUP BY Continent;
SELECT
CAST(rental_date AS DATE) date_ymd, staff_id, count(1)
FROM sakila.rental
GROUP BY CAST(rental_date AS DATE), staff_id;
-- 그룹변수를 2개 이상 지정 가능 : 그룹 변수의 조합에 대한 요약
-- 새로운 변수이름으로도 group by함수 실행 가능
SELECT CAST(rental_date AS DATE) date_ymd, count(1)
FROM sakila.rental
GROUP BY date_ymd;
-- SELECT 절에서만 새로운 변수이름 지정
-- WHERE와 GROUP BY를 활용한 그룹별 요약
--Q1. sales.employees 테이블에서 jobTitle이 'Sales'로 시작하는 관측치로 officeCode별 직원수 계산
select
officeCode, count(1)
from sales.employees
where jobTitle like 'Sales%'
group by officeCode;
--Q2. sales.payments 테이블에서 2004년 1월 1일 이후 결제건으로 연도/월, customerNumber별 결제 건수 및 amount의 합계 계산
SELECT
date_format(paymentDate, '%Y%m') YM
, customerNumber
, count(1) CNT
, SUM(AMOUNT) AMT
FROM sales.payments
WHERE paymentDate >= '2004-01-01'
GROUP BY date_format(paymentDate, '%Y%m'),customerNumber;
728x90
'Data scientist > SQL' 카테고리의 다른 글
SQL_함수(2) (0) | 2021.08.09 |
---|---|
SQL_Practice_기온 데이터 분석 (0) | 2021.08.08 |
SQL_TABLE (0) | 2021.08.05 |
SQL_기본 (0) | 2021.08.04 |
SQL_데이터베이스 (0) | 2021.08.04 |