1.查询语句的语法:
select --查询动作
[distinct|all] --描述列中的数据是否去除重复记录
select_list --需要查询的列,也可以说是占位符。可以使一个字段,也可以是多个字段。
from table_list --from:关键词,表示数据的来源;table_list:数据来源列表,允许有一个活多个列表;可以使表名,也可以是视图,还可以是别名
[where_clause] --查询条件部分
[group_by_clause] --group by 子句部分
[having condition] --having 子句部分
[order_by_clause] --排序部分
2.查询语句执行顺
step1:首先执行from子句,组装来自不同数据源的数据,即根据from子句中的一个或多个表创建工作表。
如果在from子句中的有两个或多个表,数据库管理系统将执行cross join运算对表进行交叉连接,作为工作表。
step2:如果有where子句,实现基于指定的条件对记录进行筛选,即数据库管理系统将where子句列列出搜索
条件作用于step1步中生成的工作表。数据库管理系统将保留哪些满足搜索条件的行,删除哪些不满足搜索条件的行。
step3:如果有group by子句,它将数据划分为多个分组。数据库管理系统将step2步生成的结果表中的行分成多个组,
每个组所有行的group_by_expression字段具有相同的值。接着,数据库管理系统将每组减少到单行,而后将其添加到
新的结果表中,用以替换step1步生成的工作表。
step4:如果有having子句,它将筛选分组。数据库管理系统将having子句列出的搜索条件作用有step3步生成的“组合“表
中的每一行。数据库管理系统将保留那些满足搜索条件的行,删除那些不满足搜索条件的行。
step5:将select子句作用于结果表,删除那些结果表中不包含在select_list中的列。如果select子句包含distinct关键词,数据库
管理系统将从结果中删除重复的行。
step6:如果有order by子句,则按指定的排序顺序规则对结果进行排序。
step7:对于交互式sql语句,在屏幕上显示结果;对于嵌入式sql语句,使用游标将结果传递给宿主程序。
注意:DBMSl值看做是相等,而且所有的null值都放入自己的组中。