文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
SQL字符串函数
SQL函数详解
SQL数据库远程备份到本地
SQL数据库备份的基础知识
让SQL飞起来
常用SQL语句词典
精妙SQL语句大全
SQL语句大全
SQL语言快速入门之三
SQL语言快速入门之二
SQL语言快速入门之一
数据库设计入门-SQL语言及其优点
数据库设计入门-SQL语言的分类及语法
数据库设计入门-ODBC与ADO对象
全面接触SQL语法(二)
全面接触SQL语法(一)
用SQL创建数据库
SQL语言的分类及语法
SQL语言及其优点
SQL语法参考手册
高手是怎样炼成的:精妙SQL语句介绍
检查数据库表是否存在函数
用DateAdd,DateDiff,between实现指定..
sql函数--DATEDIFF
SQL教程(2)
SQL语言教程(1)


技术教程 -> SQL教程 ->  
SQL语言教程(1)
来源:转载   人气:1554   录入时间:2007-11-8
    SQL语言由命令、子句、运算和集合函数等构成。在SQL中,数据定义语言DDL(用来建立及定义数据表、字段以及索引等数据库结构)包含的命令有create、drop、alter;数据操纵语言DML(用来提供数据的查询、排序以及筛选数据等功能)包含的命令有select、insert、update、delete。
   
   一、SQL语句
   
   (1)select 查询语句
   语法:select [ALL|DISTINCT] <目标列表达式> [AS 列名]
   [,<目标列表达式> [AS 列名] ...] FROM <表名> [,<表名>…]
   [where <条件表达式> [AND|OR <条件表达式>...]
   [GROUP BY 列名 [HAVING <条件表达式>]]
   [ORDER BY 列名 [ASC | DESC]]
   解释:[ALL|DISTINCT] ALL:全部; DISTINCT:不包括重复行
   <目标列表达式> 对字段可使用AVG、COUNT、SUM、MIN、MAX、运算符等
   <条件表达式>
   查询条件 谓词
   比较 =、>,<,>=,<=,!=,<>,
   确定范围 BETWEEN AND、NOT BETWEEN AND
   确定集合 IN、NOT IN
   字符匹配 like("%"匹配任何长度,"_"匹配一个字符)、NOT like
   空值 IS NULL、IS NOT NULL
   子查询 ANY、ALL、EXISTS
   集合查询 union(并)、INTERSECT(交)、MINUS(差)
   多重条件 AND、OR、NOT
   <GROUP BY 列名> 对查询结果分组
   [HAVING <条件表达式>] 分组筛选条件
   [ORDER BY 列名 [ASC | DESC]] 对查询结果排序;ASC:升序 DESC:降序
   例1: select student.sno as 学号, student.name as 姓名, course as 课程名, score as 成绩 from score,student where student.sid=score.sid and score.sid=:sid
   例2:select student.sno as 学号, student.name as 姓名,AVG(score) as 平均分 from score,student where student.sid=score.sid and student.class=:class and (term=5 or term=6) group by student.sno, student.name having count(*)>0 order by 平均分 DESC
   例3:select * from score where sid like '9634'
   例4:select * from student where class in (select class from student where name='陈小小')
   
   (2)insert插入语句
   语法:insert INTO <表名> [(<字段名1> [,<字段名2>, ...])] VALUES (<常量1> [,<常量2>, ...])
   语法:insert INTO <表名> [(<字段名1> [,<字段名2>, ...])] 子查询
   例子:insert INTO 借书表(rid,bookidx,bdate)VALUES (edit1.text,edit2.text,date)
   例子:insert INTO score1(sno,name) select sno,name FROM student where class='9634'
   
   (3)update-SQL
   语法:update 〈表名〉
   SET 列名1 = 常量表达式1[,列名2 = 常量表达式2 ...]
   where <条件表达式> [AND|OR <条件表达式>...]
   例子:update score set credithour=4 where course='数据库'
   
   (4)delete-SQL
   语法:delete FROM〈表名〉[where <条件表达式> [AND|OR <条件表达式>...]]
   例子:delete from student where sid='003101'
   
   (5)create TABLE
   create TABLE | DBF TableName1 [NAME LongTableName] [FREE]
   (FieldName1 FieldType [(nFieldWidth [, nPrecision])]
   [NULL | NOT NULL]
   [CHECK lExpression1 [ERROR cMessageText1]]
   [DEFAULT eExpression1]
   [PRIMARY KEY | UNIQUE]
   [REFERENCES TableName2 [TAG TagName1]]
   [NOCPTRANS]
   [, FieldName2 ...]
   [, PRIMARY KEY eExpression2 TAG TagName2
   |, UNIQUE eExpression3 TAG TagName3]
   [, FOREIGN KEY eExpression4 TAG TagName4 [NODUP]
   REFERENCES TableName3 [TAG TagName5]]
   [, CHECK lExpression2 [ERROR cMessageText2]])
   | FROM ARRAY ArrayName
   
   (6)alter TABLE
   alter TABLE TableName1
   ADD | alter [COLUMN] FieldName1
   FieldType [(nFieldWidth [, nPrecision])]
   [NULL | NOT NULL]
   [CHECK lExpression1 [ERROR cMessageText1]]
   [DEFAULT eExpression1]
   [PRIMARY KEY | UNIQUE]
   [REFERENCES TableName2 [TAG TagName1]]
   [NOCPTRANS]
   
   (7)drop TABLE
   drop TABLE [路径名.]表名
   
   (8)create INDEX
   create INDEX index-name ON table-name(column[,column…])
   例:create INDEX uspa ON 口令表(user,password)
   
   (9)drop INDEX
   drop INDEX table-name.index-name|PRIMARY
   例:drop INDEX 口令表.uspa
   
   二、在程序中使用静态SQL语句
   在程序设计阶段,将SQL命令文本作为TQuery组件的SQL属性值设置。
   
   三、在程序中使用动态SQL语句
   动态SQL语句是指在SQL语句中包含有参数变量的SQL语句(如:select * from student where class=:class),在程序中可以为参数赋值。给参数赋值的方法有:
   
   1、利用参数编辑器为参数赋值
   选中TQuery组件,在对象监视器OI中点取Params项,在弹出的参数编辑窗口中设置参数的值。
   例:select bookidx AS 书号,藏书表.bookname AS 书名, bdate AS 借书日期 FROM 借书表,藏书表 where 借书表.bookidx=藏书表.bookidx and rid=:rid
   
   2、在程序运行中通过程序为参数赋值
   (1)根据参数在SQL语句中出现的顺序,使用TQuery的Params属性为参数赋值;
   
   例:在借书表中插入一条记录
   with Query1 do
   begin
   SQL.clear;
   SQL.add('insert Into 借书表(bookidx,rid,rdate)');
   SQl.add('Values(:bookidx,:rid,:rdate)');
   Params[0].AsString := bookidxEdit.Text;
   Params[1].AsString := ridEdit.Text;
   Params[2] .AsDate:=date;
   ExecSQL;
   End;
   
   (2)根据SQL语句中的参数名字,调用ParamByName方法为参数赋值;
   ParamByName('bookidx').AsString := bookidxEdit.Text;
   ParamByName('rid').AsString := ridEdit.Text;
   ParamByName('rdate') .AsDate:=date;
   ExecSQL;
   有:AsString 、AsSmallInt 、AsInteger 、AsWord 、AsBoolean 、AsFloat 、AsCurrency 、AsBCD 、AsDate 、AsTime 、AsDateTime转换函数
   
   3、使用数据源为参数赋值
   把TQuery的DataSource属性设置为另一个数据源(T DataSource名字),Delphi会把未赋值的参数与指定的数据源中的各字段相比较,并将匹配的字段的值赋给未赋值的参数,可实现主表—明细表应用。
   
   四、对TQuery返回的数据集进行修改
   一般情况下,TQuery返回的数据集是只读的,不能修改;
   对不包含集操作(如:SUM、COUNT)的单表select查询,设置TQuery的RequsetLive属性为True,则可修改TQuery返回的数据集。
   
   var
   I: Integer;
   ListItem: string;
   begin
   for I := 0 to Query1.ParamCount - 1 do
   begin
   ListItem := ListBox1.Items[I];
   case Query1.Params[I].DataType of
   ftString:
   Query1.Params[I].AsString := ListItem;
   ftSmallInt:
   Query1.Params[I].AsSmallInt := StrToIntDef(ListItem, 0);
   ftInteger:
   Query1.Params[I].AsInteger := StrToIntDef(ListItem, 0);
   ftWord:
   Query1.Params[I].AsWord := StrToIntDef(ListItem, 0);
   ftBoolean:
   begin
   if ListItem = 'True' then
   Query1.Params[I].AsBoolean := True
   else
   Query1.Params[I].AsBoolean := False;
   end;
   ftFloat:
   Query1.Params[I].AsFloat := StrToFloat(ListItem);
   ftCurrency:
   Query1.Params[I].AsCurrency := StrToFloat(ListItem);
   ftBCD:
   Query1.Params[I].AsBCD := StrToCurr(ListItem);
   ftDate:
   Query1.Params[I].AsDate := StrToDate(ListItem);
   ftTime:
   Query1.Params[I].AsTime := StrToTime(ListItem);
   ftDateTime:
   Query1.Params[I].AsDateTime := StrToDateTime(ListItem);
   end;
   end;
   end;
   
   
   




Copyright(C)2007-2024 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987