기록과 정리

데이터 꺼내오기 (SELECT) - 기본 본문

IT/DB

데이터 꺼내오기 (SELECT) - 기본

zepetto 2021. 8. 16. 22:34

이 글은 '[백문이불여일타] 데이터 분석을 위한 기초 SQL' 강의를 참고하였습니다.

https://www.inflearn.com/course/%EB%B0%B1%EB%AC%B8%EC%9D%B4%EB%B6%88%EC%97%AC%EC%9D%BC%ED%83%80-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%EA%B8%B0%EC%B4%88-sql/lecture/29718?tab=note 

 

[백문이불여일타] 데이터 분석을 위한 기초 SQL - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

아무리 기본적인 부분이지만 헷갈리는 경우가 있다. 헷갈리는게 아는 것인지에 대한 생각부터 DB라는 카테고리를 만들어 SQL 및 테이블 , NoSQL등을 정리해보려한다. 

DQL/DML

 

SELECT DQL(Data Query Language) 질의어

 

INSERT/UPDATE/DELETE DML(Data Manipulation Language) 조작어

 

-> 실무에서 select를 얼마나 잘하느냐에 따라 속도 및 효율성에 크게 도움을 줄 수 있으며, 회사들이 진행하는 코딩테스트에서도 2문제 가량의 select하는 쿼리 문제들이 나온다. 따라서 select에 신경을 쓰도록 하자

Table?

Customer

Id name country
1 zepetto 서울
2 tony 도쿄
3 sangmoon 뉴욕
4 bear 홍콩

다음과 같은 데이터 구조를 테이블이라 한다. 가로는 행(Row) 세로는 열 (Column)이라고 한다. 테이블 이름은 Customer

 

SELECT

SELECT * FROM Custormer 

다음과 같은 질의어를 통해 데이터를 모두 가져올 수 있다.

 

w3school에서 실습이 가능하다.

*tip 1) LIMIT을 이용하면 빠르게 데이터 구조를 파악할 수 있다. ex) SELECT * FROM Customer LIMIT 10;

만약 record 수가 10000개 이상이라면 조회 자체도 시간이 오래 걸리지만 Limit을 걸어줌으로써 10개만 빠르게 가져올 수 있다.

*tip 2) SELECT을 할때에는 *(아스카 또는 아스트릭스)를 사용하기보다 실제로 사용할 컬럼을 적어주는 것이 보기에 명확하다.

 

비교연산자와 논리연산자

비교연산자와 논리연산자는 주로 WHERE절에서 사용한다.

 

비교연산자의 경우,

= , <>, <, >, <=,>= 등이 있으며

논리연산자에는 

AND(둘다) , OR(둘중하나) 

*tip ) 비교연산자와 문자를 이용해 A로 시작하는 단어를 찾을 수 있다. 

SELECT * FROM Customers WHERE name < "B"

LIKE / IN / BETWEEN / IS NULL

LIKE 절의 경우, %(와일드카드)와 같이 사용한다. 

SELECT * FROM Customers WHERE country LIKE '%r' 이라면 'r로 끝나는 단어를 찾아줘'이다

 

쿼리와 실행 결과

특히 퍼센트(%)기호는 뒤나 앞 , 앞뒤 둘다 들어가도 상관이 없다. 앞뒤 둘다 들어가면 '문자가 들어가도, 혹은 안들어가도 r이 하나라도 있는 것을 가져와'라는 뜻이다. 

 

또한 퍼센트 기호없이 

SELECT * FROM Customers WHERE country LIKE 'B_____'

로 검색을 하면 '_' 는 어떤 문자라고 특정하지 않지만 '_'가 있는 만큼의 문자를 가져올 수 있다. ( 위의 경우는 5개)

이러한 이유로 '_' (언더바) 는 한글자 와일드카드라고도 불린다.

5 글자의 row만 가져왔다.

또한  % 자체를 찾고 싶을때는 '50\%' 처럼 '\'를 통해 퍼센트지로 실제 할인율이나 적립율이 적용된 로우를 찾을 수 있다.

( 실제로 이렇게 저장한 경우는 못본것 같다..) 또한 '__\%'는 두자리수 퍼센트지로 볼수 있다.

( 이스케이프 방식은 DB에 따라 다를 수 있다.)

 

IN의 경우 ,

SELECT * FROM Customers WHERE country IN ('Germany', 'France')

결과

SELECT * FROM Customers WHERE country = 'Germany' OR country = 'France'

와 같은 결과를 얻을 수 있다. 이렇게 되면 구문이 길어지기 때문에 IN을 활용해서 짧게 줄일 수 있다.

 

BETWEEN의 경우,

SELECT * FROM Customers WHERE CustomerID BETWEEN 3 AND 5

 

3과 5사이의 CustomerID를 가지는 Row를 가져올 수도 있다.

 

IS NULL의 경우, null값을 찾아 검색을 할 때 사용한다.

SELECT * FROM Customers WHERE CustomerID IS NULL

이라고 하면 CustomerID가 null 값인 Row를 검색하는 것 이다.

 

DISTINCT

distinct의 경우, 중복된 값을 빼준다. 예를 들어, 

https://www.hackerrank.com/challenges/weather-observation-station-6/problem

 

Weather Observation Station 6 | HackerRank

Query a list of CITY names beginning with vowels (a, e, i, o, u).

www.hackerrank.com

다음 해커랭크 문제를 살펴보면 다음과 같은 결과를 얻을 수 있다.

a,e,i,o,u로 시작하고 ,결과에는 중복이 없다고 했을 때
답안 및 정답