介绍
这是我作为没有实践经验的网络工程师加入公司后两个月内接受的内部培训的回顾。
SQL 数据检索(选择语句) 并比较 SQL 语句的前后。
文章的目的
同时,(其他公司的)没有实践经验的成为Web工程师并进行互动的人,
“我很想听听其他人的早期进展。”
正如我所说,我只有机会在培训期间对我编写的代码进行审查,但我想分享一下审查教会了我什么。
通过回顾,我会检查我是否在当下而不忘记。
目标读者
目标读者是没有实践经验的初学者。 (我写这个假设我过去的自我)
什么样的内部培训?
内部培训通常是关于 Web 开发的基本培训,并具有以下课程。
- PHP 基础知识(PHP,面向对象)
- 数据库基础知识(SQL、MySQL)
- Web 应用程序基础(HTML、CSS、CRUD、Cookie、会话)
解决这些内容的问题,在GitLab上提出合并请求,内部工程师这是从人们那里获得评论的流程。
* PHP 基础相关文章
例如,SQL 问题类似于以下内容。
创建一个输出产品表所有内容的 SQL
这样一来,大概有20道题,询问对SQL基本语法的理解,我们会改正,直到获得OK为止。
* 存在数据获取、数据操作、表操作、事务等问题。
目录
这次,关于“数据库基础”的主题,SQL 数据检索(选择语句),我想以评论内容为重点来组织它(因为第一次评论中有各种各样的点)。
我们收集了以下 8 条评论。
-
* 由“回答前”→“复习”→“回答后”→“备忘录”组成。
* 获取的数据前后一致。1.“确定你的 SQL 编码风格”
审查
我在缺少 SQL 编码规则时遇到了麻烦。让我们统一一下。
在实践中,首先检查现场的编码风格。
备忘录
- 或者更确切地说,在审查之前先审查。我在网上搜了一下,不知道主流的SQL编码风格是哪一种,感觉每个人都不一样,但是实际的网站呢?
2.“如果你能得到不止一个,请养成写
ORDER BY的习惯。”前
SELECT product_id, product_name, color, price, delete_flag, created_at, updated_at FROM products ;审查
如果您可以获得多个,请务必包含
ORDER BY。养成这样做的习惯。后
SELECT product_id, product_name, color, price, delete_flag, created_at, updated_at FROM products ORDER BY product_id ASC ;备忘录
- 如果你想一想为什么你应该总是包含
ORDER BY,你会发现如果你不指定任何排序顺序,对于得到的显示顺序,并不能保证它会如何显示。 . 实践中会指定,所以让我们养成指定的习惯。
3.“使用
IN将条件写在一行中”前
SELECT product_id, product_name, color, price, delete_flag, created_at, updated_at FROM products WHERE color = '赤' OR color = '青' ORDER BY product_id ASC ;审查
使用
IN将条件写在一行中。后
SELECT product_id, product_name, color, price, delete_flag, created_at, updated_at FROM products WHERE color IN ( '赤', '青' ) ORDER BY product_id ASC ;(由于我的编码风格,我无法将其写在一行中,但是...)
备忘录
- 当我想到为什么使用
IN更好的原因时,我认为这意味着即使有更多诸如’黒’,'白’之类的元素,也可以简洁地写出来。
4.“在
WHERE子句中写条件而不在count函数中写条件”前
SELECT COUNT( gender = '男' OR NULL ) AS '男性の人数' FROM members WHERE delete_flag = 0 ;审查
在
WHERE子句中写入条件,而不在count 函数中写入条件。count(*)对于使用简单计数的 SQL 很常见。后
SELECT COUNT(*) AS '男性の人数' FROM members WHERE delete_flag = 0 AND gender = '男' ;*
OR NULL已被删除,因为在更改的写作风格中不再需要它。备忘录
- 我简单想过为什么在count函数中没有写条件,而写在
WHERE子句中的原因,但目前还不是很明白。 SQL 语句似乎易于编写和阅读。我将从“一般”的写作方式开始。
5.“使用
JOIN ON进行表连接”前
SELECT SUM(sales.quantity * products.price) FROM sales, products WHERE sales.product_id = products.product_id ;审查
JOIN ON 子句
Join 基本使用
JOIN ONtoFROMmultiple +WHERE子句没有描述join条件请按照说明进行更正。
后
SELECT SUM(sales.quantity * products.price) FROM sales INNER JOIN products ON sales.product_id = products.product_id ;备忘录
- 当我查看为什么``为什么
FROM在FROM+WHERE子句中没有被描述为连接条件,但基本上使用JOIN ON进行连接?写多个@987654355的方法@ +WHERE子句称为简单连接,返回所有sales和products表组合的记录,导致数据量很大。”我想就是这个意思。
6.“请给我另一个名字
AS”前
SELECT SUM(sales.quantity * products.price) FROM sales INNER JOIN products ON sales.product_id = products.product_id ;审查
请给一个别名
AS。后
SELECT SUM(s.quantity * p.price) AS '売り上げの合計' FROM sales AS s INNER JOIN products AS p ON s.product_id = p.product_id ;备忘录
- 我认为“为什么要使用
AS别名的原因是为列和表提供别名使它们更易于阅读和简洁”。
7.“与合并无关的条件请发
JOIN。”前
SELECT SUM(s.quantity * p.price) AS '非会員の売り上げの合計' FROM sales AS s INNER JOIN products AS p ON s.product_id = p.product_id AND s.member_id IS NULL ;审查
如果
INNER JOIN的ON子句中包含销售条件,则很难阅读,所以请在JOIN后面写上销售条件(s.member_id IS NULL)。后
SELECT SUM(s.quantity * p.price) AS '非会員の売り上げの合計' FROM sales AS s INNER JOIN products AS p ON s.product_id = p.product_id WHERE s.member_id IS NULL ;备忘录
- 至于原因,作为sales表和products表的连接条件,“如果有sales条件就很难读取”。
- 我不知道执行成本是否保持不变。
8.“使用
GROUP BY更改为SQL”前
SELECT SUM( CASE WHEN m.gender = '男' THEN s.quantity * p.price ELSE 0 END ) AS '男性会員の売り上げの合計' , SUM( CASE WHEN m.gender = '女' THEN s.quantity * p.price ELSE 0 END ) AS '女性会員の売り上げの合計' FROM sales AS s INNER JOIN products AS p ON s.product_id = p.product_id INNER JOIN members AS m ON s.member_id = m.member_id ;审查
请使用
GROUP BY更改为SQL。后
SELECT m.gender, SUM(s.quantity * p.price) AS '売り上げの合計' FROM sales AS s INNER JOIN products AS p ON s.product_id = p.product_id INNER JOIN members AS m ON s.member_id = m.member_id GROUP BY m.gender ;备忘录
- 想想原因,比CASE公式更清楚,而且我认为
GROUP BY在你想按类型聚合的时候比较好。 - 我希望能够考虑SQL语句的可读性和执行成本,即使得到的结果相同。
综上所述
由于我在实践中还没有接触过SQL,所以我有一种危机感,感觉自培训以来我对SQL的理解并没有太大的变化。do...
另外,当我被告知最好在评论中这样写时,没有附上原因,所以我认为有必要了解原因,所以我在恢复文章时添加了一个备忘录。稻田。
我们期待您对本文的反馈!
非常感谢!
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308627768.html