7.1、 基本查询

SELECT column FROM tables;

eg:

SELECT * FROM bires;

查询所有列,用星号通配符

SELECT common_name,scientifci_name FROM birds;

查询多列,有逗号隔开。

7.2 有条件地查询

假设我们只想查出某一科的鸟,如Charadriidat(即Plover)。从bird_families表可知,它的family_id是103.于是,我们在SELECT语句使用WHERE子句,从birds表中获取这一科的鸟种列表:

mariadb 数据类型 linestring mariadb select_升序

此SELECT 语句要求返回两列,并且排位与定义表时所排的"scientific_name先于common_name"不同。并且我还加了LIMIT子句,使结果只显示头三行。到于LIMIT子句,我会在稍后讲到。

因为我们将科的信息放在了另一个表中,所以必须在查询birds之前,先从bird_families找出相应的ID.这看起来好像绕了一圈。其实我们有更简捷的方法,可以直接使用Charadriidae而不是一个数字来查询。该方法叫作表连接。我们会在后面讲到。

7.3 结果排序

上例从birds表获取了指定的列,并且用LIMIT来限定了行数。所得的行的排序方式取决于它们表中被找到的顺序。因为我们只显示Charadriidae科所含的鸟种的一小部分,所以排序对最终结果有很大影响。如果想让结果按照common_name列的字母序来排列,可以这样加上ORDER BY子句:

mariadb 数据类型 linestring mariadb select_ci_02

注意,ORDER BY 是放在WHERE之后、LIMIT之前。于是,此语句不但使结果按common_name来排序,还按

此顺序取头三行。这意味着,MySQL先按WHERE子句获取所有行,并在幕后将此结果集存放于一个临时表中,

然后根据ORDER BY 子句对该表排序,最后根据LIMIT子句获取排序后的表的前三行。这就是为会么我们要交过三个子句按这样的次序来写。

ORDER BY 子句默认是升序的,即从A到Z往下排。如果你想逆序,可国上DESC选项,即ORDER BY DESC.相对的,也有表示升序的 ASC ,不过一般是不需要用的,因为默认是升序的。

SELECT * FROM bird_families WHERE scientific_name IN('Charadriidae (Plovers and Lapwings)', 'Haematopodidae (Oystercatchers)', 'Rostratulidae (Painted-Snipes)', 'Scolopacidae (Sandpipers and Allies)');

mariadb 数据类型 linestring mariadb select_升序

SELECT common_name,scientific_name,family_id

FROM birds WHERE family_id

IN(168,167,171,173)

ORDER BY common_name

LIMIT 3;

mariadb 数据类型 linestring mariadb select_升序

在WHERE子句中,我们使用逻辑运算符 AND,添加了第二个过滤条件。这样就能查出family_id在168,167,171,173之中,而且common_name不为空的行。

SELECT common_name,scientific_name,family_id

FROM birds

WHERE family_id IN(168,167,171,173)

AND common_name !=''

ORDER BY common_name LIMIT 3;

mariadb 数据类型 linestring mariadb select_结果集_05

7.4、限定结果集

SELECT common_name,scientific_name,family_id  FROM birds 

mariadb 数据类型 linestring mariadb select_升序

这个LIMIT 子句带了两个值:一个是开始位置,一个是行数

7.5、表连接