Mysql 基础(六) SELECT 语句基础

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;

文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录