本文将介绍如何使用SELECT语句从表中检索一个或多个数据列。使用SELECT从表中检索信息,必须给定两个信息,想选择什么,以及从什么地方选择。
检索单个列
输入:SELECT prod_name FROM products;
分析:利用SELECT语句从products表中检索一个名为pro_name的列。所需的列名在SELECT后面给出,FROM后面是从哪个表检索数据。
输出的结果是未排序的数据。如果没有明确对查询结果进行排序,则返回的数据的顺序没有任何意义。返回的数据顺序可能是数据被添加到表中的顺序,也可能不是。
注意:SQL语句是不区分大小写的;
检索多个列
只需在SELECT后面给出多个列的名字即可,列名之间必须以逗号分隔。
输入:SELECT prod_id,prod_name,prod_price FROM products;
分析:指定了3个列名,列名之间以逗号分隔。
检索所有的列(*通配符)
输入:SELECT * FROM products;
分析:给定一个通配符(*),则返回表中所有的列;列的顺序是列在表定义中出现的顺序。但有时候并不是这样的,表的模式的变化(如天添加或删除列)可能会导致顺序的变化。
注意:一般情况下,如果你确实需要表中的每个列,否则最后不要使用*通配符。因为检索不需要的列通常会降低检索和应用程序的性能。
使用通配符有一个优点,由于不明确指定列名,所以能检索出名字未知的列。
检索不用的行
SELECT返回所有匹配的行,但是,如果你不想检索的结果出现重复值,怎么办。
输入:SELECT vend_id FROM products;
输出:
输入:SELECT DISTINCT vend_id FROM products;
分析:SELECT DISTINCT vend_id告诉MySQL只返回不同的vend_id即可。DISTINCT必须放在列名的前面。
注意:不能部分使用DISTINCT,DISTINCT应用于所有的列而不仅是前置它的列。当DISTINCT后面有多个列时,它是以这些列组成的每行为单位进行比较。过滤掉其中多余的完全一样的行,即只显示一行。
限制结果
为了返回第一行或前几行,可以使用LIMIT。
输入:SELECT prod_name FROM products LIMIT 5;
分析:LIMIT 5指示MySQL返回不多于5行。
输出:
为了得到下一个5行,可指定要检索的开始行和行数
输入:SELECT pro_name FROM products LIMIT 5,5;
分析:LIMIT 5,5意思是返回从行5开始的接下来的5行。第一个数字为开始位置,第二个数字为要检索的行数。
输出:
所以,带一个数字的LIMIT总是从第一行开始。
注意:
1.第一行的行标是0,而不是1。所以,LIMIT 1,1将检索出第二行而不是第一行。
2.在行数不够时。即LIMIT中指定要检索的行数位检索的最大行数。如果没有足够的行(例如,LIMIT 10,5,但只有13行),将只返回它能返回的那么对行。
3.LIMIT 4 OFFSET 3,意思是从行3开始取行,等价于LIMIT 3,4。
使用完全限定的表名
之前都是用列名来引用列,其实也可以使用完全限定的名字来引用列(同时使用表名和列名)。
输入:SELECT products.prod_name FROM products;
分析:这里使用了完全限定名的列名;
输入:SELECT product.prod_name FROM crashcourse.products;
分析:这里使用了完全限定名的表名;