查询是数据库操作中十分重要的功能,本节对《Mysql必知必会》第四、五章进行学习。
SELECT语句是从表中检索一个或多个数据列,参数主要是检索的内容以及数据来源
注:sql语句不区分大小写
准备工作
#登录mysql
mysql -u root -p
输入密码
#使用goods数据库
use goods;
简单检索数据
这一部分对应第四章,主要是初步掌握数据库的检索
检索单个列
#从表products中检索出prod_name列
select prod_name from products;
检索多个列,参数列名之间用逗号隔开
#从表products检索3列
select prod_id,prod_name,prod_price from products;
检索所有列
#从products表中查询所有数据
select * from products;
检索不同的行
#查询供应商ID
select vend_id from products;
四个供应商却有14个结果,明显不是我们需要的,所以需要引入DISTINCT关键字,DISTINCT关键字是对查询所有列有一个列不相同就算不同
#查询供应商ID
select distinct vend_id from products;
限制结果
查询结果有很多行,可以用LIMIT关键字来约定查询结果显示行数
#查询前五行产品名
select prod_name from products limit 5;
#从行5开始的5行
select prod_name from products limit 5,5;
需要注意的是行是从0开始的,行5表示的是数据的第六行
#查询第二行,数值是1
select prod_name from products limit 1,1;
另外如果查询的行数超过了本身的行数,那么只会返回剩下的所有行数
#从行10开始的5行
select prod_name from products limit 10,5;
可以看出最后只有四行结果
使用完全限定的表名
特殊时期需要限定某个表中的列和某个数据库的表
#限定goods数据库的products表及表中的prod_name列
select products.prod_name from goods.products;
排序检索数据
这一部分对应的是《Mysql必知必会》第五章的内容,主要是使用SELECT 的 ORDER BY子句去给检索出的数据进行排序
排序数据
select语句查询出的结果默认是存储的顺序,一般是最开始添加到表的顺序,如果数据后来进行过更新删除,顺序就会被改变。
子句(clause) SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。子句的例子有SELECT语句的FROM子句,我们在前一章看到过这个子句。为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。 ORDER BY子句取一个或多个列的名字,据此对输出进行排序。
#查询prod_name按字典序排序
select prod_name from products order by prod_name;
这是按照ASCII值排序的
按多个列排序
查询的结果通常是多列形式,为了让数据显示的更容易明白,需要对多个列进行排序,排序的顺序是order by子句后面的顺序,也就是说前一个值相同的时候才去比较后面的值
#先按价格再按名称
select prod_id,prod_price,prod_name from products order by prod_price,prod_name;
#先按名字再按价格
select prod_id,prod_name,prod_price from products order by prod_name,prod_price;
例如上面价格相同的时候才去根据字典序去比较名称
指定排序方向
通常Mysql默认的排序是升序,也就是数字从小到大,字符从小到大,但有的时候我们需要降序,例如搜索最贵的商品,降序排序的关键字是DESC
#降序排序价格
select prod_id,prod_price,prod_name from products order by prod_price desc;
如果是对多个列排序,那么需要对哪一列降序排序就在哪一列后面加上DESC
#对价格降序排序,名称降序排序
select prod_id,prod_price,prod_name from products order by prod_price desc,prod_name desc;
可以看出都是10元的时候名称是降序的
升序的关键字是ASC,不过一般用不到,因为是默认的
最后介绍一下如何通过排序和LIMIT子句来找出最贵或最便宜的商品
#查询最贵的商品
select prod_id,prod_price,prod_name from products order by prod_price desc limit 1;
通过限制查询数量为1就可以了
需要注意的是order by子句必须在from子句后面,limit子句必须在order by子句后面,否则会出错
下一个教程将会讲解对数据进行过滤,从而得到我们想要的结果