Skip to content

Commit adc194c

Browse files
committed
修改 数据库.md
1 parent 3b210bd commit adc194c

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

LeetCode/数据库.md

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ SELECT Email FROM Person GROUP BY Email HAVING COUNT(Email) >= 2;
134134

135135
```mysql
136136
# Write your MySQL query statement below
137+
137138
```
138139

139140

@@ -177,7 +178,7 @@ SELECT Email FROM Person GROUP BY Email HAVING COUNT(Email) >= 2;
177178

178179
```mysql
179180
# Write your MySQL query statement below
180-
SELECT * FROM cinema WHERE description != 'boring' AND id%2 = 1
181+
SELECT * FROM cinema WHERE description != 'boring' AND id % 2 = 1
181182
ORDER BY rating DESC;
182183
```
183184

@@ -224,6 +225,8 @@ FirstName, LastName, City, State
224225

225226
### 解答
226227

228+
考察左连接 `LEFT JOIN` 的用法
229+
227230
```mysql
228231
# Write your MySQL query statement below
229232
SELECT FirstName,LastName,City,State FROM Person LEFT JOIN Address ON Person.PersonId = Address.PersonId;
@@ -260,13 +263,19 @@ SELECT FirstName,LastName,City,State FROM Person LEFT JOIN Address ON Person.Per
260263

261264
### 解答
262265

266+
#### 方法1
267+
268+
对同一个表进行**连接**,过滤条件是 `e1.ManagerId = e2.Id AND e1.Salary > e2.Salary`
269+
263270
```mysql
264271
# Write your MySQL query statement below
265272
SELECT e1.name AS Employee FROM Employee AS e1,Employee AS e2
266273
WHERE e1.ManagerId = e2.Id AND e1.Salary > e2.Salary;
267274
```
268275

276+
#### 方法2
269277

278+
思路同**方法1**,连接方式变为`join...on...`
270279

271280
```mysql
272281
# Write your MySQL query statement below
@@ -321,6 +330,8 @@ on a.managerid=b.id and a.salary>=b.salary;
321330

322331
#### 方法1
323332

333+
利用子查询过滤,找出表`Customers`中的`Id`不在表`Orders``CustomersId`中的那些行。
334+
324335
```mysql
325336
# Write your MySQL query statement below
326337
#select a.name as Customers from customers a join orders b on a.id = b.customerid;
@@ -331,6 +342,8 @@ where id not in
331342

332343
#### 方法2
333344

345+
`Customers``Orders`两个表进行左连接,连接条件是`Customers.Id = Orders.CustomersId`,那么连接之后`Orders`表中`Id`列为空的那些行即为所求。
346+
334347
```mysql
335348
# Write your MySQL query statement below
336349
select c.name as Customers from customers as c left join orders as o
@@ -370,7 +383,9 @@ Id 是这个表的主键。
370383

371384
### 解答
372385

373-
由于 *MYSQL* 不能先`select`一个表的记录,然后在按此条件进行更新和删除同一个表的记录删除数据。因此创建临时表进行过渡
386+
对于重复的邮箱,保留`Id`最小的,相当于是以`Email`作为分组,保留每一组`Id`最小的那些行。
387+
388+
**注意**:由于 *MYSQL* 不能先`select`一个表的记录,然后在按此条件进行更新和删除同一个表的记录删除数据。因此创建临时表进行过渡。
374389

375390
```mysql
376391
# Write your MySQL query statement below
@@ -410,13 +425,21 @@ delete from person where id not in
410425

411426
### 解答
412427

428+
对同一个表`Weather`创建两个临时表`a``b`进行连接,连接条件是:`a``recorddate``b``recorddate`大1并且`a``temperature`大于`b``temperature`
429+
430+
#### 方法1
431+
432+
利用`datediff`函数
433+
413434
```mysql
414435
# Write your MySQL query statement below
415436
select a.id from weather as a join weather as b
416437
on datediff(a.recorddate,b.recorddate) = 1 and a.temperature > b.temperature;
417438
```
418439

440+
#### 方法2
419441

442+
利用`subdate`函数。
420443

421444
```mysql
422445
# Write your MySQL query statement below
@@ -467,6 +490,10 @@ on (a.temperature > b.temperature and subdate(a.RecordDate,1) = b.RecordDate);
467490

468491
### 解答
469492

493+
以课程`class`进行分组,过滤出学生数不小于5的即可。
494+
495+
**注意**:加上`distinct`关键字过滤重复的学生。
496+
470497
```mysql
471498
# Write your MySQL query statement below
472499
select class from courses group by class having count(distinct student) >= 5;

0 commit comments

Comments
 (0)