[LeetCode/MySQL]196. Delete Duplicate Emails
·
코딩테스트/LeetCode
문제Delete Duplicate Emails문제 풀이DELETE p1FROM Person p1JOIN Person p2ON p1.email=p2.email AND p1.id>p2.id이메일을 가진 두 레코드를 JOIN하여 비교한다.id가 더 큰 쪽을 삭제한다.따라서 id가 같다면 아무 행도 삭제되지 않는다.
[LeetCode/MySQL]183. Customers Who Never Order
·
코딩테스트/LeetCode
문제Customers Who Never Order고객 중 단 한 번도 주문한 적이 없는 고객의 이름(name) 을 출력하는 문제였다.문제 풀이SELECT name AS CustomersFROM CustomersLEFT JOIN OrdersON Customers.id=Orders.customerIdWHERE Orders.customerId IS NULL;Customers: 전체 고객 집합(Joe, Henry, Sam, Max)Orders: 주문한 고객 집합(Joe, Sam)이 문제는 결국 Customers 집합에서 Orders 집합을 뺀 차집합(Henry, Max)을 구하는 것과 같다.
[LeetCode/MySQL]182. Duplicate Emails
·
코딩테스트/LeetCode
문제Duplicate EmailsPerson 테이블에서 중복된 이메일 주소만 출력하는 문제였다.문제 풀이내가 생각한 풀이SELECT email AS Email FROM PersonGROUP BY emailHAVING COUNT(email)>1;GROUP BY로 email을 기준으로 그룹을 만든다.HAVING으로 같은 이메일이 2번 이상 등장한 경우만 선택한다.결과적으로 중복된 이메일만 출력된다!다른 사람의 풀이SELECT DISTINCT p1.email AS EmailFROM Person p1, Person p2WHERE p1.idp2.id AND p1.email=p2.email;같은 테이블을 두 번 사용해서 자기 자신과 비교한다.조건(p1.idp2.id)으로 같은 사람끼리 비교하지 않도록 한다.조건(p..
[LeetCode/MySQL]181. Employees Earning More Than Their Managers
·
코딩테스트/LeetCode
문제Employees Earning More Than Their Managers Employee 테이블이 주어졌을 때, 직속 상사(manager)보다 더 많은 급여(salary)를 받는 직원(employee)의 이름(name)을 출력하는 문제였다.문제 풀이INNER JOIN은 조인 조건을 만족하는 데이터만 결과에 포함되므로, 매니저가 실제로 존재하는 직원만 비교 대상에 포함된다.SELECT e1.name AS Employee FROM Employee e1INNER JOIN Employee e2ON e1.managerId=e2.idWHERE e1.salary>e2.salarySELECT e1.name AS Employee FROM Employee e1, Employee e2WHERE e1.managerId..
[LeetCode/MySQL]175. Combine Two Tables
·
코딩테스트/LeetCode
문제Combine Two Tables두 테이블 Person과 Address가 주어질 때 모든 사람의 이름(name), 성(lastName), 주소(city, state)를 출력하되 주소가 없는 사람도 결과에 포함되도록 하는 문제였다.문제 풀이Person 테이블에 있는 정보를 모두 가져오고 Address 테이블에 있는 정보는 없으면 NULL을 출력하는 문제였다. 따라서 LEFT JOIN을 사용해서 문제를 풀어줬다. FROM 절 뒤에 오는 테이블이 왼쪽 테이블이라고 간주된다.SELECT P.firstName, P.lastName, A.city, A.stateFROM Person PLEFT JOIN Address A ON P.personId=A.personId;LEFT JOIN: 왼쪽 테이블의 모든 데이터를 ..