595. Big Countries

테이블 안 에서 각각 영역이 3M 이상 , 인구수가 25M 이상인  곳을 퍼올려서 보여주면 된다 코드는 비교적 간단하다.

# Write your MySQL query statement below
select
    name,population, area 
from world
where area >= 3000000 or  population >= 25000000;

단순한 select 문을 이용해 쿼리의 결과를 보여줄 name, population, area 를 선택하고

where 를 이용해 조건을 걸어주었다. or 를 사용해 2개의 조건을 걸어주고 Programming 언어와 유사하게 and 도 가능하다.

 

1757. Recyclable and Low Fat Products

위의 문제와 비슷하게 select 로 low fat and recyclable 을 퍼올리면 된다.

# Write your MySQL query statement below
select
    product_id
from products
where low_fats = 'Y' and recyclable = 'Y';

' ' 를 이용해 enum type 으로 주어지는 테이블의 값을 받아올수 있다. 첫번쨰 문제 와 크게 다를바 없다고 생각한다.

 

584. Find Customer Referee

커스터머 테이블 에서 추천 아아디가 2가 아닌 경우를 퍼올리는거다. 단순하게 select ,!= 을 이용해서 작성 하고 테스트를 돌려보니 
추천 아이디 1 인 zack 만 넘어오는게 아닌가.... null 이 값에 포함되어 있는경우 not null 혹은 is null 과 같은 추가 코드를 작성해야 null 값을 핸들링 해줄수 있다... 자칫 잘못하다간 select 내의 다른값이 업데이트 되는경우가 있으니 주의하자.

# Write your MySQL query statement below
select
    name
from customer
where referee_id != 2 or referee_id IS NULL;

 

183. Customers Who Never Order

 

query 로 커스터머, 주문을 한번도 한적이 없는 coustomers 의 이름을 받아 오는것이다. 음 이제는 생각을 좀 해서 작성해야한다.

이중 쿼리로 작성해서 데이터를 받아올 생각을 했다.

# Write your MySQL query statement below
select name as Customers
    from customers
where id not in (select customerId from orders);

최초 작성을 id is not 을 작성했더니 select 로 받아오는 값이 여러개 의 값이여서 에러가 난다고 한다... 이 부분을 해결해 주기 위해 찾다보니 not in 이라는 조건이 존재하더라..  not in/in (여러개의 값) 을 이용해서 필요한 부분만 을 필터링 해서 사용해줄수 있다. 처음 알았다...뭔가 영어 그대로 직관적인데 왜 이 방법이 즉각적으로 떠오르지 않았는지 ...  이 풀이 외에 조인을 이용해서 풀이한 사람들도 있다.
바로 도전해봤다.(구글과 함께..)

# Write your MySQL query statement below
select c.name,o.customerId
    from customers as c 
        left join orders as o
        on c.id = o.customerId;

우선 left join 을 잘모르기 떄문에 한줄씩 테스트를 해보자. 이런식으로 결과값을 받아보니 name,id ["값","값"] 이런식으로 넘어오는데... Customers 에는 id 가 있지만 . order 에는 customerId 에 없다면, null 값으로 리턴해주는것이아닌가... 그러면 null 인 값들의 name 만 반환해준다면 답인것이다..

# Write your MySQL query statement below
select c.name,o.customerId
    from customers as c 
        left join orders as o
        on c.id = o.customerId
    where o.customerId is null;

그냥 사용만했지 정확히 어떠한 기능을 하는지 알아보자

Join 에는 두가지 종류가 있다. Inner Join , Outer Join

1. Inner Join

Select <열목록>
From <첫번째 테이블>
	Inner Join<두번쨰 테이블>
    On <조건>
Where [검색조건]

과 같이 되는데 ... inner 라는 부분은 생략이 가능하다더라.. 대신 이 조인을 이용해 sql을 퍼오릴 경우는 두테이블 모두 있는 내용만 조인되는 방식이다. , 위의 문제 처럼 한곳에 있는 내용을 조인하기 위해서 사용 되는것이 외부 조인이다.

 

2. Outer Join

Select <열목록>
From <첫번째 테이블(Left 테이블)>
	<Left | Right | Full> Outer join <두번째 테이블(Right 테이블)>
    On <조건>
Where [검색조건]

내부조인 보다는 조금 더 복잡하지만, 사용법은 비슷하다. left outer join 은 적어도 왼쪽의 내용은 모두 퍼올리다는 의미이다. 그래서 is null 을 이용한 검색 조건을 이용한다면  left 테이블 의 차집합 ? 값만 퍼올린다고 이해했다.
위에는 outer 부분이 생략되어 있는데 inner 와 동일하게 생략이 가능하다. 구글에 검색해보니 큰차이는 없고 오히려 left join 이 보다 직관적이여서 이걸 추천하는 사람들도 종종 보인다.

 

확실히 SQL 은 연습을 많이안한건지 딱바로바로 생각이 떠오르지 않는다.

+ Recent posts