写立扣mysql题目收获

练习大纲:

立扣上的sql语句题

学习中的易错点和有趣的题目

总结了下常用的关键词和技巧

  1. SELECT: 用于选择要检索的列。
  2. FROM: 用于指定要查询的表。
  3. WHERE: 用于过滤行,只返回满足条件的行。
  4. GROUP BY: 用于将结果集按一列或多列分组。
  5. HAVING: 与GROUP BY一起使用,用于过滤分组后的结果集。
  6. ORDER BY: 用于对结果集进行排序。
  7. LIMIT: 用于限制结果集的行数。
  8. JOIN: 用于在多个表之间建立连接。
  9. LEFT JOIN (OUTER JOIN): 返回左表中所有的行,以及右表中匹配的行。如果右表中没有匹配的行,将返回NULL。
  10. INNER JOIN: 返回两个表中匹配的行。
  11. ON: 用于指定JOIN条件。
  12. AND, OR: 用于组合多个条件。
  13. DISTINCT: 用于返回唯一不同的值。
  14. LIKE: 用于在WHERE子句中进行模糊搜索。
  15. IN: 用于指定条件范围,类似于多个OR条件的缩写。
  16. BETWEEN: 用于指定范围。
  17. AS: 用于为列或表指定别名。
  18. ASC (升序) / DESC (降序): 用于指定排序顺序。
  19. NOT NULL: 用于过滤出不包含NULL值的行。
  20. SET: 用于更新表中的数据。
  21. COUNT(): 用于计算结果集中行的数量。
  22. SUM() / AVG() / MIN() / MAX(): 用于计算列的总和、平均值、最小值和最大值。
  23. GROUP_CONCAT(): 用于将组内行的值连接为一个字符串。
  24. if(判断条件 ,为真结果,为假结果),为真选前,为假选后。
  25. CASE WHEN …then…WHEN …then…:用于在查询中执行条件判断。
  26. UNION / UNION ALL: 用于合并两个或多个SELECT语句的结果集。UNION删除重复的行,而UNION ALL包含重复的行。
  27. INTERVAL 1 DAY :用于指定时间间隔,其目的是提供一种通用的方式来表示一段时间。使用 INTERVAL 语法的好处是它可以支持多种时间单位,如天、小时、分钟等。
  28. 求数据出现次数最多的技巧:order by count(*) desc limit 1; 统计次数并从大到小排序,只选第一条就是最大值了;
  29. 求数据值相加起来的合的技巧:正常就是一个sum,但当有其他前提,比如,小明在周2一共上了几次厕所这种,就需要group by name,day;做条件,懂了吧?
  30. ifnull:用法:ifnull(判断值,指定值),当判断的值为null时,转换为指定值,否则还是原值;

. - 力扣(LeetCode)

修复表中的名字

表: Users

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| user_id        | int     |
| name           | varchar |
+----------------+---------+
user_id 是该表的主键(具有唯一值的列)。
该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。

编写解决方案,修复名字,使得只有第一个字符是大写的,其余都是小写的。

返回按 user_id 排序的结果表。

思路:需要把name字段内容分开分析,分为首字母和剩余部分,首字母用upper方法大写,其余字母用lower方法小写,用concat方法拼接,而upper中需要用left(name,1)表示name的第一个字母,用right(name,length(name-1))表示name除第一个字母外的其余字母,完整拼接如下:

concat(upper(left(name,1)),lower(right(name,length(name)-1)))as name

完整语句如下:

select  user_id,
concat(upper(left(name,1)),lower(right(name,length(name)-1)))as name
from Users
order by user_id;

难点:知道concat,upper,left,right关键字的用法;

从中也能发现sql学习是建立在熟练使用关键字的基础上的!

有意思的题目:

变更性别

Salary 表:

+-------------+----------+
| Column Name | Type     |
+-------------+----------+
| id          | int      |
| name        | varchar  |
| sex         | ENUM     |
| salary      | int      |
+-------------+----------+
id 是这个表的主键(具有唯一值的列)。
sex 这一列的值是 ENUM 类型,只能从 ('m', 'f') 中取。
本表包含公司雇员的信息。

请你编写一个解决方案来交换所有的 'f''m' (即,将所有 'f' 变为 'm' ,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表。

熟练一眼就能看出答案,但如果不知道if这个关键字就会很麻烦

update Salary

set sex=if(sex='f','m','f');

607. 销售员 - 力扣(LeetCode)

这个挺好玩

可以直接多个join…on-把表都连接起来,再用not in查询不在范围内的,即

select name from SalesPerson where name not in
(select SalesPerson.name as name from SalesPerson 
join Orders on Orders.sales_id=SalesPerson.sales_id
join Company on Company.com_id=Orders.com_id
where Company.name='RED') 


也可以用多个where,select一步步查询,即

select name from SalesPerson where sales_id not in 
(select sales_id from orders where com_id in 
(select com_id from company where name='RED'));

这些只是写了30多道题总结的,只后会更新关键字,直到刷完100题~!

你可能感兴趣的:(mysql,android,数据库)