时间:2021-07-01 10:21:17 帮助过:14人阅读
该 SELECT 语句包含了 SELECT 和 FROM 两个子句(clause) 。子句是 SQL 语句的组成要素,是以 SELECT 或者 FROM 等作为起始的短语。
SELECT 子句中列举了希望从表中查询出的列的名称,而 FROM 子句则指定了选取出数据的表的名称。
查询出 Product 表中的列
接下来,我们尝试从Product (商品)表中,查询所示的 product_id (商品编号)列、 product_name (商品名称)列和 purchase_price (进货单价)列。
?从 Product 表中输出3列的SQL语句如下:
SELECT product_id, product_name, purchase_price FROM Product;
执行结果:
product_id | product_name | purchase_price |
---|---|---|
001 | T恤衫 | 500 |
002 | 打孔器 | 320 |
003 | 运动T恤 | 2800 |
004 | 菜刀 | 2800 |
005 | 高压锅 | 5000 |
006 | 叉子 | |
007 | 擦菜板 | 790 |
008 | 圆珠笔 |
SELECT 语句第一行的 SELECT product _ id, product _ name,purchase _ price 就是 SELECT 子句。查询出的列的顺序可以任意指定。查询多列时,需要使用逗号进行分隔。 查询结果中列的顺序和SELECT 子句中的顺序相同
如果我们想取出所有列的数据, 当然可以把所有列名写上,不过更简单的方式用星号 (*) 来代表所有列。
SELECT * FROM table_name;
输出 Product 表中全部的列:
SELECT * FROM Product;
SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。
SELECT * FROM table. 这条语句经常用来在不清楚table(表)中有什么数据时,能取出所有的数看一眼。
好,接下来我们做一道练习题,请移步到该网站的 《SELECT 查询》课程,习题在最后面 。
http://www.eluzhu.com:1818/my/course/64
还记得上次我们用的表中,有一些重复的值么。有时候我们希望仅仅列出不同的值。那需要怎么做呢?
这时候就会用到关键词 DISTINCT ,用于返回唯一不同的值。
语法:
SELECT DISTINCT 列名称 FROM 表名称;
如果我们想获取 Product 表中保存的商品种类的同时,删除重复的数据。就可以用通过在 SELECT 子句中使用 DISTINCT 来实现
使用 DISTINCT 删除 product_type 列中重复的数据
SELECT DISTINCT product_type FROM Product;
执行结果:
product_type |
---|
厨房用具 |
衣服 |
办公用品 |
另外在使用 DISTINCT 时, NULL 也被视为一类数据。 NULL 存在于多行中时 , 也会被合并为一条 NULL 数据。对含有 NULL 数据的 purchase _price (进货单价)列使用 DISTINCT 的 SELECT 语句,除了两条 2800 的数据外,两条 NULL 的数据也被合并为一条。
我们已经学会了从数据表里取出某几个列的SQL语句,思考一下:如果数据表里有100万行数据。如果数据量这么大,之前的SQL语句很可能运行时会崩溃。
真实情况下,我们很少直接查出所有数据,即使查询出来也看不完。为了更精确的查询出特定数据,我们需要学习一个新的SQL语法,SELECT 语句通过 WHERE 子句来指定查询数据的条件。具体就是通过限定条件,查看行的数据是否满足。比如:获取时长大于2小时的电影。
你可以把 WHERE想象成一个筛子,每一个特定的筛子都可以筛下某些豆子。
在 SELECT 语句中使用 WHERE 子句的语法如下所示:?
SELECT < 列名 >, …… FROM < 表名 > WHERE < 条件表达式 >;
下面的运算符可在 WHERE 子句中使用,下面我会选择几个举例给你演示一下,其中在某些版本的 SQL 中,操作符 <> 可以写为 !=。
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
从被选取的记录中还可以查询出想要的列。为了更加容易理解,我们在查询 product _ type 列的同时,把 product _ name 列也读取出来。
用来选取 product_type 列为 ‘ 衣服 ‘ 的记录的 SELECT 语句:
SELECT product_name, product_type FROM Product WHERE product_type = ‘ 衣服 ‘;
执行结果:
product_name | product_type |
---|---|
T恤衫 | 衣服 |
运动T恤 | 衣服 |
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SQL BETWEEN 语法:
SELECT column_name FROM table_name WHERE column_name BETWEEN value1 AND value2;
用来选取销售单价介于 2000 到 5000 之间的商品名称:
SELECT product_name, sale_price FROM Product WHERE sale_price BETWEEN 2000 AND 5000;
执行结果:
product_name | sale_price |
---|---|
运动T恤 | 3000 |
菜刀 | 4000 |
然后再说说LIKE,截至目前,我们使用字符串作为查询条件的例子中使用的都是 =。这里的 = 只有在字符串完全一致时才为真。与之相反,LIKE 谓词更加模糊一些,当需要进行字符串的部分一致查询时需要使用该谓词。
语法:
SELECT column_name FROM table_name WHERE column_name LIKE pattern;
例如我们要选取商品名称中包含 ‘T恤’ 的所有商品的名称
SELECT product_name FROM Product WHERE product_name LIKE ‘%T恤%‘;
执行结果:
product_name |
---|
T恤衫 |
运动T恤 |
请注意,我们在例子中的条件值周围使用的是单引号。SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
文本值:
这是正确的:
SELECT * FROM movies WHERE title = ‘双子杀手‘
这是错误的:
SELECT * FROM movies WHERE title = 双子杀手
数值:
这是正确的:
SELECT * FROM movies WHERE year > 2000
这是错误的:?
SELECT * FROM movies WHERE year > ‘2000‘;
好,接下来我们做一道练习题,请移步到该网站的 《WHERE 条件查询》课程中,习题在内容最后。
http://www.eluzhu.com:1818/my/course/64
好,我们这次先讲到这里,请进入作者主页继续学习后续的SQL课程。或进入上面的地址免费学习完整的SQL课程。
自学SQL
标签:多列 blank 理解 数据库 例子 记录 external 更新 模糊