forDevLife
[SQL] 기초 연습 본문
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 |