기초 SQL

Min·2021년 2월 11일
0

SQL

목록 보기
1/3
post-thumbnail
post-custom-banner

[백문이불여일타] 데이터 분석을 위한 기초 SQL 강의를 수강하며 정리한 내용입니다.

SQL

데이터베이스와 통신하는 언어

  • DQL (Data Query Language) 질의어 : SELECT
  • DML (Data Manipulation Language) 조작어 : INSERT, UPDATE, DELETE

이론강의 실습 사이트(w3school)
문제풀이 사이트(Hackerrank)

1. 보고 싶은 데이터 꺼내오기

1) SELECT / FROM / LIMIT

Data Table : Row(행), Column(열)

Row : 데이터 1개
Column : 데이터들의 특성을 설명

모든 데이터 가져오기

SELECT *
FROM table

보고 싶은 컬럼 가져오기

SELECT column1, column2...
FROM table

제한된 데이터만 가져오기

10개의 데이터만 가져오기

SELECT column1, column2...
FROM table
LIMIT 10

2) SELECT 해커랭크 문제풀이

Select All
Weather Observation Station 1

2. 조건에 맞는 데이터 검색하기

1) 비교 연산자와 논리 연산자

비교 연산자

특정 컬럼이 특정 값을 가지는 데이터만 불러오기 위해서 사용
ex) =, <>, >=, <=, >, <

SELECT *
FROM table
WHERE name < 'B'
-- 알파벳 순서에 따라 문자 'B' 이전에 오는 데이터들만 검색,
-- 즉, 이름이 'A'로 시작하는 모든 데이터를 검색

논리 연산자

WHERE 에서 2가지 이상의 조건을 사용하고 싶을 때
ex) AND (모두 충족), OR (한 가지만 충족)

SELECT *
FROM table
WHERE name < 'B' AND country = 'Germany'

2) LIKE, IN, BETWEEN, IS NULL

LIKE

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

NOT LIKE

특정 문자를 제외한 검색

SELECT *
FROM table
WHERE NOT LIKE 'a%'
-- a로 시작하지 않는 문자 검색

IN

결과에 포함시키고자 하는 값 목록을 지정.
데이터 유형에 관계없이 목록의 값은 쉼표로 구분.

SELECT *
FROM table
WHERE country IN ('Germany', 'France', 'Korea')
-- 위와 아래는 동일한 쿼리이지만 IN을 썼을 때 훨씬 간결해진다.
-- WHERE country = 'Germany' OR country = 'France' OR country = 'Korea'

BETWEEN

특정 범위 내에 있는 행만 선택.
AND 연산자와 쌍을 이루며 시작값, 끝값을 포함.
OR 연산자로 풀어쓰는 것이 가능.

SELECT *
FROM table
WHERE id BETWEEN 3 AND 5
-- id 가 3이상 5이하의 데이터
-- WHERE id >= 3 AND id <= 5

IS NULL

테이블 내에 입력되지 않은 데이터는 NULL로 저장 되며 IS NULL로 검색 가능.
NULL값이 아닌 행을 검색할 경우, IS NOT NULL 사용.

SELECT *
FROM table
WHERE id IS NULL
-- NULL, NaN (Not a Number)

DISTINCT

중복 제거

SELECT DISTINCT city
FROM station

4) WHERE 해커랭크 문제풀이

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

3. 데이터 순서 정렬하기

1) ORDER BY

데이터 정렬하기

SELECT *
FROM table
WHERE 조건
-- WHERE 절 다음에 ODER BY를 써주면 된다.
ORDER BY id DESC 
-- 기본(ASC) : 오름차순 정렬. DESC : 내림차순
-- ORDER BY는 데이터베이스에 저장된 데이터를 건드리지 않는다.

OBDER BY를 이용해 최대값, 최소값, 상위 3개 뽑아보기

SELECT *
FROM table

ORDER BY price DESC -- 최대값
ORDER BY price ASC -- 최소값
LIMIT 1

ORDER BY price DESC -- 상위 3개
LIMIT 3

문자열 자르기

  • LEFT(컬럼명 또는 문자열, 문자열의 길이)
SELECT LEFT('20140323', 4) -- 2014
  • RIGHT(컬럼명 또는 문자열, 문자열의 길이)
SELECT RIGHT('20140323', 4) -- 0323
  • SUBSTRING(컬럼명 또는 문자열, 시작위치, 길이)
    = SUBSTR()
SUBSTR('20140323', 1, 4) -- 2014
SUBSTR('20140323', 5) -- 0323 (길이를 지정 안하면 끝까지 가져온다)

소수점 처리

  • CEIL() : 올림
SELECT CEIL(5.5) -- 6
  • FLOOR() : 내림
SELECT FLOOR(5.5) -- 5
  • ROUND( , 몇째자리 소수점까지) : 반올림
SELECT ROUND(5.567, 2) -- 5.57

2) ORDER BY 해커랭크 문제풀이

Employee Names

Employee Salaries

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
profile
slowly but surely
post-custom-banner

0개의 댓글