1. SQL on과 where 절의 차이.
일단 sql문의 실행 순서 중 일부를 보면 from -> on -> join -> where 순이다.
위에 적힌대로 join을 하기 전에 on을 실행한다.
아래와 같은 sql문이 있다면 join을 실행하기전에 먼저 o.ANIMAL_ID = i.ANIMAL_ID을 실행한다. 이때 ANIMAL_OUTS 기준으로 하는 left join이기 때문에
SELECT * from ANIMAL_OUTS o left join ANIMAL_INS i on o.ANIMAL_ID = i.ANIMAL_ID ;
o.ANIMAL_ID = i.ANIMAL_ID 조건에 해당이 되지 않는 row의 ANIMAL_INS는 null값이 되므로 출력되지 않는다. 사진 첨부.
난 이걸 모르고 on 절에다가 is null인것도 같이 찾으려고 했다.
SELECT * from ANIMAL_OUTS o left join ANIMAL_INS i on o.name = i.name and i.name is null;
이 sql문의 i.name is null은 아무 의미가 없다. 왜냐면 앞의 o.name = i.name 이 부분이 동작을 제대로 했다면 left join이기 때문에 i.name is null 문구는 무조건 true이기 때문이다. 즉 이미 null값을 다 찾은 상태의 출력인데 또 한번 null체크를 할뿐인것이다.
2. sql 상위3개, 하위3개 상위 x번부터 x번까지 이렇게 출력하고 싶으면 order by와 limit을 사용하면 된다.
정렬을 내림차순으로 해두고(order by desc) limit 3을 하면 상위 3개를 가져오고
오름차순으로 해두고 limit 3을 하면 하위 3개이다.
또 그 중에서 x부터 y개를 가져오고 싶다면 limit x-1,y 를 하면 된다. x-1인 이유는 index로 시작이라서 0번부터라서이다.
예를들어 4번째부터 4개를 뽑아오고 싶다면 limit 3, 4를 하면 된다.
3. javascript에서 for...in은 배열에서는 사용해서는 안된다. index값만 나온다. 물론 index값만 필요할때는 써도 되지만 객체에서만 써야한다.
4. javascript에서 replace나 replaceAll은 성능이 좋지 않은 것 같다. 동일한 문제를 푸는데 replace로 풀면 시간초과가 난다.
https://school.programmers.co.kr/learn/courses/30/lessons/133502 프로그래머스 문제!
5. 알고리즘 문제에서 숫자를 통해서 해결하는 문제에서 시간복잡도가 중요하다면 0~9로 해결을 할 수 있는지 생각하자.