From 7c17cf238fabffae3a5442fb72605ac5f323a4ec Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sat, 12 May 2018 21:01:57 +0800 Subject: [PATCH] auto commit --- ...code-Database \351\242\230\350\247\243.md" | 216 +++++++++++++++++- 1 file changed, 208 insertions(+), 8 deletions(-) diff --git "a/notes/Leetcode-Database \351\242\230\350\247\243.md" "b/notes/Leetcode-Database \351\242\230\350\247\243.md" index 9d5e5c0c..a38deb95 100644 --- "a/notes/Leetcode-Database \351\242\230\350\247\243.md" +++ "b/notes/Leetcode-Database \351\242\230\350\247\243.md" @@ -1,5 +1,8 @@ * [175. Combine Two Tables](#175-combine-two-tables) +* [181. Employees Earning More Than Their Managers](#181-employees-earning-more-than-their-managers) +* [183. Customers Who Never Order](#183-customers-who-never-order) +* [184. Department Highest Salary](#184-department-highest-salary) * [未完待续...](#未完待续) @@ -8,9 +11,9 @@ https://leetcode.com/problems/combine-two-tables/description/ -## Describe +## Description -Table: Person +Person 表: ```html +-------------+---------+ @@ -23,7 +26,7 @@ Table: Person PersonId is the primary key column for this table. ``` -Table: Address +Address 表: ```html +-------------+---------+ @@ -37,18 +40,18 @@ Table: Address AddressId is the primary key column for this table. ``` -取出 FirstName, LastName, City, State 数据,而不管一个用户有没有填地址信息。 +查找 FirstName, LastName, City, State 数据,而不管一个用户有没有填地址信息。 ## SQL Schema ```sql +DROP TABLE Person; CREATE TABLE Person ( PersonId INT, FirstName VARCHAR ( 255 ), LastName VARCHAR ( 255 ) ); +DROP TABLE Address; CREATE TABLE Address ( AddressId INT, PersonId INT, City VARCHAR ( 255 ), State VARCHAR ( 255 ) ); -TRUNCATE TABLE Person; INSERT INTO Person ( PersonId, LastName, FirstName ) VALUES ( 1, 'Wang', 'Allen' ); -TRUNCATE TABLE Address; INSERT INTO Address ( AddressId, PersonId, City, State ) VALUES ( 1, 2, 'New York City', 'New York' ); @@ -60,8 +63,205 @@ VALUES ```sql SELECT FirstName, LastName, City, State -FROM Person AS p LEFT JOIN address AS a -ON p.PersonId = a.PersonId; +FROM Person AS P LEFT JOIN Address AS A +ON P.PersonId = A.PersonId; +``` + +# 181. Employees Earning More Than Their Managers + +https://leetcode.com/problems/employees-earning-more-than-their-managers/description/ + +## Description + +Employee 表: + +```html ++----+-------+--------+-----------+ +| Id | Name | Salary | ManagerId | ++----+-------+--------+-----------+ +| 1 | Joe | 70000 | 3 | +| 2 | Henry | 80000 | 4 | +| 3 | Sam | 60000 | NULL | +| 4 | Max | 90000 | NULL | ++----+-------+--------+-----------+ +``` + +查找所有员工,它们的薪资大于其经理薪资。 + +## SQL Schema + +```sql +DROP TABLE Employee; +CREATE TABLE Employee ( Id INT, NAME VARCHAR ( 255 ), Salary INT, ManagerId INT ); +INSERT INTO Employee ( Id, NAME, Salary, ManagerId ) +VALUES + ( '1', 'Joe', '70000', '3' ), + ( '2', 'Henry', '80000', '4' ), + ( '3', 'Sam', '60000', NULL ), + ( '4', 'Max', '90000', NULL ); +``` + +## Solution + +```sql +SELECT E1.Name AS Employee +FROM Employee AS E1, Employee AS E2 +WHERE E1.ManagerId = E2.Id AND E1.Salary > E2.Salary; +``` + +# 183. Customers Who Never Order + +https://leetcode.com/problems/customers-who-never-order/description/ + +## Description + +Curstomers 表: + +```html ++----+-------+ +| Id | Name | ++----+-------+ +| 1 | Joe | +| 2 | Henry | +| 3 | Sam | +| 4 | Max | ++----+-------+ +``` + +Orders 表: + +```html ++----+------------+ +| Id | CustomerId | ++----+------------+ +| 1 | 3 | +| 2 | 1 | ++----+------------+ +``` + +查找没有订单的顾客信息: + +```html ++-----------+ +| Customers | ++-----------+ +| Henry | +| Max | ++-----------+ +``` + +## SQL Schema + +```sql +DROP TABLE Customers; +CREATE TABLE Customers ( Id INT, NAME VARCHAR ( 255 ) ); +DROP TABLE Orders; +CREATE TABLE Orders ( Id INT, CustomerId INT ); +INSERT INTO Customers ( Id, NAME ) +VALUES + ( '1', 'Joe' ), + ( '2', 'Henry' ), + ( '3', 'Sam' ), + ( '4', 'Max' ); +INSERT INTO Orders ( Id, CustomerId ) +VALUES + ( '1', '3' ), + ( '2', '1' ); +``` + +## Solution + +左外链接 + +```sql +SELECT C.Name AS Customers +FROM Customers AS C LEFT JOIN Orders AS O +ON C.Id = O.CustomerId +WHERE O.CustomerId IS NULL; +``` + +子查询 + +```sql +SELECT C.Name AS Customers +FROM Customers AS C +WHERE C.Id NOT IN ( + SELECT CustomerId + FROM Orders +); +``` + +# 184. Department Highest Salary + +https://leetcode.com/problems/department-highest-salary/description/ + +## Description + +Employee 表: + +```html ++----+-------+--------+--------------+ +| Id | Name | Salary | DepartmentId | ++----+-------+--------+--------------+ +| 1 | Joe | 70000 | 1 | +| 2 | Henry | 80000 | 2 | +| 3 | Sam | 60000 | 2 | +| 4 | Max | 90000 | 1 | ++----+-------+--------+--------------+ +``` + +Department 表: + +```html ++----+----------+ +| Id | Name | ++----+----------+ +| 1 | IT | +| 2 | Sales | ++----+----------+ +``` + +查找一个 Department 中收入最高者的信息: + +```html ++------------+----------+--------+ +| Department | Employee | Salary | ++------------+----------+--------+ +| IT | Max | 90000 | +| Sales | Henry | 80000 | ++------------+----------+--------+ +``` + +## SQL Schema + +```sql +DROP TABLE Employee; +CREATE TABLE Employee ( Id INT, NAME VARCHAR ( 255 ), Salary INT, DepartmentId INT ); +DROP TABLE Department; +CREATE TABLE Department ( Id INT, NAME VARCHAR ( 255 ) ); +INSERT INTO Employee ( Id, NAME, Salary, DepartmentId ) +VALUES + ( 1, 'Joe', 70000, 1 ), + ( 2, 'Henry', 80000, 2 ), + ( 3, 'Sam', 60000, 2 ), + ( 4, 'Max', 90000, 1 ); +INSERT INTO Department ( Id, NAME ) +VALUES + ( 1, 'IT' ), + ( 2, 'Sales' ); +``` + +## Solution + +```sql +SELECT D.Name AS Department, E.Name AS Employee, E.Salary +FROM Employee AS E, Department AS D, + (SELECT DepartmentId, MAX(Salary) AS Salary + FROM Employee + GROUP BY DepartmentId) AS M +WHERE E.DepartmentId = D.Id + AND E.DepartmentId = M.DepartmentId + AND E.Salary = M.Salary; ``` # 未完待续... -- GitLab