SQL基础语句总结

来源:Asp之家 时间:2011-03-11 14:54:00 

写在前面:本节主要讲述一些基本的,常用的SQL语句,而非数据库方面的基本知识。数据库方面的知识留待以后再讲,现在就我们平常常用的一些SQL语句展开论述。

本节会涉及到SQL的基本句法,SQL的执行顺序,SQL之间的组合,动态SQL语句四个方面。这四个方面之间没有前后顺序之分,是相辅相成,其内在还是有很多联系的。

一. 四种基本的SQL语句

1. 查询

select * from table

2. 更新

update table set field=value

3. 插入

insert [into] table (field) values(value)

4. 删除

delete [from] table

二.语句的执行顺序

1.语法分析

分析语句中语法是否符合规范,衡量语句中各表达式的意义。

2.语义分析

检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。

3.选择优化器

不同的数据库有不同的算法(这个涉及到数据结构),数据库会根据自己的理解(数据库本身)为 SQL语句选择不同的优化器,不同的优化器会选择不同的“执行计划”

4.运行“执行计划”

根据“执行计划”执行SQL语句。

以上所述是数据执行时的大体路线。

5.select 语句的执行顺序

借用ItZik Ben-Gan、Lubor Kollar、Dejan Sarka所著的《Sql Server 2005 技术内幕:T-SQL查询》的一段话足以说明:

(8) select (9) distinct (11) <top_specification > <select_list>

(1)from<lef t_table>

(3) <join_type> join <right_table>

(2) on <join _condition>

(4) where <where_condition>

(5)group by <group_by_list>

(6) with {cube|rollup}

(7)having(having_condition)

(10) order by <order_by_condition>

从这个顺序可以看出,所有的查询语句都是从from开始执行的。在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的基础。

第一步:from

首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表vt1 .

第二步:on

接下来便是应用on筛选器,on 中的逻辑表达式将应用到 vt1 中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表 vt2 .

第三步:join

如果是outer join 那么这一步就将添加外部行,left outer jion 就把左表在第二步中过滤的添加进来,如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表 vt3.

第四步:多表

如果 from 子句中的表数目多余两个表,那么就将vt3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表 vt3.

第五步:where

应用where筛选器,对上一步生产的虚拟表引用where筛选器,生成虚拟表vt4,在这有个比较重要的细节不得不说一下,对于包含outer join子句的查询,就有一个让人感到困惑的问题,到底在on筛选器还是用where筛选器指定逻辑表达式呢?on和where的最大区别在于,如果在on应用逻辑表达式那么在第三步outer join中还可以把移除的行再次添加回来,而where的移除的最终的。

第六步:group by

分组,生成虚拟表 vt4

第七步:having

对vt4应用having筛选器,生成虚拟表 vt5

第八步:select

处理select 列表,生成虚拟表vt6

第九步:distinct

将vt6 中重复的行去掉,生成虚拟表vt7

第十步:order   by

将vt7中的行按order by 子句中的列列表排序,生成一个游标vc8

第十一步:top

从vc8的开始处选择指定数量或比例的行,生成虚拟表vt9,并返回给调用者

三. SQL语句扩展

1.select

1.1 选择性插入语句

1.1.1 Insert into  table1 (field1 )  Select field2 from table2
要求table1必须存在。

1.1.2 select field1 into table1 from table2

要求table1不存在,在运行时会自动创建表名为table1,字段名为field1的一个表。



标签:SQL数据库,SQL基础语句,基本句法,站长之家
0
投稿

猜你喜欢

  • Python脚本实时处理log文件的方法

    2021-02-23 06:40:32
  • 解决Python安装后pip不能用的问题

    2023-05-10 04:52:14
  • python广度搜索解决八数码难题

    2023-01-26 18:12:43
  • OpenCV实现车辆识别和运动目标检测

    2023-09-22 18:55:40
  • 2008北京奥运会倒计时js代码

    2008-01-22 18:18:00
  • 用Python中的字典来处理索引统计的方法

    2022-05-28 19:43:45
  • 用好FrontPage2003的九大功能

    2008-02-21 14:29:00
  • 基于SQL中的数据查询语句汇总

    2024-01-28 07:06:09
  • mysql中的load命令使用方法

    2024-01-21 05:39:23
  • JavaScript实现彩虹文字效果的方法

    2024-06-05 09:34:41
  • JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法

    2024-04-18 10:03:09
  • Python列表去重的几种方法整理

    2022-06-18 18:05:17
  • javascript获取wx.config内部字段解决微信分享

    2024-04-23 09:15:50
  • 页面重构应注意的repaint和reflow

    2011-03-31 17:11:00
  • selenium+opencv实现滑块验证码的登陆

    2022-03-28 06:49:04
  • Python3正则匹配re.split,re.finditer及re.findall函数用法详解

    2023-06-27 10:13:48
  • 只用40行Python代码就能写出pdf转word小工具

    2021-11-03 18:02:00
  • python制作简单五子棋游戏

    2021-09-13 06:49:47
  • Python使用面向对象方式创建线程实现12306售票系统

    2021-01-22 09:13:36
  • Python脚本Selenium及页面Web元素定位详解

    2023-06-14 12:21:10
  • asp之家 网络编程 m.aspxhome.com