SQL语言集数据查询、数据操作(DML)、数据定义(DDL)和数据控制(DCL)功能于一体。
SQL命令基本格式
SELECT命令的部分定义:
SELECT (DISTINCT) listofcolumns
FROM listoftables
[WHERE expression (predicates inCNF)]
[GROUP BY listofcolumns]
[HAVING expression]
[ORDER BY listofcolumns];
解析:
FROM 指定要读取的表或视图;
如果存在WHERE子句,结果集被条件expression过滤;
如果存在GROUP BY子句,结果集按照listofcolumns生成组聚合;
如果存在HAVING子句,结果集的组聚合将要受到指定的expression过滤;
如果DISTINCT关键字存在,则从结果集中删除重复的行。
查询语句处理
当数据库xit供运行在客户机/服务器模式下时,数据库服务器负责处理客户端所提出的查询和将结果集返回给客户端。当客户端把SQL语句传送到服务器后,服务器进程会对该语句进行解析。解析工作在服务端完成。具体步骤如下:
- 语句合法性检查:只做语法检查
- 语义检查:对语句中的字段、表等进行检查
- 获得对象解析锁:对操作对象加锁,保证数据一致性
- 数据访问权限核对:检查访问者是否有库、表、列的访问权限
模块协作
- 客户端应用程序将SQL语句通过某种方式发送到DBMS
- DBMS通过接口接受访问、接收语句
- 将此语句通过内部的“查询处理”模块进行语法(yacc)、词法(lex)检查
- 根据解析出来的结果,DBMS生成大量查询计划并从其中选取最高效的查询计划
- 最后执行查询计划,并访问数据存储文件
DBMS的层次结构
- 应用层:处理各式各样的数据库应用
- SQL语言翻译处理层:处理数据库语言。向上提供的数据接口是关系表、视图等。其功能是对数据库语言的各类语句进行语法分析、视图转换、权限检查、完整性检查、查询优化等。通过对下层基本模块的调用,生成可执行代码。这些代码的运行即可完成数据库语言的功能要求。
- 数据存取层:处理对象为数据表的单行。它把上层的集合操作转换为单行记录操作。执行扫描(如表扫描Table Scan)、排序(Sort)、数据查找、插入、修改、删除、封锁等基本操作。完成数据记录的存取、存取路径维护、并发控制、事务管理等工作
- 数据存储层:处理对象时数据页和系统缓冲区(Buffer)。执行文件的逻辑打开、关闭、读页、写页、缓冲区读和写、页面淘汰等操作,完成缓冲区管理、内外存交换、外存的数据管理等功能。