避免常见错误

将 SQL 应用于真实问题

Dmitriy (Dima) Gorenshteyn

Lead Data Scientist, Memorial Sloan Kettering Cancer Center

不要滥用注释

/* 选择类别和时长时
从 films 需要用 f,之后
我吃了个三明治,挺好吃的 ...*/
SELECT category, length
-- FROM actor as a
FROM film AS f
/* 将 category 表与 film 表做内连接 */
INNER JOIN category AS c
ON f.film_id = c.film_id;

不要

  • 在注释里写长篇大论。
将 SQL 应用于真实问题

不要滥用注释





SELECT category, length
-- FROM actor as a
FROM film AS f
/* 将 category 表与 film 表做内连接 */
INNER JOIN category AS c
ON f.film_id = c.film_id;

不要

  • 在注释里写长篇大论。
  • 在完成的代码里保留旧注释。
将 SQL 应用于真实问题

不要滥用注释





SELECT category, length

FROM film AS f
/* 将 category 表与 film 表做内连接 */
INNER JOIN category AS c
ON f.film_id = c.film_id;

不要

  • 在注释里写长篇大论。
  • 在完成的代码里保留旧注释。
  • 写与代码重复的注释。
将 SQL 应用于真实问题

不要滥用注释

/* 选择类别和时长时
从 films 需要用 f,之后
我吃了个三明治,挺好吃的 ...*/
SELECT category, length
-- FROM actor as a
FROM film AS f
/* 将 category 表与 film 表做内连接 */
INNER JOIN category AS c
ON f.film_id = c.film_id;
SELECT category, length
FROM film AS f
INNER JOIN category AS c
ON f.film_id = c.film_id;
将 SQL 应用于真实问题

不要 SELECT 全部列

SELECT *
FROM film AS f
INNER JOIN category AS c
ON f.film_id = c.film_id;
release_year language_id rental_duration rental_rate length  .......
2009            1            4              6.99        173  .......    
2006            1            7              6.99        185  .......    
2004            1            5              4.99        153  .......    
2007            1            7              2.99        69   .......
将 SQL 应用于真实问题

不要用 SQL 做编程

DO $$
BEGIN
   FOR counter IN 1..5 LOOP
     IF (counter = 2) THEN
      RAISE NOTICE 'BINGO!';
     ELSE 
      RAISE NOTICE 'Not BINGO :-(';
     END IF;
   END LOOP;
END; $$
NOTICE:  1 Not BINGO :-(
NOTICE:  1 BINGO!
NOTICE:  3 Not BINGO :-(
NOTICE:  4 Not BINGO :-(
NOTICE:  5 Not BINGO :-(
将 SQL 应用于真实问题

Let's practice!

将 SQL 应用于真实问题

Preparing Video For Download...