(전)M사 프론트엔드 개발자
(전)A사 프론트엔드 개발자
(현)S사 프론트엔드 개발자
SQL 강의 제작
[백문이불여일타] 데이터 분석을 위한 기초 SQL
[백문이불여일타] 데이터 분석을 위한 중급 SQL
[백문이불여일타] 데이터 분석을 위한 고급 SQL
참고링크
👉 Github
질문&답변
마지막 DELETE 문 부연설명 좀 부탁드립니다.
안녕하세요, 상현님! DELETE문에서 기존에 알려줬다는 내용과 달라서 똑같은 방식으로 해석이 어렵다고 하셨는데 기존에 알려줬다는 내용이 어떤 부분인지, 그리고 구체적으로 어떤 부분이 궁금한 지 알 수 있을까요? 알려주신다면 참고하여 더 자세히 답변할 수 있을 거 같습니다. 감사합니다 :)
질문&답변
블로그 작성 문의
안녕하세요! 김예지님 열심히 공부하시는 와중에도 저작물 사용에 대해 꼼꼼히 문의 주셔서 감사해요 :) 강의 내용, 문제 목록, 강사의 코드는 데이터리안 팀에서 시간과 노력을 들여 만들어 낸 컨텐츠이기 때문에 그대로 옮기는 건 지양해주셨으면 좋겠습니다. 저희 강의 내용을 토대로 작성자님이 적용하실 수 있는 데이터와 예시를 들어서 작성자님의 의견과 코드를 녹여 블로그를 작성하시면 좋을 것 같아요. 공부에도 훨씬 더 도움이 되실거에요! :) 블로그에 쓰시기 전에 먼저 상의해주셔서 다시 한 번 감사드리고, 블로그에 글 쓰시면 저희한테도 한 번 공유해주세요! 감사합니다!
질문&답변
반복을 줄이는 코드가 있을까요?
안녕하세요, noeliden1님 말씀해주신 것처럼 정규표현식을 사용하면 더 짧은 코드로 작성할 수 있습니다. SELECT DISTINCT CITY FROM STATION WHERE CITY REGEXP '^[^aeiou].*[^aeiou]$'; [백문이불여일타] 데이터 분석을 위한 고급 SQL 세션6 에서 정규표현식에 대한 강의를 진행합니다. 감사합니다 :)
질문&답변
문제해설에 대한 질의 드립니다 ㅜ
안녕하세요, hero6764님! DELETE p1 FROM Person p1 INNER JOIN Person p2 ON p1.Email = p2.Email WHERE p1.Id > p2.Id; 에서 INNER JOIN한 결과값이 아래 테이블처럼 나오게 됩니다. p1.Id | p1.Email | p2.Id | p2.Email 1 | john@example.com | 1 | john@example.com 1 | john@example.com | 3 | john@example.com 2 | bob@example.com | 2 | bob@example.com 3 | john@example.com | 1 | john@example.com 3 | john@example.com | 3 | john@example.com 이 테이블에서 WHERE 조건을 걸면 p1.Id | p1.Email | p2.Id | p2.Email 에서 3 | john@example.com | 1 | john@example.com 인 결과값이 지워지므로 p1.Id | p1.Email 테이블에서는 1 | john@example.com | 2 | bob@example.com 이 남게 됩니다. 감사합니다.
질문&답변
리트코드 196 질문입니다.
안녕하세요 Absolute님, Absolute님 ! 일단 쿼리를 돌려보면 (i), (ii) 둘다 똑같이 id가 1,2인 데이터들이 삭제되고 3만 남고 있습니다. 이 문제에서 id를 primary key로 지정했기 때문에 select가 작동이 안되기 보단 쿼리에서 문제가 있어서 id가 3인 결과값이 나오고 있습니다. 서브쿼리를 이용해서 문제를 푸는 방법으론 DELETE FROM Person WHERE Id NOT IN (SELECT * FROM( SELECT MIN(Id) FROM Person GROUP BY Email) as temp); 로 수정하면 원하는 결과값이 나옵니다. 2. 셀프 조인은 동일 테이블 안에서 이루어지는 것이기 때문에 셀프 조인이라고 할 수 있습니다. 감사합니다.
질문&답변
Runtime 질문 입니다
안녕하세요 이준호님! 예시 문제는 쿼리가 길지 않지만 실제로 쿼리를 작성할 때 길어지고 데이터 양이 많아진다는 것을 고려하면 Runtime이나 쿼리 성능을 위해서는 더 빠른 INNER JOIN을 사용하는 게 좋습니다. 경우에 따라서 다르겠지면, INNER JOIN을 사용하게 되면 추가적인 JOIN 또는 연산해야하는 data의 수가 줄기 때문에 INNER JOIN을 적절히 사용하는 것이 좋습니다. 또 보통 WHERE 절로 필터링 하는 것과 INNER JOIN은 실행시간이 같습니다. 그래서 빠른 순위를 적는다면 1. INNER JOIN 2. WHERE 필터링 3. LEFT JOIN 순서가 됩니다. 스택오버플로우에 올려진 글도 참고하시면 좋을 거 같아요. - https://stackoverflow.com/questions/2726657/inner-join-vs-left-join-performance-in-sql-server/2726683 - https://stackoverflow.com/questions/121631/inner-join-vs-where 감사합니다 :)
질문&답변
swap salary
안녕하세요 함문주님! 코드를 가져가서 LEETCODE 상에서 돌려보면 문법 오류로 돌아가지 않는 것을 확인할 수 있습니다. ELSE에서 아무런 조건을 지정해주고 있지 않아서 문제가 생기고 있습니다. CASE 표현식에서 ELSE 부분은 생략이 가능하며 만족하는 조건이 없으면 NULL 값을 리턴합니다. 그래서 UPDATE salary SET sex = CASE WHEN SEX ='m' THEN 'f' WHEN SEX ='f' THEN 'm' END; 이렇게 ELSE를 제거하고 돌리면 값이 잘 나옵니다. 감사합니다 :)
질문&답변
DML 과정에서 질문이 있습니다.
안녕하세요 tkddbs7279 님! DML는 데이터 조작어로써 DELETE, UPDATE, INSERT 명령어들은 데이터베이스의 테이블에 들어있는 데이터에 변형을 가하는 종류의 명령어 이기 때문에 기본 DB에 데이터를 삭제하거나, 수정하거나, 새로운 행을 집어넣는 등 영향을 미치게 됩니다. 감사합니다 :)
질문&답변
id 가 증가하는 숫자가 아니고 uuid나 문자열이라면 어떻게 접근해야되나요
안녕하세요 lolola님! 문자열끼리 비교를 할 때는 아스키코드(참고: https://ko.wikipedia.org/wiki/ASCII) 순서에 따라서 자리 수에 상관없이 앞자리부터 한 문자씩 비교하여 크기를 결정합니다. 또 mysql에서는 .strcamp() 함수가 있어서 두 문자열의 크기를 비교할 수도 있습니다. 아래 문서를 참고하시면 더 자세한 정보를 공부할 수 있습니다. - https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#function_strcmp - https://www.w3schools.com/sql/func_mysql_strcmp.asp 감사합니다 :) 2:20 문자열 같은 경우에는 아스키 코드 규칙에 따라서 비교하는 거니까,영어로는 대소문자 순서, 한글로는 가나다라 순서에 따라서 비교해줄 거 같은데 그렇게 비교가 된다고 작성하면 될까요?
질문&답변
delete dupicate emails 질문드려요
안녕하세요 suby0370님! 네 작성해주신 것처럼 쿼리를 실행시키고 나면 +----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | +----+------------------+ 위와 같은 결과가 나오게 됩니다. 감사합니다 :)