[백문이불여일타] 데이터 분석을 위한 기초 SQL 강의를 수강하며 정리한 내용입니다.
데이터베이스와 통신하는 언어
이론강의 실습 사이트(w3school)
문제풀이 사이트(Hackerrank)
Data Table : Row(행), Column(열)
Row : 데이터 1개
Column : 데이터들의 특성을 설명
SELECT *
FROM table
SELECT column1, column2...
FROM table
10개의 데이터만 가져오기
SELECT column1, column2...
FROM table
LIMIT 10
Select All
Weather Observation Station 1
특정 컬럼이 특정 값을 가지는 데이터만 불러오기 위해서 사용
ex) =, <>, >=, <=, >, <
SELECT *
FROM table
WHERE name < 'B'
-- 알파벳 순서에 따라 문자 'B' 이전에 오는 데이터들만 검색,
-- 즉, 이름이 'A'로 시작하는 모든 데이터를 검색
WHERE 에서 2가지 이상의 조건을 사용하고 싶을 때
ex) AND (모두 충족), OR (한 가지만 충족)
SELECT *
FROM table
WHERE name < 'B' AND country = 'Germany'
WHERE절 안에서 문자열의 일부분을 비교하는 부분 검색.
문자열 비교 연산자를 사용하는 것처럼 정확하게 일치하지 않아도 사용 가능
두 가지의 와일드카드 문자를 사용 (%, _)
SELECT *
FROM table
WHERE country LIKE 'Br%'
-- Country 컬럼의 값 중 'Br'로 시작하는 것을 찾고 싶을때
-- %(와일드카드) : 어떤 것이 들어가도 상관없다는 의미
1) % : 0글자부터 그 이상을 의미
SELECT *
FROM table
WHERE country LIKE 'Brazil'
-- 키워드가 명확하지 않을 때 : LIKE
WHERE country = 'Brazil'
-- 키워드가 명확할 때 : =
-- = 이 LIKE 보다 속도면에서 훨씬 빠르다.
2) _ 와일드 카드
한 글자만을 의미. 조금 더 정교하게 문자 검색이 가능
SELECT *
FROM table
WHERE country LIKE 'B_____'
-- 어떤 문자라고 특정해주지는 않았지만 b로 시작한 다음 5개의 문자
3) (이스케이프 문자) : %, _를 검색하고 싶을 때
SELECT *
FROM table
WHERE discount LIKE '50\%'
-- 50% 를 검색
-- postgresql, mssql, redshift
-- 구글링 방법 : redshift like % escape
특정 문자를 제외한 검색
SELECT *
FROM table
WHERE NOT LIKE 'a%'
-- a로 시작하지 않는 문자 검색
결과에 포함시키고자 하는 값 목록을 지정.
데이터 유형에 관계없이 목록의 값은 쉼표로 구분.
SELECT *
FROM table
WHERE country IN ('Germany', 'France', 'Korea')
-- 위와 아래는 동일한 쿼리이지만 IN을 썼을 때 훨씬 간결해진다.
-- WHERE country = 'Germany' OR country = 'France' OR country = 'Korea'
특정 범위 내에 있는 행만 선택.
AND 연산자와 쌍을 이루며 시작값, 끝값을 포함.
OR 연산자로 풀어쓰는 것이 가능.
SELECT *
FROM table
WHERE id BETWEEN 3 AND 5
-- id 가 3이상 5이하의 데이터
-- WHERE id >= 3 AND id <= 5
테이블 내에 입력되지 않은 데이터는 NULL로 저장 되며 IS NULL로 검색 가능.
NULL값이 아닌 행을 검색할 경우, IS NOT NULL 사용.
SELECT *
FROM table
WHERE id IS NULL
-- NULL, NaN (Not a Number)
중복 제거
SELECT DISTINCT city
FROM station
Revising the Select Query I
Select By ID
Weather Observation Station 6
나의 풀이 : 와일드 카드는 LIKE에서만 사용이 가능하다.
SELECT city
FROM station
WHERE city IN ('a%', 'e&', 'i&', 'o&', 'u&')
옳은 풀이
SELECT DISTINCT city
FROM station
WHERE city LIKE 'a%'
OR city LIKE 'e%'
OR city LIKE 'i%'
OR city LIKE 'o%'
OR city LIKE 'u%'
Weather Observation Station 12
데이터 정렬하기
SELECT *
FROM table
WHERE 조건
-- WHERE 절 다음에 ODER BY를 써주면 된다.
ORDER BY id DESC
-- 기본(ASC) : 오름차순 정렬. DESC : 내림차순
-- ORDER BY는 데이터베이스에 저장된 데이터를 건드리지 않는다.
SELECT *
FROM table
ORDER BY price DESC -- 최대값
ORDER BY price ASC -- 최소값
LIMIT 1
ORDER BY price DESC -- 상위 3개
LIMIT 3
SELECT LEFT('20140323', 4) -- 2014
SELECT RIGHT('20140323', 4) -- 0323
SUBSTR('20140323', 1, 4) -- 2014
SUBSTR('20140323', 5) -- 0323 (길이를 지정 안하면 끝까지 가져온다)
SELECT CEIL(5.5) -- 6
SELECT FLOOR(5.5) -- 5
SELECT ROUND(5.567, 2) -- 5.57
Higher Than 75 Marks
나의 풀이
SELECT name
FROM students
WHERE marks > 75
ORDER BY SUBSTR (name, -1, 3)
AND ORDER BY id
옳은 풀이
SELECT name
FROM students
WHERE marks > 75
ORDER BY RIGHT(name, 3), id
Weather Observation Station 15
나의 풀이
SELECT ROUND(long_w, 4)
FROM station
WHERE long_w < 137.2345
ORDER BY lat_n DESC
옳은 풀이
SELECT ROUND(long_w, 4)
FROM station
WHERE lat_n < 137.2345
ORDER BY lat_n DESC
LIMIT 1