일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 1
- Component
- DispatcherServlet
- layout #thymeleaf #화면분할
- Bean
- 스프링 부트
- autowired
- 오토와이어드
- 스프링
- git #gitlab #github
- zepettoworld.com
- spring
- Today
- Total
기록과 정리
데이터 꺼내오기 (SELECT) - 기본 본문
이 글은 '[백문이불여일타] 데이터 분석을 위한 기초 SQL' 강의를 참고하였습니다.
[백문이불여일타] 데이터 분석을 위한 기초 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
다음과 같은 질의어를 통해 데이터를 모두 가져올 수 있다.
*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개)
이러한 이유로 '_' (언더바) 는 한글자 와일드카드라고도 불린다.
또한 % 자체를 찾고 싶을때는 '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
다음 해커랭크 문제를 살펴보면 다음과 같은 결과를 얻을 수 있다.
'IT > DB' 카테고리의 다른 글
SQL-JOIN (0) | 2021.09.01 |
---|---|
SQL 조건문 - CASE (0) | 2021.09.01 |
데이터 요약 GROUP BY & HAVING (0) | 2021.08.22 |
집계함수(COUNT/SUM/AVG/MIN/MAX) (0) | 2021.08.22 |
데이터 꺼내오기 (ORDER BY / SUBSTR,RIGTH,LEFT - 문자열자르기 / ROUND/CEIL/FLOOR - 소수점) (0) | 2021.08.16 |