检索数据
写在前面,sql语句是不区分大小写的,SELECT和select是一样的,但是许多的SQL开发人员习惯对sql关键字大写,而对所有的列和表名使用小写。
select语句
检索单个列
select prod_name from products;
检索多个列
SELECT prod_id , prod_name,prod_price FROM products;
检索所有列
SELECT * FROM products;
检索不同行
使用DISTINCT关键字使得返回的信息是不同的行信息。
但是你不能这样:
除非两个列相同,否则所有行信息都会被展示出来。
限制结果
SELECT语句返回所有匹配的行。为了返回第一行或者前几行,可使用LIMIT子句
SELECT prod_name FROM products LIMIT 5;
SELECT prod_name FROM products LIMIT 5,5;
LIMIT 5 , 5代表的是从行5开始的5行。
行0:检索出来第一行为行0而不是行1。LIMIT 1,1检索出来的是第二行,而不是第一行。
行不够时,如LIMIT 10,5, 。如果只有13行时,mysql只能返回他能返回的行数了就。
MySQL 5的LIMIT语法。LIMIT 4 OFFSET 3 表示从行3开始取4行。
使用完全限定的表明
这里其实就是指,把列名通过表明限定,甚至把表明通过数据库名来完全限定。
SELECT products.prod_name FROM bizhibihui.products;
排序检索数据 (ORDER BY)
排序数据
:rainbow:子句:之前写到的FROM就算是SELECT的一个子句。为了明确排序顺序所以我们可以使用 ORDER BY子句。
SELECT prod_name FROM products ORDER BY prod_name;
这样上面的搜索结果就实现了字母排序。
:joystick:上面ORDER BY 子句使用的列是检索列,其实不使用检索的列进行排序也是完全合法的。
按多个列排序
我们在现实生活中也会遇到这样的情况:比如你说按姓名排序,当姓一样的时候,你就需要按名字来排序
SELECT prod_id , prod_price ,prod_name
FROM products
ORDER BY prod_price,prod_name;
上面的结果就可以观察到,当价格一样的时候,就会按照产品名称排序。
指定排序方向 (DESC 降序)
:ice_cream:数据排序不仅限于升序排序(从A到Z),这只是默认的排序顺序。我们还可以使用降序排序关键字DESC
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC;
上面的图片就实现了价格的降序排序。
:tangerine:打算对多个列排序怎么办呢?
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC,prod_name;
上面就实现了先对价格降序,然后价格相同的按名字升序。
:pancakes:DESC关键词只应用到直接位于其前面的列名。所以如果你想对多个列进行降序排序,必须每个列指定DESC关键字。
:label:ASC是升序关键词,但其实是没有什么用处的,因为默认就是升序呀。
例子:找出最昂贵的物品
SELECT prod_price
FROM products
ORDER BY prod_price DESC
LIMIT 1;