1.SELECT语句定义
SELECT语句可以实现对表的选择、投影及连接操作。即SELECT语句可以根据用户的需要从一个或多个表中选出匹配的行和列,结果通常是生成一个临时表。
语法格式如下
SELECT [ALL | DISTINCT] 输出列表表达式,...
[FROM 表明1 [ ,表名2] ...] /*FROM子句*/
[where 条件] /*WHERE子句*/
[GROUP BY {列名 | 表达式 | 列编号}
[ASC | DESC], ... /*GROUP BY子句*/
[HAVING 条件] /*HAVING子句*/
[ORDER BY {列名 | 表达式 | 列编号}]
[ASC | DESC] , ...] /*ORDER BY子句*/
[LIMIT {[偏移量,] 行数|行数OFFSET 偏移量}]/*LIMIT子句*/
SELECT 语句功能强大,有很多子句,所有被使用的子句,所有被使用的子句必选语法说明中显示的顺序严格排序。例如,一个HAIVNG子句必须位于GROUP BY子句之后,并位于ORDER BY子句之前。
2.选择列
2.1 选择列
从SELECT语句基本语法可以看出,最简单的SELECT语句如下。
SELECT 表达式
输出表达式可以使MYSQL所支持的任何运算的表达式,利用这个最简单的SELECT语句,可以进行“1+1”这样的运算。
如果 SELECT语句的表达式是表中的字段名变量,那么字段名之间要以逗号分隔。
【例子】查询Bookstore数据库的members表中各会员的姓名、联系电话和注册时间。
USE Bookstore;
SELECT 姓名,联系电话,注册时间
FROM members;
当在SELECT语句指定列的位置上使用“*”时,表示选择表的所有列,如果要显示members表中的所有列,不必将所有字段名一一列出,可使用以下命令。
SELECT * FROM members;
2.2 定义列别名
当希望查询结果中的列使用自己选择的列标题时,可以在列名之后使用AS子句来更改查询结果的列名,其格式如下。
SELECT 列名[AS] 别名
【例子】查询book表中图书类别为“计算机”的图书书名、作者和出版社,结果中各类的标题分别指定为name、auther和publisher。
SELECT 书名 AS name, 作者 AS auther,出版社 AS publisher
FROM book
WHERE 图书类别='计算机';
当自定义的列标题中含有空格是,必须使用引号将标题括起来。
SELECT 书名 AS 'Name of Book',作者 AS 'Name of Auther',
出版社 AS Publisher
FROM book WHERE 图书类别= '计算机';
注意 不允许在WHERE子句中使用列别名,这是因为执行WHERE代码时,可能尚未确定列值。例如,下属查询是非法的。
SELECT 性别 AS SEX FROM members WHERE SEX='男';
2.3 替换查询结果中的数据
在对表进行查询时,有时对所查询的某些列希望得到的是一种概念而不是具体的数据,例如,查询book表的库存数量,所希望知道的是库存的总体情况而不是库存数量本身,这时就可以用库存情况来替换具体的库存数。
要替换查询结果中的数据,则要使用查询语句中的CASE表达式,其格式如下。
CASE
WHEN 条件1 THEN 表达式1
WHEN 条件2 THEN 表达式2
...
ElSE 表达式n
END
说明如下
CASE表达式以CASE开始,以END结束,MySQL从条件1开始判断,条件1成立输出表达式1,结束;若条件1不成立,判断条件2,若条件2成立,输出表达式2后结束......如果条件都不成立,输出表达式n。
2.4计算列值
使用SELECT语句对列进行查询时,在结果中可以输出对列值进行计算后的值,即SELECT子句可使用表达式作为结果。
【例子】对sell表中已发货的记录计算订购金额(订购金额=订购册数*订购单价),并显示图书编号和订购金额。
SELECT 图书编号,ROUND(订购册数*订购单价,2) AS 订购金额
FROM sell
WHERE 是否发货='已发货';
其中ROUND函数用于获得一个数四舍五入后的整数值,逗号后米娜的数字用来指定小数的位数。
2.5消除结果集中的重复行
对表只选择某些列时,可能会出现重复行。使用DISTINCT关键字可以消除结果集中的重复行,保证行的唯一性,其格式如下。
SELECT DISTINCT 列名1[ ,列名2...]
【例子】对book表只选择图书类别和出版社两列,消除结果集中的重复行。
当对book表只选择图书类别和出版社两列时,结果集中有很多重复行,如图所示。
使用DISTINCT关键字来消除结果集中的重复行。
SELECT DISTINCT 图书类别,出版社 FROM book;
语句的执行结果如图所示。