2.1 SELECT 语句
关键字(keyword) 作为SQL 组成部分的保留字。关键字不能用作表或列的名字。附录 D 列出了某些经常使用的保留字。
为了使用SELECT 检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。
2.2 检索单个列
输入:SELECL prod_name
FROM products;
分析:利用SELECT 语句从 Products 表中检索一个名prod_name的列。
输出:
说明:未排序数据。数据没有过滤(过滤将得出结果集的一个子集),也没有排序。
提示:结束SQL 语句。多条SQL 语句必须以分号(;)分隔。
提示:SQL 语句和大小写。请注意,SQL 语句不区分大小写,因此 SELECT 与 select 是相同的。同样,写成 Select 也没有关系。许多 SQL 开发人员喜欢对 SQL 关键字使用大写,而对列名和表名使用小写,但是表名、列名和值可能有所不同。
2.3 检索多个列
输入:SELECT prod_name,prod_id,prod_price
FROM products;
分析:使用SELECT 语句从表 Products 中选择数据。在这个例子中,指定了 3 个列名,列名之间用逗号分隔。
输出:
提示:当心逗号
在选择多个列时,一定要在列名之间加上逗号,但最后一个列名后不加。如果在最后一个列名后加了逗号,将出现错误。
说明:数据表示
SQL 语句一般返回原始的、无格式的数据。数据的格式化是表示问题,而不是检索问题。如何表示一般会在显示该数据的应用程序中规定。
2.4 检索所有列
输入:SELECT *
FROM products;
分析:如果给定一个通配符(*),则返回表中所有列。
2.5 检索不同的值
输入:SELECT distinct vend_id
FROM products;
分析:SELECT DISTINCT vend_id 告诉 DBMS 只返回不同(具有唯一性)的
vend_id 行,所以正如下面的输出,只有 3 行。如果使用 DISTINCT 关键字,它必须直接放在列名的前面。
输出:(三行)
2.6 限制结果
输入(MySQL):SELECT prod_name
FROM Products
LIMIT 5;
分析:上述代码使用SELECT语句来检索单独的一列数据。LIMIT 5指示MySQL等 DBMS 返回不超过 5 行的数据。
输出:
输入:SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;
分析:LIMIT 5 OFFSET 5 指示 MySQL 等 DBMS 返回从第 5 行起的 5 行数据。第一个数字是检索的行数,第二个数字是指从哪儿开始。一共9列,故输出4列(6 7 8 9)
输出:
注意:第0 行
第一个被检索的行是第0 行,而不是第 1 行。因此,LIMIT 1 OFFSET 1 会检索第 2 行,而不是第 1 行。
提示:MySQL、MariaDB 和 SQLite 捷径
MySQL、MariaDB和 SQLite可以把LIMIT 4 OFFSET 3 语句简化为LIMIT 3,4。使用这个语法,逗号之前的值对应OFFSET,逗号之后的值对应LIMIT(反着的,要小心)。
说明:并非所有的SQL 实现都一样
2.7 使用注释
输入1:SELECT prod_name --第一种注释
FROM Products
LIMIT 5,5;
分析:注释使用-- (两个连字符)嵌在行内。-- 之后的文本就是注释,要注意空格。
输入2:--第二种注释 SELECT prod_name FROM Products ;
输入3:#第三种注释 SELECT prod_name FROM Products ;
分析:在一行的开始处使用#,这一整行都将作为注释。
输入4:/*第四种注释
SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;*/
分析:注释从/*开始,到*/结束,/*和*/之间的任何内容都是注释。这种方式
常用于把代码注释掉,
2.8 code
# 检索单行
SELECT prod_name FROM products;
#检索多行
SELECT prod_name,prod_id,prod_price FROM products;
#检索所有行
SELECT * FROM products;
#检索不同值
SELECT distinct vend_id FROM products;
SELECT DISTINCT vend_id, prod_price FROM Products;
SELECT vend_id, prod_price FROM Products;
#检索指定数目的行,0-4
SELECT prod_name FROM Products LIMIT 5;
#检索指定数目的行,6-9
SELECT prod_name FROM Products LIMIT 5 OFFSET 5;
#MySQLworkbench的注释
SELECT prod_name --第一种注释
FROM Products
LIMIT 5,5;
--第二种注释 SELECT prod_name FROM Products ;
#第三种注释 SELECT prod_name FROM Products ;
/*第四种注释
SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;*/
2.9 挑战题
1. 编写 SQL 语句,从 Customers 表中检索所有的 ID(cust_id)。
SELECT cust_id
FROM customers;
2. OrderItems 表包含了所有已订购的产品(有些已被订购多次)。编写SQL 语句,检索并列出已订购产品(prod_id)的清单(不用列每个订单,只列出不同产品的清单)。提示:最终应该显示 7 行。
SELECT DISTINCT prod_id
FROM orderitems;
3. 编写SQL语句,检索 Customers 表中所有的列,再编写另外的 SELECT语句,仅检索顾客的 ID。使用注释,注释掉一条 SELECT 语句,以便运行另一条 SELECT 语句。(当然,要测试这两个语句。)
/*SELECT *
FROM customers;*/
SELECT cust_id
FROM customers;
答案
https://forta.com/books/0135182794/challenges/