引言
结构化查询语言(SQL)用于管理关系型数据库管理系统(RDBMS)中的数据。SQL中一个有用的功能是在查询中创建查询,也称为* 子查询 或 嵌套查询 *。嵌套查询是一个SELECT
语句,通常包含在括号中,并嵌入在主要的SELECT
、INSERT
或DELETE
操作中。
在本教程中,你将使用SELECT
、INSERT
和DELETE
语句的嵌套查询。你还将在嵌套查询中使用聚合函数来将数据值与你使用WHERE
和LIKE
子句指定的排序数据值进行比较。
前期准备
为了学习本指南,你需要一台运行某种使用SQL的关系数据库管理系统(RDBMS)的计算机。
注意:请注意,许多RDBMS使用它们自己独特的SQL实现。虽然本教程中概述的命令适用于大多数RDBMS,但如果你在MySQL以外的系统上测试它们,确切的语法或输出可能会有所不同。
你还需要一个装载了一些示例数据的数据库和表,可以在其中练习使用相关命令。
连接到MySQL并设置一个示例数据库
如果SQL数据库系统运行在远程服务器上,请从本地设备SSH到服务器
ssh sammy@your_server_ip
然后打开MySQL服务器提示符,将==sammy==
替换为你的MySQL用户账户的名称
mysql -u sammy -p
创建一个名为zooDB
的数据库
CREATE DATABASE zooDB;
如果数据库成功创建,您将收到这样的输出
OutputQuery OK, 1 row affected (0.01 sec)
要选择zooDB
数据库,运行以下USE
语句
USE zooDB;
OutputDatabase changed
选择数据库后,在其中创建一个表。在本教程的示例中,我们将创建一个表,用于存储参观动物园的游客的信息。这个表将包含以下7列
guest_id
:存储参观动物园的游客的值,使用int
数据类型。这也是表的* 主键 *,这意味着这一列中的每个值都是对应行的唯一标识符。first_name
:保存每个客人的名字,使用varchar
数据类型,不超过30个字符。last_name
:使用varchar
数据类型(最多30个字符)来存储每位客人的姓氏。guest_type
:包含每个使用varchar
数据类型的客人的类型(成人或儿童),最多15个字符。membership_type
:表示每个客人拥有的会员类型,使用varchar
数据类型来保存最多30个字符。membership_cost
:存储各种成员类型的开销。该列使用精度为5、刻度为2的decimal
数据类型,这意味着该列中的值可以有5位数字,小数点右侧有2位数字。total_visits
:使用int
数据类型记录每个客人的总访问次数。
运行下面的CREATE TABLE
命令,创建一张名为guests
的表,其中包含这些列
CREATE TABLE guests (
guest_id int,
first_name varchar(30),
last_name varchar(30),
guest_type varchar(15),
membership_type varchar(30),
membership_cost decimal(5,2),
total_visits int,
PRIMARY KEY (guest_id)
);
接下来,向空表中插入一些示例数据
INSERT INTO guests
(guest_id, first_name, last_name, guest_type, membership_type, membership_cost, total_visits)
VALUES
(1, 'Judy', 'Hopps', 'Adult', 'Resident Premium Pass', 110.0, 168),
(2, 'Nick', 'Wilde', 'Adult', 'Day Pass', 62.0, 1),
(3, 'Duke', 'Weaselton', 'Adult', 'Resident Pass', 85.0, 4)