SQL学习指南——查询入门

发布时间:2026/5/18 15:07:43

SQL学习指南——查询入门 查询机制在剖析select语句之前不妨先了解一下MySQL服务器或者说任何数据库服务器是如何执行查询的首先打开命令行工具mysql然后登录mysql服务器只要服务器通过对用户名和密码的验证就会生成一个数据库连接该连接由发起请求的应用程序保持这里是mysql工具直到应用程序释放它输入quit或服务器断开连接服务器关闭每个MySQL服务器连接都会获得一个标识符在首次登录时显示这里连接ID是9如果出现什么差错数据库管理员可以利用该信息将其终止服务器验证用户名和密码并建立好连接之后就可以执行查询以及其他SQL语句了每当服务器接收到查询在执行语句之前会先检查下列事项是否有权限执行该语句是否有权限访问指定的数据语句的语法是否正确如果查询语句通过了这三项测试就会被传递给查询优化器它负责确定有效的查询执行方法优化器会查看from子句之后各个数据表的连接顺序以及可用索引等内容然后选择一种执行方案服务器用其来执行查询服务器完成查询后会向发起查询的应用程序这里是mysql工具返回结果集查询子句select语句由多个部分或子句组成查询子句子句名称作用select决定查询结果集中包含哪些列from指明从哪些数据表中检索数据以及数据表如何连接where过滤掉不需要的数据group by用于对具有相同列值的行进行分组having过滤掉不需要的分组order by根据一个或多个列对最终结果集中的行进行排序select子句尽管select子句是select语句中的第一个子句但最后才会被数据库服务器评估因为在决定最终结果集包含哪些列之前必须先要知道结果集中可能包含的所有列移除重复数据如果不想让服务器移除重复数据或者确定结果集中不会出现重复数据可以使用关键字all代替distinct。不过关键字all是默认的不需要指明所以大部分程序员都不会在查询中加入allfrom子句数据表永久数据表使用create table语句创建派生数据表由子查询返回并保存在内存中的行临时数据表保存在内存中的易失数据虚拟数据表使用create view语句创建尽管实现不同但是所有的关系型数据库都允许定义易失性或临时数据表这些表看起来就像永久数据表但是插入其中的任何数据都会在某个时候通常在事务结束或数据库会话关闭时消失create temporary table actors_j(actor_id smallint(5), first_name varchar(45), last_name varchar(45));insert into actors_jselectactor_id,first_name,last_name from actor where last_name likeJ%;select* from actors_j;会话结束就消失了大多数数据库服务器会在会话结束丢弃临时数据表Oracle DataBase是一个例外它会保留临时数据表定义以备后续会话使用视图视图是存储在数据目录中的查询其行为表现就像数据表但是并没有与之关联的数据这就是将其称为虚拟数据表的原因当查询视图时该查询会与视图定义合并以产生要执行的最终查询创建视图时不会生成或存储额外的数据服务器只是保留select语句以备后用升序排序和降序排序在排序时可以通过关键字asc和desc来指定升序排序或降序排序默认为升序排序如果希望按照降序排序需要加入desc关键字通过数字占位符进行排序如果需要根据select子句中的列进行排序可以选择使用列在select子句中的位置来替代列名

相关新闻