Python入门必备,每个人都应该知道的 10 个 SQL 命令

如果您使用数据,尤其是关系数据,那么结构化查询语言 (SQL) 就是您的通用语言。毫无疑问,SQL 是任何程序员学习的最有用的语言之一。它是我们用来与最常部署的数据库系统(包括 MySQL、PostgreSQL 和 Oracle)进行通信的语言。SQL 过去 50 年来一直是标准数据库查询语言,因为它既具有表达能力又易于使用。

但是提前说明下,并非所有数据结构都支持简单查询。查询的复杂性随着数据集的标准化级别而增加。例如,对于低标准化 (1-2 NF) 数据集,可以使用简单的 SELECT 语句访问所有数据。但如果规范化级别较高(3NF、BCNF),数据将分为多个表,这意味着您需要在创建查询之前使用多个 JOIN 语句来组合数据集。 

虽然您需要进行相当多的练习才能执行有效的查询,但您会发现自己一遍又一遍地使用一些顶级命令。它们也往往是最有用的。 

本文提供针对公共电影租赁数据集使用最多的 10 个 SQL语句。

要继续阅读本文,您需要下载并安装以下内容:

  • 来自 pgadmin.org 的pgadmin副本

  • PostgreSQL 数据库的副本,随 psql 工具一起提供

可以了,好了?让我们开始吧。

创建 PostgreSQL 数据集

在开始练习 SQL 查询之前,我们需要一个用于查询的数据库。在本例中,我们将使用 pgadmin 根据公开的电影租赁数据创建一个 PostgreSQL 数据库,以便更轻松地进行 SQL 管理和查询执行。 

步骤 1 –通过执行以下查询创建数据库:

CREATE DATABASE pagila
    WITH 
    OWNER = postgres
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1;

在这里我们可以直接看到 CREATE DATABASE 命令,该命令用于创建具有提供名称的数据库。

步骤 2 –通过下载架构定义并使用查询工具选项执行来创建架构:

$curl https://raw.githubusercontent.com/

morenoh149/postgresDBSamples/master/pagila-0.10.1/pagila-schema.sql --输出 schema.sql

一旦加载到 pgadmin 中,我们就可以通过单击向右的前进箭头或按 F5 使用 UI 来执行脚本。

步骤 3 – 将数据加载到数据库中。使用curl工具下载数据,并使用psql工具将其插入数据库:

 

$curl https://raw.githubusercontent.com/

morenoh149/postgresDBSamples/master/pagila

-0.10.1/pagila-data.sql

--输出 data.sql

$ psql -d pagila -f data.sql

加载后,我们可以使用 pgAdmin UI 来检查数据集表。这是数据库的实体关系图(ERD),显示了数据库中每个元素的关联方式:

前 10 个 SQL 命令

在深入研究示例之前,了解数据库接受的两种不同语言组非常重要:

DDL 或数据定义语言是一组用表、约束或序列描述数据库模式的命令。 

例如,这些命令包括我们在本文中使用的 CREATE DATABASE 命令,还包括用于将数据插入表中的 INSERT INTO 命令,以及用于更新数据的 UPDATE 命令。

DML 或数据操作语言是一组允许我们查询数据库状态的命令。

DML 包含所有最常用的 10 个 SQL 命令。

#1 —SELECT

SELECT 语句是 SQL DML 的基础,因为大多数命令都以此运算符开头。我们可以使用它从表中选择单个列或行,或者仅用于计算表达式。以下是数据集中的一些示例:

选择客户表中的所有字段

SELECT * FROM customer;

仅从电影表中选择标题描述和年份字段

SELECT title, description, release_year from film;

使用付款表计算所有租赁销售额的总和

SELECT SUM(amount) from payment;

打印当前日期时间

SELECT now();

  •  

#2 —WHERE

当我们想要根据某些条件限制或过滤 SELECT 语句的结果时,我们需要使用 WHERE 命令。以下是数据集中的一些示例:

选择所有价值超过 5 美元的付款

SELECT * from payment where amount > 5;

选择姓氏为“smith”的所有客户

SELECT * from customer where LOWER(last_name)= 'smith';

选择 2005 年 5 月 24 日发生的所有影片租赁

SELECT * FROM rental WHERE DATE(rental_date)='2005-05-24'

#3 —BETWEEN

当我们想要选择某个范围内的值时,我们使用 BETWEEN 命令。我们需要使用 WHERE 运算符提供起点和终点:

选择 2005-05-24 至 2005-05-30 之间发生的所有租赁

SELECT * FROM Rental 
WHERE DATE(rental_date) BETWEEN '2005-05-24' AND '2005-05-30';

#4 —AND/OR/NOT

AND、OR 和 NOT 是布尔运算符。它们允许我们应用布尔代数来过滤我们的结果。例如:

选择具有特定 inventory_id 和特定 customer_id 的所有租赁

SELECT * FROM rental WHERE inventory_id=1525 AND customer_id=127;

选择 2005-05-24 或 2005-05-30 发生的所有租赁

SELECT * FROM rental
WHERE DATE(rental_date)='2005-05-24'OR DATE(rental_date)='2005-05-30';

选择 2006 年发行但没有 NC-17 评级的所有电影

SELECT * FROM film
WHERE release_year=2006 AND NOT rating='NC-17';

#5 — MIN/MAX 

当我们需要查找列中的最大值或最小值时,我们使用 MIN/MAX 函数。例如:

从胶片表中选择最大和最小更换成本

SELECT MAX(replacement_cost), MIN(replacement_cost) FROM film;

#6 —LIMIT/OFFSET

当我们想要限制结果的数量,或者实现分页结果(从初始位置以外的不同位置开始)时,我们使用 LIMIT 和 OFFSET 运算符:

选择前 50 个结果后的前 10 个付款详细信息

SELECT * FROM payment ORDER BY payment_date
DESC LIMIT 10 OFFSET 50

#7 —IN

IN 运算符用于检查包含条件。例如,我们可以检查要测试的值列表中存在哪些结果。这是一个示例查询:

选择具有相同最大重置成本的所有影片

SELECT film_id, title, replacement_cost FROM film
WHERE replacement_cost IN (SELECT MAX(replacement_cost) FROM film)

#8 —ORDER BY/GROUP BY

当我们想要按升序或降序对结果进行排序时,可以使用 ORDER BY 子句。我们可以使用 GROUP BY 通过计算表中所有行的某些值来创建聚合列。

选择所有影片并按影片长度降序排列(从最长到最短)

SELECT * from film ORDER BY length DESC;

从付款表中选择每个日期以及该日期所有付款的总金额

SELECT DATE(payment_date), SUM(amount)
from payment GROUP BY DATE(payment_date);

从付款表中选择每个日期以及该日期的付款总额,然后按降序排列

SELECT DATE(payment_date) as PaymentDate, SUM(amount)
 as Total from payme

#9 —HAVING

如果我们想要过滤使用 GROUP BY 命令产生的聚合函数(例如 SUM 或 AVG),我们需要使用 HAVING 运算符,因为 WHERE 不能与聚合函数一起使用:

从付款表中选择每个日期以及该日期所有付款的总金额,但仅打印总价值超过 3000 美元的付款

SELECT DATE(payment_date) as PaymentDate,
SUM(amount) as total from payment GROUP BY PaymentDate HAVING SUM(amount) > 3000;

选择电影数量、评级和平均重置成本,但仅打印平均重置成本低于 19 美元的电影

SELECT COUNT(film_id), rating, AVG(replacement_cost)
as AvgReplacementC
 

#10 —INNER JOIN

如果 SELECT 是 SQL 命令的面包和黄油,那么 JOINing 表就是盐和胡椒。我们需要使用 JOIN 将表关系组合在一起并创建公共数据集。

在一张表中同时显示演员和电影详细信息。

SELECT first_name, last_name, title, description
FROM film_actor fa INNER JOIN actor ON (fa.actor_id = actor.actor_id) INNER JOIN film on (fa.film_id = film.film_id);

电影与演员之间存在多对多关系,因此我们使用 film_actor 表作为连接点。我们将 film_actor 和 actor 一起加入,然后将 film_actor 和 film 一起加入。SELECT 运算符现在可以访问两个表中的所有列。

Python 等编程语言中的 SQL 命令

现代数据库系统中还有更多可用的 SQL 命令,包括 INSERT、LIKE、DELETE FULL OUTER JOIN、COUNT、AS 和 DROP。一些专用数据库甚至会有自己的专用命令,例如地理信息系统 (GIS) 的命令,其中包括用于几何查询的ST_contains或ST_covers等函数。

但是,一旦掌握了基础知识,您应该能够轻松学习更专业的查询。当然,创建基本查询是一回事,但创建有用的高性能查询本身就是一种完全不同的学习体验。 

然后是在 Python 等编程语言中使用 SQL 命令的整个方面。ActiveState 提供带有多个数据库连接器的 Python 发行版,例如 mysql-python、psycopg2、cx_Oracle、pyodbc 和 pymssql,它们支持您将使用的大多数流行的专有和开源数据库,包括 MySQL、PostgreSQL、Oracle 和 Microsoft SQL 服务器。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值