SQL语句按照最大的类别分为
1、增加 insert
2、删除 delete https://www.cnblogs.com/kuangmeng/p/17756654.html
3、修改update
4、查询 select : https://www.cnblogs.com/kuangmeng/p/17756425.html
这一部分为delete 删除操作,以及对应的Leecode题,进行加深印象。通常 delete from 表名 ,这条SQL语句代表删除表名的所有数据。
这里为了加深自己的印象,先介绍一下自连接 与 笛卡尔积连接的区别:
自连接:同一张表被当做不同的表进行连接。只能通过where设置条件,而不能通过on。
笛卡尔积连接:对两个关系R和S进行操作,产生的关系中元组个数为两个关系中元组个数之积。
PS:没有条件的时候是笛卡尔积连接(多张表),有条件时是自连接。
解题思路:多个重复, 保留一个。 按照条件来删除 拟定采用 delete 和 where 。
采用自连接的方式 ,按照表中3条数据的方式,再加入p1.Email = p2.Email条件,p1.id > p2.id条件。
delete p1 FROM Person as p1, Person as p2 WHERE p1.Email = p2.Email and p1.id > p2.id;
题解:采用 DATEDIFF(w1.recordDate,w2.recordDate) = 1,来判断 w1.recordDate - w2.recordDate = 1。
-
select:用于选择要返回的列。例如,SELECT column1, column2 FROM table;
-
from:用于指定要查询的表。例如,FROM table;
-
join:用于将两个或多个表连接起来。例如,JOIN table1 ON table1.column = table2.column;
-
on:用于指定连接条件。例如,ON table1.column = table2.column;
-
where:用于指定过滤条件。例如,WHERE table1.column = value;
# SQL 比较 自连接 select w1.id as 'Id' from Weather w1 JOIN Weather w2 on DATEDIFF(w1.recordDate,w2.recordDate) = 1 where w1.Temperature > w2.Temperature;
题解:针对 两个表,存在输出的情况为null的情况,采用 left join
对于null,采用 is null 来判断。
# 两个表 select a.name,b.bonus from Employee as a left join Bonus as b on a.empId = b.empId where b.bonus < 1000 or b.bonus is null ;
题解:找出那些 没有被 id = 2
的客户 推荐 的客户的姓名。 拟采用 != 和 is null 的方式
select name from Customer where referee_id != 2 or referee_id is null;
通过查看题解,得知 在SQL 语句中,<> 和 != 的作用一致。
题解:查找下了 最多订单 的客户的 customer_number。
解释:一个表中,customer_number 对应的 order_number 最多的个数。
采用 DESC:降序排列 、ORDER BY :由某个值进行排序 LIMIT:取值个数 。
# 题解:肯定有一个客户 是最多的 ,存在多笔订单的情况 订单个数,不是订单的和 SELECT customer_number FROM Orders GROUP BY customer_number ORDER BY count(*) DESC LIMIT 1;