1. 명명 규칙
- 좋은 명명 규칙
> 간결하게 의미를 담아서
테이블명은 데이터의 내용을 나타내야 한다.
컬럼명은 각 데이터의 성격을 명확히 표현해야 한다.
> 일관된 형식 유지
소문자 사용: 일관성을 위해 모두 소문자를 사용한다.
스네이크 케이스: 단어 사이를 밑줄(_)로 구분한다.
2. 주석 처리
? 주석의 역할
- 코드의 목적 설명: 특정 데이터를 조회하는 이유나 필터링 조건의 의도
- 실행 방지: 테스트중인 쿼리의 실행을 막기 위해 주석 처리
- 가독성 증가: 복잡한 쿼리는 섹션별로 주석을 추가해 가독성 증가
(1) /**/ 를 통한 주석: Ctrl + Shift + /
전체적으로 주석을 달고자 할 때 사용함
/* 특정 사용자 데이터를 조회
SELECT user_name, email
FROM users
WHERE user_id = 1;
*/
(2) -- 를 통한 주석: Ctrl + /
원하는 줄만 주석을 달고자 할 때 사용함
-- 전체 사용자 데이터를 조회
# 전체 사용자 데이터를 조회
SELECT *
FROM users;
3. Null 소개
- "값이 없다"는 것을 의미
- 숫자 0이나 빈 문자열(" ")와는 다른 의미
- NULL은 직접 비교(=, !=)로 확인할 수 없습니다. NULL은 비교할 수 없는 값으로 간주되기 때문입니다.
- 대신 IS NULL 또는 IS NOT NULL 조건을 사용해야 합니다.
-- 일반적인 비교연산은 NULL에서 작동하지 않습니다.
SELECT *
FROM 테이블명
WHERE 컬럼명 = NULL; -- 작동하지 않음!
-- NULL 값만 선택
SELECT *
FROM 테이블명
WHERE 컬럼명 IS NULL;
-- NULL이 아닌 값만 선택
SELECT *
FROM 테이블명
WHERE 컬럼명 IS NOT NULL;
Not Null 이란?
- 특정 컬럼에 NULL 값을 허용하지 않도록 설정하는 제약 조건.
4. 데이터 조회하기
(1) 데이터 선택
- SELECT: 원하는 데이터를 조회할 수 있는 명령어
- *: 모든 열을 조회하고자 할 때 사용함.
- FROM: 데이터를 조회할 테이블을 지정함
- MySQL에서 각 구문의 끝은 세미콜론(;)으로 마무리해야 함.
--예시: 직원 정보 테이블에서 모든 데이터를 조회
SELECT *
FROM employees;
--예시: 특정 열만 선택! 이름과 부서 조회
SELECT name, department
FROM employees;
- - 열 이름에 별칭을 지정할 때는 AS 를 사용함
-- 열 이름에 별칭 지정
SELECT name AS '직원명', department AS '부서'
FROM employees;
(2) 중복제거: DISTINCT
테이블에서 중복된 데이터를 제거하려면 DISTINCT키워드를 사용함.
- 반드시 SELECT절에만 사용해야 함
SELECT DISTINCT city
FROM employees;
(3) 갯수 제한: LIMIT
데이터가 많은 테이블에서 결과를 빠르게 미리 확인할 수 있음
- 상위 5명의 직원만 조회
-- 상위 5명의 직원만 조회
SELECT *
FROM employees
ORDER BY age DESC
LIMIT 5;
- LIMIT offset, count으로 원하는 위치에서 원하는 갯수만큼 조회
- offset: 건너뛸 행의 수
- 즉, 실제로 반환되는 데이터는 **offset+1 번째 행**부터 시작합니다.
- count: 그 이후에 가져올 행(row)의 수
-- 3번째 행부터 5개의 데이터를 조회
SELECT *
FROM employees
ORDER BY age DESC
LIMIT 2, 5;
-- 1번째 행부터 10번째 데이터 조회
SELECT *
FROM employees
ORDER BY age ASC
LIMIT [0, ]10; #LIMIT 10과 동일하게 동작!
-- 11번째 행부터 20번째 데이터 조회
SELECT *
FROM employees
ORDER BY age ASC
LIMIT 10, 10;
(4) ORDER BY
정렬하고자 할 때
일반적으로 SQL은 오름차순 / 내림차순은 DESC지정 해야함
5. 데이터 필터링 : WHERE 절
WHERE 절을 사용하면 특정 조건을 만족하는 데이터만 필터링할 수 있습니다.
예를 들어, 직원 테이블에서 서울에서 근무하는 직원만 조회하고 싶다면 다음과 같이 작성합니다.
(1) WHERE
서울에서 근무하는 직원만 조회하고 싶을 경우
--예시: 특정 조건의 데이터 조회
SELECT *
FROM employees
WHERE city = 'Seoul';
(2) BETWEEN
특정 범위의 데이터를 조회하고 싶을 때
-- 나이가 30~50 사이인 직원 조회
SELECT *
FROM employees
WHERE age BETWEEN 30 AND 50;
(3) IN 과 NOT IN
IN 연산자를 사용하면 여러 값 중 일치하는 데이터를 필터링할 수 있다. 반대로 NOT IN 연산자는 특정 값들을 제외한 데이터를 조회한다.
-- IN 예시: 특정 도시에서 근무하는 직원 조회
SELECT *
FROM employees
WHERE city IN ('Seoul', 'Busan');
-- 특정 직무에 해당하는 직원 조회
SELECT *
FROM employees
WHERE job_title IN ('Manager', 'Engineer', 'Analyst');
-- NOT IN 예시: 특정 도시를 제외한 직원 조회
SELECT *
FROM employees
WHERE city NOT IN ('Seoul', 'Busan');
(4) LIKE와 와일드카드
LIKE는 특정 패턴과 일치하는 데이터를 필터링한다. 와일드카드 %와 _를 활용해 정밀한 조건을 걸 수 있다.
- LIKE
-- 이름이 '김'으로 시작하는 직원 조회
SELECT *
FROM employees
WHERE name LIKE '김%';
-- 이름이 두 글자인 직원 조회
SELECT *
FROM employees
WHERE name LIKE '__'; #_가 2개 입니다~!
- NOT LIKE
-- 이름이 '김'으로 시작하지 않는 직원 조회
SELECT *
FROM employees
WHERE name NOT LIKE '김%';
(5) AND와 OR
여러 조건을 결합하고자 할 때 사용함
-- 나이가 30 이상이고, 서울에서 근무하는 직원 조회
SELECT *
FROM employees
WHERE age >= 30 AND city = 'Seoul';
-- 나이가 50 미만이거나, 부산에서 근무하는 직원 조회
SELECT *
FROM employees
WHERE age < 50 OR city = 'Busan';
(6) <>
조건문에서 사용할 수 있는 연산자
-- 서울이 아닌 도시에서 근무하는 직원 조회
SELECT *
FROM employees
WHERE city <> 'Seoul';
SELECT *
FROM employees
WHERE city != 'Seoul'; -- 동일한 결과!
(7) 괄호 사용
()를 사용해서 연산 우선순위를 명시적으로 지정할 수 있음
-- 우선순위를 명확히 하여 올바른 결과 도출
SELECT *
FROM employees
WHERE (age >= 30 AND city = 'Seoul') OR (job_title = 'Manager' AND city = 'Busan');
6. CASE WHEN
(1) 조건에 따라 데이터를 분류하기
--예시: 연령대 분류
SELECT name, age,
CASE
WHEN age < 30 THEN '청년'
WHEN age BETWEEN 30 AND 50 THEN '중년'
ELSE '노인'
END AS age_group
FROM employees;
ELSE는 생략 가능하지만, 모든 조건을 다루지 않을 경우 기본값을 지정하기 위해 사용하는 것이 좋다.
(2) 조건에 따라 새로운 계산 열 추가
-- 급여 수준에 따라 보너스를 계산
SELECT name, salary,
CASE
WHEN salary >= 5000000 THEN salary * 0.2
WHEN salary >= 3000000 AND salary< 5000000 THEN salary * 0.1
ELSE salary * 0.05
END AS bonus
FROM employees;
오늘은 SQL 강의 2주차까지 완강하고 3주차를 시작하게 되었다. 생각보다 강의가 길지 않아서 금방 다음으로 넘어가는 것 같다.
뭔가 이제서야 쿼리문 만드는 게 조금은 익숙해진 것 같다. 처음엔 SELECT, FROM이 매 번 헷갈렸는데 이제는 그정도로는 헷갈리지 않는다.
그리고 오늘 데이터마케팅과 관련된 라이브세션이 있었는데, 유익한 편이었다.
앞으로 데이터 분석과 마케팅의 경계가 모호해 질 것이라는 이야기가 와닿았다. 결국 모든 의사결정을 하는 데 있어서 객관적인 지표가 필요하다는 이야기. 향후 나는 어떤 방향의 마케팅을 그려야 할 지 잘 고민해보아야 겠다.
'데이터분석캠프 TIL' 카테고리의 다른 글
241202_ 데이터 분석 과정(JOIN, UNION, SUBQUERY, 윈도우 함수 ) (1) | 2024.12.02 |
---|---|
241129 (TIL_데이터 분석 과정_ WIL) (0) | 2024.11.29 |
241128 TIL_데이터 분석 과정(SQL - 집계함수, GROUP BY, HAVING, LAND, ORDER BY) (1) | 2024.11.28 |
241126 TIL - 데이터 분석 과정(SQL 강의 1주차, 직무 세션) (0) | 2024.11.26 |
241125 TIL - 데이터 분석 과정(OT, 데이터분석 직무 설명회, CRM 마케팅 직무 분석) (1) | 2024.11.25 |