社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

蚂蚁学Python • 2 月前 • 74 次点击  


如果您使用数据,尤其是关系数据,那么结构化查询语言 (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_containsST_covers等函数。

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

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

Python工作流程庞大且复杂。如果您熟练掌握,还有更多的内容需要学习。

值得庆幸的是,您来对地方了!

我们提供由前百度资深大数据工程师主持的自定进度课程”Python零基础到全栈视频课程”您将通过大量的实践练习来学习Python入门、网络爬虫、数据分析、机器学习等内容。

如果您想了解培训如何进行,可以访问码易编程的官网:https://mayibiancheng.net/ 

有任何问题可以想咨询蚂蚁老师 ant_learn_python 微信账号。

点击下方“阅读全文”,可以直达课程主页

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/167194
 
74 次点击