是一种说明性的编程语言;对于C之类的过程语言,你编写程序时需要指明得出结果所需的每个步骤,使用SQL这种说明性语言,只需描述想要的内容中,无需了解存取路径,只需提出what to do,而无需指明how to do;是一种面向集合的操作方式,只用于9个动词。因此,标准的SQL没有传统的流程控制结构,如if-then-else、for等语句;

它是交互式式或嵌入式语言。在交互式SQL环境中,用户输入的SQL命令直接发送到数据库管理系统,得到结果后立即显示。DBMS的服务器同时拥有图形和命令行工具,用一接受用户输入的SQL语句或包含SQL程序(脚本)的文本文件。

在开发数据库应用程序时,可以将SQL语句“嵌入”到编写程序所用的宿主语言(host language)中。宿主语言通常是一种通用语言(如C++、Java)或脚本语言(如PHP或Python).如一个PHP CGI脚本可以用SQL语句来查询MySQL数据库,MySQL交查询的结果返回给PHP变量,以便进一步分析或显示在网页上。

但在DBMS、宿主语言或操作环境中,语法上略有差异。

SQL表示“结构化查询语言”是一种变通的误解。它不是结构化的,不只用于查询,不是一种过程语言;

查询只是SOL语言的重要组成部分,但不是全部,除了查询功能处,还包括数据定义(对表、表结构的操作),create,drop alter;数据操作:对表记录的操作,insert,delete,update;数据控制:grant,revoke(Vf不提供SQL的数据控制功能)。数据查询:select;目前所有的关系型数据库管理系统如oracle,SQL Server,DB2,VFP都支持SQL;

其实就是对表、对表中列、行的操作;

1 创建、更改和删除表;

2 插入、更新和删除行;

3 查询(从n表中)选择列,筛选列;

数据定义语句:对表或表结构的操作 Create  
  Alter  
  Drop  
数据操作语句:对表记录的操作 Insert  
  Update  
  Delete  
数据查询语句 Select  
数据控制语句 Grant  

SQl中是不区分字母大小写的,对一地SQL关键字一般用大写,对于子句也一般另起一行;。

SQL的三级模式:

外模式:视图

模式:基本表

内模式:存储文件

DDL create talbe tablename    
  alter table tablename add fieldname
        alter fieldname
          set check
          set default
          drop check
          drop default
        rename column
        drop column
  drop table tablename    
DML insert into target[(field1[,field2[,…]])]
      values(values1[,values2[,…]])
  update  tablename    
    set cloumn_name=eExpression1[,column_name=eExpression2…]
      where filtercondition
  delete from tablename[where condition]
  select item      
    from tablename    
    where condition    
create table score(
课程代码 c(3) primary key,
课程名称 c(20),
学分 n(1,0))
性别 c(2) check(性别="男",or 性别="女")
简历 G null

update tablename set column_name=eExpresion1 [,column_name2=eExpression2…]

where filterCondiotn [,filterconditon…]

replace [<scope>]<recordname1> with <expression1>[addictive] [,<recordname2> with <expression2>[addictive]

[for<condition>][while<condition>]

Select

Select的选择项可以是表文件中的一个字段,也可以是一个常量,也可以是一个表达式,对于字段和表达式还可以使用下列函数:avg\sum\count\min\max;

SELECT [all | Distinct][top Expr [percent]]  
[alias.] Columns [as column_name] 指定查询中包含的字段(列)、常数、表达式;
From [databasename!] tables [[as]local_alias] 指定查询所用的表的名称,可以是多个;
[[inner] | Left [outer] | Right [outer] ! Full [outer] Join databaseName!] 指定两个表的内在关系;
[on joincondition…] 指定表的连接条件
 
[WHERE joincondition [and joinCondition… 指定查询条件
[and ! Or filterCondition [and ! Or filterCondition…]]]  
[GROUP by groupColumn [,GroupColumn…]] 根据某一列或某几列的值将查询结果中的各行进行分组;
[having filterCondition] 指定包含在查询结果中的组必须满足的条件
[UNION [all] selectCommand] 将一个SELECT的查询结果与另一个查询结果联接在一起;
[ORDER by order_item [asc ! Desc][,order_item [asc ! Desc]…]] 根据某列或某几列中的数据查询结果进行排序;
[INTO [array arrayname | Cursor cursorName 指定查询结果的去向;
[nofilter | Readwrite] | Table tableName[additive]  
! To printer [prompt] ! To screen]][prefference name][noconsole][plain][nowait]  
[database databasename [name long TableName]]]]  

into array:将查询结果保存到数组中,该数组为二维数组,数组的列对应记录字段,数据的行对应记录;

into cursor:将查询结果保存到临时表中,查询执行后,存放查询结果的表成为当前表。临时表除不能被修改外,其他特点与普通表一样。应用程序被关闭时,临时表自动被删除。

into table tableName:将查询结果保存到永久表中;

to file:将查询结果保存到文本文件中;

to print[prompt]:将查询结果输出到打印机;prompt表示打印之前显示打印机设置对话框

from子句:列出所有从中检索数据的表,如果没有打开表,VF自动打开表,查询结束后关闭。

select子句:指定包括在查询结果中的项,一个项可以是以下内容(各元素用逗号分开):

1 通配符:*

2 表中的字段名称;

3 foxpro函数;

4 select中可用的列函数;

5 用户自定义的函数;

6 常数;

若在select子句中的字段名是唯一的,则不必在字段名前加别名修饰,SQL能自动找到这些字段。若字段名是非唯一的(即同一字段名出现在from子句中的两个或两个以上表中),则必须使用字段所在表的别名修饰该字段。

select中可使用的通配符:*,如上述;%,_;*只能用在select字句中,后面的%和_只能用在where子句中,和like一起使用,%表示一个字符串,而_表示一个字符。如:select 客户名 from 客户表 where 客户名 like "山东%银行"

as可以创建列的别名;

Distinct消除重复行:如:select distinct 客户名称 from 销售明细表;

where子句筛选行;

说明选择记录的条件,可以包含多个选择条件,各条件间用and\or连接而构成较长的逻辑表达式;

like匹配模式

between进行范围筛选;

in进行列表筛选;

is null测试空值;

ORDER BY排序列;

and,or和not组合及求反条件;

select * form 工资表 where 员工名称 in(select 员工名称 from 员工表 where 学历="大专"

使用宏替换:

如现有一个查询表单,用户自己可以输入查询条件,则[开始]按钮的click过程:

cSearch=alltrim(thisform.text1.value)

select * from customer where &cSearch

order by子句:对查询结果进行排序;

groud by子句:对查询结果进行分组小计;

having子句:分组条件,where子句只能对基表中的记录做筛选。

使用top子句选择一定数量或一定百分比的记录:如:select top 10 * from…

如果要查询所藏图书中,各个出版社的图书最高单价、平均单价和册数,请对下面的SQL语句填空。

SELECT 出版单位,MAX(单价),AVG(单价),  COUNT(*) ;

FROM 图书管理!图书; GROUP BY 出版单位

子查询

SELECT pub-name

  FROM publishers

  WHERE pub-id IN

  (SELECT pub-id

    FROM titles

    WHERE type = 'biography')

索引是排序的列表,在这个列表中索引列(或列表)的每个不同值和包含该值的行的硬盘地址存储在一起。DBMS无需检索整个表来定位行,而仅需扫描索引中的地址,就可以直接访问相应列。索引搜索通常要比顺序搜索快,但也是有代价的。其实质也就是另建了一张反映被索引表的行的地址清单;

视图是存储的select语句,它能返回基于一个或多个表(或称作基础表)检索得到的数据表;

视图的基础表可以是基本表、临时表或其他视图,是指定的数据列或数据行的集合。

CREATE VIEW view-customes

  AS

  SELECT ...

创建视力并不会有任何显示,只是为了让DBMS用一个命名的select语句存储视图,然后通过其检索数据;