目录
[1.检索单个列(SELECT 列名 FROM 表名;)](#1.检索单个列(SELECT 列名 FROM 表名;))
[2.检索多个列(SELECT 列名1,列名2,列名3 FROM 表名;)](#2.检索多个列(SELECT 列名1,列名2,列名3 FROM 表名;))
[3.检索所有的列(SELECT * FROM 表名;)](#3.检索所有的列(SELECT * FROM 表名;))
[4.检索不同的行(SELECT 列名 FROM 表名;)](#4.检索不同的行(SELECT 列名 FROM 表名;))
[5.限制结果(SELECT 列名 FROM 表名 LIMIT 行数;)](#5.限制结果(SELECT 列名 FROM 表名 LIMIT 行数;))
[6.使用完全限定的表名(SELECT 表名.列名 FROM 表名;)](#6.使用完全限定的表名(SELECT 表名.列名 FROM 表名;))
[4.limit和order by子句的结合使用](#4.limit和order by子句的结合使用)
一、select语句
最经常使用的语句就是select 语句,它的作用是从一个或多个表中检索信息 。为了使用select检索数据,至少给出两条信息-----想选择什么以及从什么地方选择。
1.检索单个列(SELECT 列名 FROM 表名;)
输入:select prod_name from products;
输出:

注意:结束SQL语句:如果使用mysql命令行,多条SQL语句必须以分号(;)分隔,且SQL语句必须加上分号来结束。
SQL语句的大小写问题:SQL语句不区分大小写!!!SELECT和select是相同的,写成Select也没有关系。但是把SQL的关键字使用大写,表名等使用小写,可以使代码更易于阅读和调试。
2.检索多个列(SELECT 列名1,列名2,列名3 FROM 表名;)
使用同一个SELECT语句检索多个列,需要在每个列名之后加上逗号,最后一个列名不需要加。
输入: select vend_id,vend_name from vendors;

3.检索所有的列(SELECT * FROM 表名;)
可以通过在实际列名的位置使用星号(*)通配符来检索。
输入:select * from vendors;

注意:除非需要检索表中的所有列,否则最好不使用(*)通配符,检索不需要的列会降低检索效率和应用程序的性能。
4.检索不同的行(SELECT 列名 FROM 表名;)
假如想要获取所有的ID
输入:select vend_id from vendors;

注意:如果所获取的数据有重复出现的,可以使用DISTINCT关键字,此关键字指示MySQL只返回不同的值。即(SELECT DISTINCT vend_id FROM vendors;)
5.限制结果(SELECT 列名 FROM 表名 LIMIT 行数;)
为了返回第一行或者前几行,可以使用LIMIT子句。
输入:select vend_id from vendors limit 4;

注意: 如果要返回下一个4行,即从行4开始的4行,如下所示:
select vend_id from vendors limit 4,4;
如果行数不够,MySQL只返回能返回的行数。
6.使用完全限定的表名(SELECT 表名.列名 FROM 表名;)
使用完全限定的名字来引用列(同时使用表名和列名)。
输入: select vendors.vend_name from vendors;

注意:表名也可以是限定的,前提是这个表名确实存在于某个数据库中。
二、排序检索数据
1.排序数据
一般来说返回表中的某个列没有特定顺序,但是检索出来的数据也不是纯粹的随机显示 ,而是以底层表中出现的顺序显示。如果数据后来进行过更新或删除,这个顺序就会受到MySQL重用回收存储空间的影响 。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。
为了明确的排序用SELECT检索出来的数据,可以使用ORDER BY 子句。ORDER BY子句取一个或多个列的名字对输出进行排序。输出结果将以字母顺序进行排序
格式:SELECT 列名 FROM 表名 ORDER BY 列名;
输入: select vend_name from vendors order by vend_name;

2.按多个列排序
为了按多个列进行排序,则需要指定列名,列名之间用逗号(,)分隔。
格式:SELECT 列名1,列名2,列名3 FROM 表名 ORDER BY 列名1,列名2,列名3;
输入:select prod_price,prod_name from products order by prod_price,prod_name;

以上排序按照价格进行排序。仅在多个行具有相同的prod_price值时才按照prod_price排序。如果prod_price列中的值是唯一的,则不会按照prod_price排序。
3.指定排序方向
数据排序不只是升序排序(A-Z),也有降序排序(Z-A),为了使用降序排序,可以使用DESC关键字。
格式:SELECT 列名1,列名2,列名3 FROM 表名 ORDER BY 列名1 DESC;
输入: select prod_price,prod_name from products order by prod_price desc;

如果要使用多个列进行排序怎么办?则可以降序进行排序之后再对产品进行排序。
desc只对prod_price有效,而其他的依旧以升序排序。
示例:
注意:如果想要多个列都降序排序,则每个列后都要加上desc关键字。
4.limit和order by子句的结合使用
使用limit和order by的组合,可以找到某个列中最高或最低的值。
输入:select prod_price,prod_name from products order by prod_price desc limit 1;

注意:在给出order by子句时,要保证它位于from之后,如果使用limit,它必须位于order by之后。使用子句顺序不对将会产生错误。
即from------>order by------->limit