Mysql 基础(六) SELECT 语句基础
要知道对好事的称颂过于夸大,也会招来人们的反感轻蔑和嫉妒。——培根
学习重点
使用 SELECT 语句从表中选取数据
为列设定显示用的别名
SELECT 语句中可以使用常数或者表达式
通过指定 DISTINCT 可以删除重复的行
SQL 语句种可以使用注释
可以通过 WHERE 语句从表中选出符合查询条件的数据
列的查询
从表中选取数据时需要使用 SELECT 语句,也就是只从表中选出 SELECT 必要数据的意思.通过 SELECT 语句查询并选出必要数据的过程称为匹配查询或查询(query)
- 通勤语句
SELECT <列名>,...
FROM <表名>;
SELECT 语句包含了 SELECT 和 FROM 两个子句.子句是 SQL 语句的组成要素,是以 SELECT 或者 FROM 等作为起始的短语
SELECT 子句列举了希望从表中查询出的列的名称,而 FROM 子句则指定了选取出数据的表的名称
- 举例
我们从上一单元输出 3 列分别是 product_id,product_name,sale_price
SELECT product_id,product_name,sale_price FROM Product;
结果输出就是
product_id | product_name | sale_price |
---|---|---|
001 | T 恤衫 | 1000 |
002 | 打孔器 | 500 |
003 | 运动 T 恤衫 | 4000 |
004 | 菜刀 | 3000 |
005 | 高压锅 | 6800 |
006 | 叉子 | 500 |
007 | 擦菜板 | 880 |
008 | 圆珠笔 | 100 |
查询列表中所有的列
- 要想查出全部列,可以使用代表所有列的型号(*)
SELECT * FROM <表名>
- 用在上单元的例子
SELECT * FROM Product;
等价于
SELECT product_id,product_name,product_type,sale_price,purchase_price,regist_date FROM Product;
最后的结果
product_id | product_name | sale_price | product_type | purchase_price | regist_date |
---|---|---|---|---|---|
001 | T 恤衫 | 1000 | 衣服 | 500 | 2009-09-20 |
002 | 打孔器 | 500 | 办公用品 | 320 | 2009-09-11 |
003 | 运动 T 恤衫 | 4000 | 衣服 | 2800 | NULL |
004 | 菜刀 | 3000 | 厨房用具 | 2800 | 2009-09-20 |
005 | 高压锅 | 6800 | 厨房用具 | 5000 | 2009-01-15 |
006 | 叉子 | 500 | 厨房用具 | NULL | 2009-09-20 |
007 | 擦菜板 | 880 | 厨房用具 | 790 | 2008-04-28 |
008 | 圆珠笔 | 100 | 办公用品 | NULL | 2009-11-11 |
为列设置别名
- SQL 语句可以使用 AS 关键字为列设定别名
SELECT product_id AS id,product_name AS name,sale_price AS price FROM Product;
最后的结果
id | name | price |
---|---|---|
001 | T 恤衫 | 1000 |
002 | 打孔器 | 500 |
003 | 运动 T 恤衫 | 4000 |
004 | 菜刀 | 3000 |
005 | 高压锅 | 6800 |
006 | 叉子 | 500 |
007 | 擦菜板 | 880 |
008 | 圆珠笔 | 100 |
- 设置成中文名称也可以,但是必须要加引号
SELECT product_id AS '商品编号', product_name AS '商品名称', sale_price AS '进货单价' FROM Product;
最后的结果
商品编号 | 商品名称 | 进货单价 |
---|---|---|
001 | T 恤衫 | 1000 |
002 | 打孔器 | 500 |
003 | 运动 T 恤衫 | 4000 |
004 | 菜刀 | 3000 |
005 | 高压锅 | 6800 |
006 | 叉子 | 500 |
007 | 擦菜板 | 880 |
008 | 圆珠笔 | 100 |
常数的查询
- 有的时候为了方便阅读,我们会在查询后的结果中显示我们自定义的列,这个列只是显示用,不影响表的结构
SELECT '商品名称' AS string,28 AS number,product_id AS id,product_name AS '商品名称',
sale_price AS '进货单价' FROM Product;
最后的结果
string | number | id | 商品名称 | 进货单价 |
---|---|---|---|---|
商品名称 | 28 | 001 | T 恤衫 | 1000 |
商品名称 | 28 | 002 | 打孔器 | 500 |
商品名称 | 28 | 003 | 运动 T 恤衫 | 4000 |
商品名称 | 28 | 004 | 菜刀 | 3000 |
商品名称 | 28 | 005 | 高压锅 | 6800 |
商品名称 | 28 | 006 | 叉子 | 500 |
商品名称 | 28 | 007 | 擦菜板 | 880 |
商品名称 | 28 | 008 | 圆珠笔 | 100 |
从结果中筛选掉重复的数据
- 可以通过 DISTINCT 筛选掉重复的数据
SELECT DISTINCT <列名> FROM <表名>;
- 上面单元的例子
SELECT DISTINCT product_type FROM Product;
最后的结果
product_type |
---|
衣服 |
办公用品 |
厨房用具 |
- 在使用 DISTINCT 时候 NULL 也被视为同一类数据,NULL 存在于多行时候,也会被合并为一条 NULL 数据
比如上面单元的例子
SELECT DISTINCT purchase_price FROM Product;
最后的结果
purchase_price |
---|
500 |
320 |
2800 |
5000 |
NULL |
790 |
- 多列使用 DISTINCT
SELECT DISTINCT product_type,regist_date FROM Product;
最后结果,这样就过滤了一条数据
product_type | regist_date |
---|---|
衣服 | 2009-09-20 |
办公用品 | 2009-09-11 |
衣服 | NULL |
厨房用具 | 2009-09-20 |
厨房用具 | 2009-01-15 |
厨房用具 | 2008-04-28 |
办公用品 | 2009-11-11 |
依据 WHERE 语句来选择记录
SELECT 语句通过 WHERE 子句来指定查询条件,在 WHERE 子句中可以指定”某一列的值和这个字符串相等”或者”某一列的值大于这个数字”等条件
- 通勤代码
SELECT <列名>,
...
FROM <表名>
WHERE<条件表达式>;
- 拿上个单元 查询出 product_name,product_type,并且 product_type 是衣服的
SELECT product_name AS '商品名称', product_type AS '商品类型' FROM Product WHERE product_type='衣服'
最后结果
商品名称 | 商品类型 |
---|---|
T 恤衫 | 衣服 |
运动 T 恤衫 | 衣服 |
他执行顺序是首先通过 WHERE 子查询查询出符合条件的记录,然后在取出 SELECT 语句指定的列,也就受从后往前的顺序
特别注意
SQL 中子句的书写顺序是固定的,不能随意更改,WHERE 子句必须紧跟在 FROM 的子句后面
注释的书写方法
- 单行注释
书写在’–’之后,只能写在同一行
-- 本SELECT语句会从结果中删除重复行
SELECT DISTINCT product_type,regist_date FROM Product;
- 多行注释
书写在”/“和”/“之间,可以跨行
/*
这就是测试是否跨行
测试跨行没有
结束跨行
*/
SELECT DISTINCT product_type,regist_date FROM Product;