주제
1. SQL 기초 구문
2. 비교 연산자 & 논리 연산자
3. 정렬과 집계
4. 기초 함수
5. DDL & DML
SQL 기초 구문
- SELECT -> 무엇을
- FROM -> 어디에서(테이블)
- WHERE -> 어떤 조건으로(조건이 참인 데이터만 반환)
SELECT name, price
FROM products
WHERE price > 5000;
-- products 테이블에서 price가 5000보다 큰 name, price 값들을 조회
※ 1=1은 왜 쓸까?
SELECT name, price
FROM products
WHERE 1=1
AND price > 5000;
- 1=1은 항상 참인데 왜 쓰는걸까?
- 이유는 여러가지 조건들이 있을 때, 한 조건을 빼야하거나 디버깅 시 주석처리가 용이하기 때문!
- 예를 들어 1=1이 없다면 조건 하나를 주석 처리하기 위해서는 모든 WHERE절을 전부 주석처리해야함
- 하지만 1=1이 있다면 원하는 조건만 주석처리하고 나머지 조건은 건드리지 않아도 됨
SELECT name, price
FROM products
WHERE 1=1
-- AND price > 5000
AND name LIKE '%용품';
비교 연산자
| = | != |
| 왼쪽값과 오른쪽값을 비교(동일할 때 반환) | 왼쪽값과 오른쪽값이 서로 다른 것인지 비교 |
SELECT name, price
FROM products
WHERE category = '스포츠';
논리 연산자
| AND | 여러 조건 중 모든 조건이 참인 데이터를 반환 |
| OR | 여러 조건 중 하나라도 참이면 반환 |
| NOT IN | 괄호 안에 포함되지 않는 값만 반환 |
| IN | 괄오 한에 포함되는 값만 반환 |
| LIKE | 문자열의 패턴을 검색 % : 모든 문자열 _ : 앞 또는 뒤에 한개의 문자가 있다는 뜻 |
| BETWEEN | 시작부터 끝값 사이의 모든 값을 반환(끝값 포함), 문자열도 사용 가능 |
| IS NULL / IS NOT NULL | 특정 컬럼 속 null값인 데이터를 반환(NOT NULL은 null이 아닌 값) |
SELECT name, price
FROM products
WHERE price > 2000 AND category = '스포츠';
SELECT name, price
FROM products
WHERE category IN ('스포츠', '키즈');
SELECT name, price
FROM products
WHERE price BETWEEN 3000 AND 10000;
정렬과 집계
| ORDER BY | 특정 열의 값을 기준으로 오름차(ASC)순 혹은 내림차순(DESC)으로 정렬 디폴트는 오름차순. 쉼표로 1차, 2차 정렬도 가능 한글을 가나다순, 영어는 알파벳순 |
| SUM | 특정 칼럼의 합계를 반환 |
| AVG | 특정 칼럼의 평균을 반환 |
| COUNT | 열의 개수를 반환(null값은 포함하지 않음) |
| DISTINCT | 해당 칼럼의 중복을 제외한 유니크한 값을 반환 |
| GROUP BY | 특정 칼럼을 기준으로 집계하여 반환 |
| HAVING | 그룹화를 한 후 필터링을 하는 조건절 |
SELECT name, price
FROM products
WHERE price > 2000
ORDER BY category;
※ WHERE vs. HAVING
| WHERE | HAVING |
| 그룹화를 하기 전에 필터링 적용 | 그룹화를 한 후 필터링 적용 |
| 집계함수를 사용할 수 없음 | 집계함수와 함께 사용 |
| GROUP BY 앞에 사용 | GROUP BY 뒤에 사용 |
기초 함수
문자열 관련
| CONCAT | 여러 칼럼의 값(문자열)을 합친다 |
| SUBSTR(행, 시작 길이, 문자길이) | 문자열을 인덱스값을 기준으로 잘라서 반환 |
| UPPER / LOWER | 대문자 / 소문자로 통일시켜 반환 |
| CHAR_LENGTH | 특정 행의 문자열 데이터의 길이를 반환(글자수) |
숫자 관련
| ROUND | 반올림, 소수점 뒤 몇자리까지 올릴지 지정 가능 |
| CEIL | 올림 함수 |
| FLOOR | 내림 함수 |
| TRUNCATE | 특정 자리수 이하는 무시 |
| ABS | 절댓값을 취한 값을 반환 |
| MOD(분자, 분모) | 분수로 치환된 값을 반환 |
기타
| COALESCE(행, null 대신 채워넣을 값) | 병합 함수, null값을 채울 때 사용 |
DDL & DML
- DDL(Data Definition Language) : 데이터베이스 구조를 정의하고 관리
- CREATE : 테이블 / 뷰 / 인덱스 생성
- ALTER : 테이블 / 뷰 / 인덱스 구조 변경
- DROP : 테이블 / 뷰 / 인덱스 삭제(구조 자체를 삭제)
CREATE table products (
'products_id' int primary key NOT NULL,
'name' varchar(40) NOT NULL,
'category' varchar(40) NOT NULL
);
- DML(Data Manipulation Language) : 데이터를 쿼리하거나 조작
- SELECT : 질의
- INSERT : 삽입
- UPDATE : 수정
- DELETE : 삭제(테이블 내의 내용만 삭제)
INSERT INTO products ('product_id', 'name', 'category') VALUES ('1', '마우스', '전자기기');
느낀점
이번주부터 sql에 들어가는데 아는 내용이 나오니까 안심이 됐다. 대신 프로젝트 생각에 고민이 좀 많았다. 주제 선정부터 해야하는데 어떤 주제가 좋을지 데이터포털에서 검색해가며 보는 중이다. 혼자 아주 간단하게 EDA를 해보고 있는데 문제는 mysql이 맥 Sonoma를 업데이트하면서 패치가 안됐는지 워크벤치가 자꾸 꺼진다는 것.. 플젝할 때는 데탑에서 워크벤치 돌려야겠다. 패치 빨리 해줘라!
'Data Science > TIL (Today I Learned)' 카테고리의 다른 글
| 프로그래머스 데이터분석 데브코스 1기 - 13일차 (0) | 2023.12.06 |
|---|---|
| 프로그래머스 데이터분석 데브코스 1기 - 12일차 (1) | 2023.12.05 |
| 프로그래머스 데이터분석 데브코스 1기 - 10일차 (0) | 2023.12.01 |
| 프로그래머스 데이터분석 데브코스 1기 - 9일차 (0) | 2023.11.30 |
| 프로그래머스 데이터분석 데브코스 1기 - 8일차 (0) | 2023.11.29 |