데이터리안의 SQL 강의. 1교시(~12:00) SQL 기초 문법 실습. / 2교시(~15:30) 인프런 SQL 강의 / 3교시(~17:50) DB 기본 이론 (행과 열, DQL, DML, 논리연산자, 비교연산자, LIKE, IN, BETWEEN, IS NULL, 문자열 자르기, 반올림 등)
데이터리안 강의
220923
SQL 첫걸음
시작하기 전
입문으로는 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) 조작어
SELECT, FROM, LIMIT, 대소문자, AS
SELECT *(아스타, asterisk) 모든 데이터 출력
- 일부 열만 가져오기
- SELECT name, address 에 해당 컬럼을 가져오도록.
- 일부 행만 가져오기
- 특정 조건을 만족하는 데이터 가져오기.
SELECT * FROM 장소 WHERE local = "특정장소"
- 특정 조건을 만족하는 데이터 가져오기.
- 대소문자 구분
- WHERE type = "LCD" 하면 출력되지만 WHERE type = "lcd' 하면 데이터가 나오지 않음.
- 별칭(AS), Alias
- SELECT name AS station_name 과 같이 출력하는 컬럼에 별칭을 넣을 수 있음. --name을 station_name으로 출력하고 싶다.
- AS 생략 가능 : SELECT name station_name
- 별칭에 띄어쓰기 : SELECT name AS 'station name'
논리 연산자 AND, OR, IN, 비교 연산자 >
AND, OR, IN (논리 연산자)
WHERE local IN ('지역1', '지역2')
WHERE local = '지역1' OR local = '지역2'
WHERE local = '지역1' OR '지역2' 이렇게는 안됨
or은 합집합 / and 는 교집합 계속 틀리는데 혼동하지 말기
>, >=, <, <=, =, !=(<>) (비교 연산자)
- 숫자만 아니라 문자도 비교 가능. WHERE CustomerName < 'B' 이름이 A로 시작하는 사람이 나열됨.
- 위도(숫자)보다 북쪽에 위치한 정류소 중에, '지역1'에 위치한 정류소.
WHERE 위도 > 숫자
AND local = '지역1'
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)
해커스 랭크 문제
- Select All
- Weather Observation Station 1
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
MySQL 문자열 자르기
LEFT(), RIGHT(), SUBSTRING=SUBSTR
- Higher Than 75 Marks
SELECT Name
FROM Students
WHERE Marks > 75
ORDER BY RIGHT(name, 3) ASC, ID ASCORDER BY 두가지 조건 , 로 이어주는거 잊지 말기!
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
댓글