Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[SQL] 기초 연습 본문

Database

[SQL] 기초 연습

JH_Lucid 2021. 8. 17. 22:13

1. SELECT 기초

 

IN (~)을 통해 괄호안의 name을 가진 행을 조회한다.

 

 

 

name LIKE '~'를 통해 해당 이름을 가진 나라를 고를 수 있다.

United% -> United를 맨 앞에 가지고 있는 행 선택

%United -> United를 맨 뒤에 가지고 있는 행 선택

%United% -> 위 두개를 합친 효과를 가진다.

 

 

XOR은 위와 같이 (AND) OR (AND)로 표현할 수 있다.

 

 

- 0이면 1의 자리에서 올림 

- -1이면 소숫점 첫째까지 표현

- -3이면 천의 자리까지만 표현하고, 백의자리는 올리거나 내림 

 

The number of decimal places may be negative, this will round to the nearest 10 (when p is -1) or 100 (when p is -2) or 1000 (when p is -3) etc..

 

 

 

ROUND(~, -3)이므로 백의자리는 버리고 천의자리까지 표현한다.

 

 

len을 통해 길이를 비교할 수 있다.

 

 

LEFT(name, 1) -> name에서 맨 첫번째 글자 가져오기

<> -> Not Equal

 

 

name LIKE / name Not LIKE를 통해 여러 조건을 나열해서 추출할 수 있다.

 


between을 통해 1980 <= yr <= 1989와 동일한 결과를 출력할 수 있다.

 

 

복습 : LIKE -> %를 이용한 추출

 

 

괄호를 통해 AND로 묶인 조건에 해당하는 행을 각각 추출해준다.

 

 

NOT을 통해 부정할 수 있다. (IN, LIKE 등의 앞에 사용될 수 있다.)

 

 

 

숫자에  ' '를 써도 안써도 동일한 결과이다. -> 따옴표 없이 숫자만 입력한다.

 

 

움라우트 쓰기 어려우므로 %로 지름 ㅎㅎㅋㅋ

 

 

Apostrophe '를 SELECT문에 표현하기 위해서 ''를 사용할 수 있다.

 

 

order by -> 정렬한다. 

yr DESC : 맨처음에는 yr로 정렬한다. 기본은 오름차순인데 DESC 까지 합쳐서 내림차순으로 진행한다.

winner : 위의 정렬에 추가로 winner로 정렬한다. 기본은 오름차순이다.

 

 

의도는, 'Chemistry', 'Physics'는 맨 뒤로 정렬하고, subject 오름차순 -> winner 오름차순을 적용하는 것이다.

subject IN()을 통해 여기에 해당하는 subject에 1을 할당, 아닌거에 0을 할당하게 되면 자동으로 아닌것들이 맨 앞으로 올 수 있게 된다.

 

다음처럼 CASE WHEN을 이용해서 1 / 0을 할당한 것과 동일하다.

 

 


population -> SELECT population을 통해 전달 가능하다.

 

 

WHERE의 조건에 SELECT를 넘겼다(서브쿼리)

그리고 AND를 통해 Europe인 것만 걸러냈다.

 

 

continent를 골라야 한다 -> IN 안에서 

IN에는 'Argentina', 'Australia'의 대륙 목록이 들어간다.

 

 

Between ~ and ~ 사용하면 캐나다랑 폴란드가 포함되어버린다.

따라서 각각 select를 통해 population을 구하고 범위를 지정한다.

 

 

CONCAT() -> ,를 기준으로 연달아 String을 생성해준다.

ROUND(숫자, 0) -> 1의 자리까지만 표시해준다.

as '~' ->  ~ 이름으로 column을 변경해준다.

 

 

You need the condition population>0 in the sub-query as some countries have null for population.

sub-query에 의해 유럽 모든 gdp가 불러지게 되고, ALL에 의해 불러진 모든 대상에 대해서 비교할 수 있다.

 

 

>= ALL(sub query) -> sub query의 결과 대상을 모두 x.area(area)와 크기비교를 한다.

FROM world AS x 에서 'AS'는 생략 가능하다.

>=를 통해 최종 값이 포함될 수 있도록 해야한다.

 

 

대륙별로 뽑기 위해 7과 마찬가지로 continent가 같은 것끼리 ALL 비교를 진행한다. name도 부등호로 비교할 수 있다.

 

 

문제는 모든 국가의 인구가 25000000 미만인 대륙을 찾은 다음, 이 대륙과 관련된 국가의 이름을 찾는 것이다.

x의 대륙과 같은 대륙을 찾아내고 그 대륙의 나라의 모든 인구수를 비교한다.

이렇게 하면 x의 각 대륙의 모든 인구수를  비교할 수 있다. ALL은 AND조건을 거는 것과 같으므로.

25000000 >= ALL(유럽 나라1 인구수, 유럽 나라2 인구수, 유럽 나라3 인구수 ...) -> 통과 안됨

25000000 >= ALL(카리브해 나라1 인구수, 카리브해 나라2 인구수, 카리브해 나라3 인구수 ...) -> 카리브해 통과!

25000000 >= ALL(영국 나라1 인구수, 영국 나라2 인구수, 영국 나라3 인구수 ...) -> 통과 안됨

이런 식이다.

 

 

이웃 대륙이기 때문에 x.name과 y.name이 같으면 빼줘야 한다. 그렇지 않으면 러시아 인구 >= 러시아 인구 *3 이라는 말도 안되는 식의 조건을 걸게 되어 답이 출력되지 않는다. 

 

 

(SELECT 서브쿼리) : SELECT문, FROM문, WHERE문 등등에 사용할 수 있다.

IN : 리턴 값 중 하나라도 만족하면 참이다.

ALL : 리턴 값 모두를 만족해야 참이다.

ANY, SOME : 리턴 값 중 하나라도 만족하면 참이다.

EXISTS : 리턴 값 중 하나라도 만족하면 참이다.
AS : 치환

 

 

QUIZ

MAX(gdp) -> 모이는 gdp 중에서 가장 큰 한가지 값을 찾는다. 다 비교할 필요 없다.

 

'Database' 카테고리의 다른 글

[Redis] 간단 사용법  (0) 2021.08.25
[SQL] 기초 연습 - JOIN  (0) 2021.08.18
[BoostCourse]1. SQL  (0) 2021.06.03
[인프런] <Chap 3> MySQL 기본  (0) 2021.06.02
[인프런] <Chap 2> MySQL 서론  (0) 2021.06.02
Comments