SELECT 语句的语法如下:
SELECT selection_list 选择哪些列
FROM table_list 从何处选择行
WHERE primary_constraint 行必须满足什么条件
GROUP BY grouping_columns 怎样对结果分组
HAVING secondary_constraint 行必须满足的第二条件
ORDER BY sorting_columns 怎样对结果排序
LIMIT count 结果限定
注意:所有使用的关键词必须精确地以上面的顺序给出。例如,一个HAVING子句必须跟在GROUP BY子句之后和ORDER BY子句之前。
除了词“SELECT”和说明希望检索什么的 column_list 部分外,语法中的每样东西都是可选的。有的数据库还需要 FROM 子句。MySQL 有所不同,它允许对表达式求值而不引用任何表。
一些最基本用法:
mysql> SELECT * FROM pet;//查询表里全部值
mysql> SELECT * FROM pet WHERE name = "Bowser";//表的特定值
mysql> SELECT name, birth FROM pet where owner="Gwen";//特定字段特定值
mysql> SELECT death-birth FROM pet WHERE name="Bowser";//表达式计算,计算Browser生活的天数
由于MySQL允许对表达式求值而不引用任何表。所以也可以这样使用:
mysql>select (2+3*4.5)/2.5;
条件查询
mysql> SELECT * FROM pet WHERE birth >= "1998-1-1";
mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f";
mysql> SELECT * FROM pet WHERE species = "snake" OR species = "bird";
查询排序
mysql> SELECT name, birth FROM pet ORDER BY birth;
mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC;
查询分组与行计数
GROUP BY 从句根据所给的列名返回分组的查询结果,可用于查询具有相同值的列。
mysql>SELECT * FROM pet GROUP BY species;
查询显示结果时,被分组的列如果有重复的值,只返回靠前的记录,并且返回的记录集是排序的。这并不是一个很好的结果。仅仅使用GROUP BY从句并没有什么意义,该从句的真正作用在于与各种组合函数配合,用于行计数
1、COUNT()函数计数非NULL结果的数目。
mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
查询多个表
查询多个表,FROM子句列出表名,并用逗号分隔,因为查询需要从他们两个拉出信息。
当组合(联结-join)来自多个表的信息时,你需要指定在一个表中的记录怎样能匹配其它表的记录。这很简单,因为它们都有一个name列。查询使用WHERE子句基于name值来匹配2个表中的记录。
mysql> SELECT pet.name, (TO_DAYS(date) - TO_DAYS(birth))/365 AS age, remark
-> FROM pet, event
-> WHERE pet.name = event.name AND type = "litter";