《SQL 必知必会》读书笔记 02:检索数据 [Retrieving Data]
本文是《SQL 必知必会》书籍读书笔记的第 2 篇。
检索数据 [Retrieving Data]
SELECT 语句的使用:需要给出两条信息,检索什么,从哪里检索。
基础语法:
-- 下面三种形式效果相同
-- method 1
SELECT prod_name
FROM Products;
-- method 2
SELECT prod_name FROM Products;
-- method 3
SELECT
prod_name
FROM
Products;
三种形式效果相同。(见Understanding SQL-SQL语法规则
)
检索多列数据:(列名用,
分隔)
SELECT prod_id, prod_name, prod_price
FROM Products;
SQL语句一般返回原始的、无格式的数据。数据的格式化是表示问题,而不是检索问题。因此,表示(如把上面的价格值显示为正确的十进制数值货币金额)一般在显示该数据的应用程序中规定。通常很少直接使用实际检索出的数据(没有应用程序提供的格式)。
检索所有列:
SELECT *
FROM Products;
警告:使用通配符
一般而言,除非你确实需要表中的每一列,否则最好别使用*通配符。虽然使用通配符能让你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。
提示:检索未知列
使用通配符有一个大优点。由于不明确指定列名(因为星号检索每一列),所以能检索出名字未知的列。
检索不同的值(去重复):
SELECT DISTINCT vend_id -- 使用DISTINCT 输出无重复值
FROM Products;
警告:不能部分使用DISTINCT
DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。例如,你指定SELECT DISTINCT vend_id, prod_price,除非指定的两列完全相同,否则所有的行都会被检索出来。
限制检索起始行及行数:
使用TOP关键字来限制最多返回多少行
SELECT TOP 50 prod_name -- 只检索前50行数据
FROM Products;
如果你使用MySQL、MariaDB、PostgreSQL或者SQLite,需要使用LIMIT 子句,像这样:
注意:可能不适用其他DBSE,如DB2
使用FETCH
语句。
SELECT prod_name
FROM Products
LIMIT 5; -- LIMIT 5指示MySQL等DBMS返回不超过5行的数据。
拓展:检索自第6行开始的3条数据
SELECT prod_name
FROM Products
LIMIT 3 OFFSET 5; -- 检索第6行开始的3条数据
注意:行数起始自第0行开始!!!
MySQL和MariaDB支持简化版的LIMIT 4 OFFSET 3
语句,即LIMIT 3,4
。使用这个语法,,
之前的值对应LIMIT
,之后的值对应OFFSET
。
另外,并非所有的SQL实现都一样。SQL虽然通常都有相当一致的实现,但它并不总是这样。非常基本的语句往往是容易移植的,但较复杂的语句就不同了。当你针对某个问题寻找SQL解决方案时,一定要记住这一点。