220923
SQL 첫걸음
1. 시작하기 전
입문으로는 JOIN까지. RFM Segmentation은 고객 분석(실무에 활용할 수 있다고 해서 기대된다.) Pandas Join 함수 잘 기억이 안나는데 다시 찾아보기
데이터 분석가를 하고 싶다면, 수업 끝나고서라도 서브쿼리, 윈도우 함수 같은 것은 개인적으로 공부하기!
- 실행 단축키 ctrl+enter , 주석처리 단축키 ctrl+/ (주석 처리는 -- 또는 문장 전체 주석처리 /* + */)
- 테이블은 행(row, 가로로 한 줄, 데이터), 열(column, 세로로 한 줄, 데이터 특성)
파이썬이랑 판다스 하면서 행, 열이 혼란스러웠는데 제대로 기억되었다!
- 파이썬은 코드 윗줄부터 순서대로 실행하지만, SQL은 전체 코드를 읽어보고 실행할 데이터 순서를 출력한다.
- 쿼리 결과 저장을 csv, xlsx 형식으로 다운 가능
- 대소문자 구분
- SELECT는 DQL(Data Query Language) 질의어
- INSERT, UPDATE, DELETE는 DML(Data Manipulation Language) 조작어
2. SELECT, FROM, LIMIT, 대소문자, AS
SELECT *(아스타, asterisk) 모든 데이터 출력
2-1. 일부 열만 가져오기
SELECT name, address 에 해당 컬럼을 가져오도록.
2-2. 일부 행만 가져오기
특정 조건을 만족하는 데이터 가져오기.
SELECT *
FROM 장소
WHERE local = "특정장소"
2-3. 대소문자 구분
WHERE type = "LCD" 하면 출력되지만 WHERE type = "lcd' 하면 데이터가 나오지 않음.
2-4. 별칭(AS), Alias
SELECT name AS station_name 과 같이 출력하는 컬럼에 별칭을 넣을 수 있음. --name을 station_name으로 출력하고 싶다.
- AS 생략 가능 : SELECT name station_name
- 별칭에 띄어쓰기 : SELECT name AS 'station name'
3. 논리 연산자 AND, OR, IN, 비교 연산자 >
3.1 AND, OR, IN (논리 연산자)
WHERE local IN ('지역1', '지역2')
WHERE local = '지역1' OR local = '지역2'
WHERE local = '지역1' OR '지역2' 이렇게는 안됨
or은 합집합 / and 는 교집합 계속 틀리는데 혼동하지 말기
3.2 >, >=, <, <=, =, !=(<>) (비교 연산자)
- 숫자만 아니라 문자도 비교 가능. WHERE CustomerName < 'B' 이름이 A로 시작하는 사람이 나열됨.
- 위도(숫자)보다 북쪽에 위치한 정류소 중에, '지역1'에 위치한 정류소.
WHERE 위도 > 숫자
AND local = '지역1'
4. ORDER BY, DESC, ASC
ORDER BY updated_at DESC, station_id
ASC는 생략 가능. DESC는 내림차순, ASC는 오름차순
DESC는 100->1, 큰 것부터/ ASC 는 1->100, 작은 것부터
DESC는 최근 업데이트 / ASC는 옛날 업데이트
가장 비싼 물건 보고 싶다. (cf. 가장 싼 물건은 price ASC/ 비싼 상위 3개는 price DESC 하고 LIMIT 3)
해커스 랭크 문제
https://www.hackerrank.com/
- Select All
- Weather Observation Station 1
6. LIKE, IN, BETWEEN, IS NULL
- WHERE country LIKE 'BR%' --BR로 시작하는 브라질을 찾아준다. % 뒤에 어떤 것이 와도 상관 없다.
- LIKE 'r%' 앞 뒤는 상관 없고, r 이 들어가 있는 자료를 찾아준다.
- %는 와일드카드라고도 함.
- __WHERE country LIKE 'Brazil' 보다 WHERE country = 'Brazil'이 훨씬 속도가 빠르다.
- WHERE country LIKE 'B_' 하면 Belgium이 없어지고 Brazil만 나온다. _를 다섯 개 써줘서 글자수를 정했기 때문.
- _는 한 글자 와일드카드라고도 함.
- % 자체를 찾고 싶다면, \%를 써주면 된다. ex) 두 자릿 수 할인을 받는 사람 찾고 싶다->WHERE discount LIKE '__\%'
- %는 예약어지만 \를 넣어줌으로써 이스케이프. 예약어를 탈출한다.
- 검색 팁 postgresql, mssql, redshift -> redshift like % escape로 검색하면 다른 환경에서 어떻게 사용하는 지 찾을 수 있다.
- WHERE customerID BETWEEN 3 AND 5
는 WHERE customerID >= 3 AND customerID <= 5와 동일
- WHERE customerID IS NULL
- 하지만 WHERE customerID = NULL 하면 작동하지 않음
- NULL, NaN(Not a Number)
해커스 랭크 문제
- Revising the Select Query I
- Select By ID
- Weather Observation Station 6\
SELECT city
FROM station
WHERE city LIKE 'a%'
OR city LIKE 'e%'
OR city LIKE 'i%'
OR city LIKE 'o%'
OR city LIKE 'u%'
SELECT DISTINCT city 는 duplicate 중복 값 제거
-
Weather Observation Station 12
aeiou로 시작하지 않으면서 aeiou로 끝나지 않은 값.
SELECT DISTINCT city
FROM station
WHERE city NOT LIKE 'a%'
AND city NOT LIKE 'e%'
AND city NOT LIKE 'i%'
AND city NOT LIKE 'o%'
AND city NOT LIKE 'u%'
AND city NOT LIKE '%a'
AND city NOT LIKE '%e'
AND city NOT LIKE '%i'
AND city NOT LIKE '%o'
AND city NOT LIKE '%u'
AND, OR 헤깔린다
-
Employee Names
-
Employee Salaries AND 랑 OR 또 틀렸따!!!! 분노!!!!
SELECT name
FROM Employee
WHERE salary >= 2000 AND months < 10
ORDER BY employee_id ASC
7. MySQL 문자열 자르기
LEFT(), RIGHT(), SUBSTRING=SUBSTR
- Higher Than 75 Marks
SELECT Name
FROM Students
WHERE Marks > 75
ORDER BY RIGHT(name, 3) ASC, ID ASC ORDER BY 두가지 조건 , 로 이어주는거 잊지 말기!
8. CEIL(), FLOOR(), ROUNG()
CEIL() 올림. 5.5->6
FLOOR() 내림. 5.5->5
ROUND() 반올림. ROUND(5.556901, 4) ->5.5569
- Weather Observation Station 15
SELECT ROUND(LONG_W, 4)
FROM station
WHERE LAT_N < 137.2345
ORDER BY LAT_N DESC
LIMIT 1