SELECT
- 检索单个列
- 检索多个列
- 检索所有列
- 不重复的结果 DISTINCT
- 限制结果 LIMIT 与 OFFSET
- 注释
- 行内注释
- 多行注释
检索单个列
从 Products 表中检索一个名为 prod_name 的列;
SELECT prod_name
FROM Products;
【1】返回的数据可能是无序的,除非规定了顺序;
【2】结束SQL语句需要分号;
【3】SQL不区分大小写,但是推荐大写,这样结构清晰;
【4】SQL语句可以写在一行,也可以写在多行;
检索多个列
从 Products 表中检索多个列,prod_id,prod_name,prod_price;
SELECT prod_id,prod_name,prod_price
FROM Products;
【1】当心逗号,在选择多个列时,需要在列名之间加上逗号,但是一定注意最后不加逗号;
【2】重要的话说三遍,最后一个列名后一定注意不加逗号;
【3】重要的话说三遍,最后一个列名后一定注意不加逗号;
检索所有列
检索 Products 表中所有的列;
SELECT *
FROM Products;
【1】虽然通配符 * 可以一下子检索出所有的列,但是意味着降低检索的速度和应用程序性能;
【2】在检索未知列时,使用通配符是一大好处。
不重复的结果 DISTINCT
假设我们只需要检索出所有的供应商信息,明显我们不希望很多重复的值,因为无意义,此时,我们需要在属性前添加 DISTINCT 来限制输出的结果。
输出上述左侧结果的代码如下:
SELECT vend_id
FROM Products;
输出上述右侧结果的代码如下:
SELECT DISTINCT vend_id
FROM Products;
【1】DISTINCT 关键字作用于所有的列,不仅仅是跟在其后的那一列;
【2】DISTINCT 关键字可以组合属性使用;
限制结果 LIMIT 与 OFFSET
SELECT 语句默认返回表中所有匹配的行,但是如果我们希望只输出一定数量的行,怎么办?本节需要注意的是,不同的 DBMS 的语句不同;
以下案例均为只取前五个结果:
SQL Server:
SELECT TOP 5 prod_name
FROM Products;
DB2:
SELECT prod_name
FROM Products
FETCH FIRST 5 ROWS ONLY;
Oracle:
SELECT prod_name
FROM Products
WHERE ROWNUM <= 5;
MySQL、MariaDB、PostgreSQL或SQLite:
SELECT prod_name
FROM Products
LIMIT 5;
此外,LIMIT 与 OFFSET 结合:
SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;
LIMIT 5 OFFSET 5 的含义是返回从第5个结果起的5行结果;
【1】第0行,第一个被检索的结果是第0行,而不是第1行;
【2】LIMIT 4 OFFSET 3 可以简化为 LIMIT 3,4;
【3】本节很清晰的表示出不同的DBMS语法的不同,所以必须要注意到不是所有的都一致的;
注释
DBMS 有很多种注释语法,具体如下:
行内注释
SELECT prod_name -- 这是一条注释
FROM Products;
# 这是一条注释
SELECT prod_name
FROM Products;
多行注释
/* 这是一条多行注释
这是一条多行注释
*/
SELECT prod_name
FROM Products;