Mariadb学习笔记查询数据0

来源:互联网 发布:曾荫权对抗中央 知乎 编辑:程序博客网 时间:2024/05/18 03:55
 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学习笔记查询数据0

此SELECT语句要求返回两列,并且排位与定义表时所排的"scientific_name先于common_name"不同。并且我还加了LIMIT子句,使结果只显示头三行。到于LIMIT子句,我会在稍后讲到。
因为我们将科的信息放在了另一个表中,所以必须在查询birds之前,先从bird_families找出相应的ID.这看起来好像绕了一圈。其实我们有更简捷的方法,可以直接使用Charadriidae而不是一个数字来查询。该方法叫作表连接。我们会在后面讲到。
 
7.3 结果排序
上例从birds表获取了指定的列,并且用LIMIT来限定了行数。所得的行的排序方式取决于它们表中被找到的顺序。因为我们只显示Charadriidae科所含的鸟种的一小部分,所以排序对最终结果有很大影响。如果想让结果按照common_name列的字母序来排列,可以这样加上ORDERBY子句:
Mariadb学习笔记查询数据0
注意,ORDER BY是放在WHERE之后、LIMIT之前。于是,此语句不但使结果按common_name来排序,还按
此顺序取头三行。这意味着,MySQL先按WHERE子句获取所有行,并在幕后将此结果集存放于一个临时表中,
然后根据ORDER BY子句对该表排序,最后根据LIMIT子句获取排序后的表的前三行。这就是为会么我们要交过三个子句按这样的次序来写。
ORDER BY 子句默认是升序的,即从A到Z往下排。如果你想逆序,可国上DESC选项,即ORDER BYDESC.相对的,也有表示升序的ASC,不过一般是不需要用的,因为默认是升序的。
 

SELECT * FROM bird_families
WHERE scientific_name
IN('Charadriidae (Plovers and Lapwings)',
'Haematopodidae (Oystercatchers)',
'Rostratulidae (Painted-Snipes)',
'Scolopacidae (Sandpipers and Allies)');
 
Mariadb学习笔记查询数据0

SELECT common_name,scientific_name,family_id
FROM birds WHERE family_id
IN(168,167,171,173)
ORDER BY common_name
 LIMIT 3;
Mariadb学习笔记查询数据0
 
 
在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学习笔记查询数据0

7.4、限定结果集
 SELECTcommon_name,scientific_name,family_id  FROMbirds  WHERE family_id IN(168,167,171,173) ANDcommon_name != '' ORDER BY common_name LIMIT 3,2;
Mariadb学习笔记查询数据0

这个LIMIT 子句带了两个值:一个是开始位置,一个是行数
 
7.5、表连接