SQL基础知识大全.docx

上传人:b****5 文档编号:8203152 上传时间:2023-01-29 格式:DOCX 页数:34 大小:42.55KB
下载 相关 举报
SQL基础知识大全.docx_第1页
第1页 / 共34页
SQL基础知识大全.docx_第2页
第2页 / 共34页
SQL基础知识大全.docx_第3页
第3页 / 共34页
SQL基础知识大全.docx_第4页
第4页 / 共34页
SQL基础知识大全.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

SQL基础知识大全.docx

《SQL基础知识大全.docx》由会员分享,可在线阅读,更多相关《SQL基础知识大全.docx(34页珍藏版)》请在冰豆网上搜索。

SQL基础知识大全.docx

SQL基础知识大全

SQL基础知识大全

SQL语言由命令、子句、运算和集合函数等构成。

在SQL中,数据定义语言DDL(用来建立及定义数据表、字段以及索引等数据库结构)包含的命令有CREATE、DROP、ALTER;数据操纵语言DML(用来提供数据的查询、排序以及筛选数据等功能)包含的命令有SELECT、INSERT、UPDATE、DELETE。

一、SQL语句

(1)Select查询语句

语法:

SELECT[ALL|DISTINCT]<目标列表达式>[AS列名]

[,<目标列表达式>[AS列名]...]FROM<表名>[,<表名>…]

[WHERE<条件表达式>[AND|OR<条件表达式>...]

[GROUPBY列名[HAVING<条件表达式>>

[ORDERBY列名[ASC|DESC>

解释:

[ALL|DISTINCT] ALL:

全部;DISTINCT:

不包括重复行

<目标列表达式>对字段可使用AVG、COUNT、SUM、MIN、MAX、运算符等

<条件表达式>

查询条件谓词

比较=、>,<,>=,<=,!

=,<>,

确定范围BETWEENAND、NOTBETWEENAND

确定集合IN、NOTIN

字符匹配LIKE(“%”匹配任何长度,“_”匹配一个字符)、NOTLIKE

空值ISNULL、ISNOTNULL

子查询ANY、ALL、EXISTS

集合查询UNION(并)、INTERSECT(交)、MINUS(差)

多重条件AND、OR、NOT

对查询结果分组

[HAVING<条件表达式>]分组筛选条件

[ORDERBY列名[ASC|DESC>对查询结果排序;ASC:

升序DESC:

降序

例1:

selectstudent.snoas学号,student.nameas姓名,courseas课程名,scoreas成绩fromscore,studentwherestudent.sid=score.sidandscore.sid=:

sid

例2:

selectstudent.snoas学号,student.nameas姓名,AVG(score)as平均分fromscore,studentwherestudent.sid=score.sidandstudent.class=:

classand(term=5orterm=6)groupbystudent.sno,student.namehavingcount(*)>0orderby平均分DESC

例3:

select*fromscorewheresidlike'9634'

例4:

select*fromstudentwhereclassin(selectclassfromstudentwherename='陈小小')

(2)INSERT插入语句

语法:

INSERTINTO<表名>[(<字段名1>[,<字段名2>,...])]VALUES(<常量1>[,<常量2>,...])

语法:

INSERTINTO<表名>[(<字段名1>[,<字段名2>,...])]子查询

例子:

INSERTINTO借书表(rid,bookidx,bdate)VALUES(edit1.text,edit2.text,date)

例子:

INSERTINTOscore1(sno,name)SELECTsno,nameFROMstudentWHEREclass=’9634’

(3)UPDATE-SQL

语法:

UPDATE〈表名〉

SET列名1=常量表达式1[,列名2=常量表达式2...]

WHERE<条件表达式>[AND|OR<条件表达式>...]

例子:

updatescoresetcredithour=4wherecourse='数据库'

(4)DELETE-SQL

语法:

DELETEFROM〈表名〉[WHERE<条件表达式>[AND|OR<条件表达式>...>

例子:

Deletefromstudentwheresid='003101'

(5)CREATETABLE

CREATETABLE|DBFTableName1[NAMELongTableName][FREE]

(FieldName1FieldType[(nFieldWidth[,nPrecision])]

 [NULL|NOTNULL]

 [CHECKlExpression1[ERRORcMessageText1>

 [DEFAULTeExpression1]

 [PRIMARYKEY|UNIQUE]

 [REFERENCESTableName2[TAGTagName1>

 [NOCPTRANS]

[,FieldName2...]

 [,PRIMARYKEYeExpression2TAGTagName2

|,UNIQUEeExpression3TAGTagName3]

 [,FOREIGNKEYeExpression4TAGTagName4[NODUP]

 REFERENCESTableName3[TAGTagName5>

 [,CHECKlExpression2[ERRORcMessageText2>)

|FROMARRAYArrayName

(6)ALTERTABLE

ALTERTABLETableName1

ADD|ALTER[COLUMN]FieldName1

 FieldType[(nFieldWidth[,nPrecision])]

 [NULL|NOTNULL]

 [CHECKlExpression1[ERRORcMessageText1>

 [DEFAULTeExpression1]

 [PRIMARYKEY|UNIQUE]

 [REFERENCESTableName2[TAGTagName1>

 [NOCPTRANS]

(7)DROPTABLE

DROPTABLE[路径名.]表名

(8)CREATEINDEX

CREATEINDEXindex-nameONtable-name(column[,column…])

例:

CREATEINDEXuspaON口令表(user,password)

(9)DROPINDEX

DROPINDEXtable-name.index-name|PRIMARY

例:

DROPINDEX口令表.uspa

二、在程序中使用静态SQL语句

 在程序设计阶段,将SQL命令文本作为TQuery组件的SQL属性值设置。

三、在程序中使用动态SQL语句

 动态SQL语句是指在SQL语句中包含有参数变量的SQL语句(如:

select*fromstudentwhereclass=:

class),在程序中可以为参数赋值。

给参数赋值的方法有:

 1、利用参数编辑器为参数赋值

 选中TQuery组件,在对象监视器OI中点取Params项,在弹出的参数编辑窗口中设置参数的值。

例:

SELECTbookidxAS书号,藏书表.booknameAS书名,bdateAS借书日期FROM借书表,藏书表where借书表.bookidx=藏书表.bookidxandrid=:

rid

 2、在程序运行中通过程序为参数赋值

(1)根据参数在SQL语句中出现的顺序,使用TQuery的Params属性为参数赋值;

例:

在借书表中插入一条记录

withQuery1do

begin

 SQL.clear;

 SQL.add('InsertInto借书表(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属性设置为另一个数据源(TDataSource名字),Delphi会把未赋值的参数与指定的数据源中的各字段相比较,并将匹配的字段的值赋给未赋值的参数,可实现主表—明细表应用。

四、对TQuery返回的数据集进行修改

 一般情况下,TQuery返回的数据集是只读的,不能修改;

 对不包含集操作(如:

SUM、COUNT)的单表SELECT查询,设置TQuery的RequsetLive属性为True,则可修改TQuery返回的数据集。

var

I:

Integer;

ListItem:

string;

begin

forI:

=0toQuery1.ParamCount-1do

begin

 ListItem:

=ListBox1.Items[I];

 caseQuery1.Params[I].DataTypeof

  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

   ifListItem='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;

2003-11-259:

59:

00 

查看评语?

?

?

 

2003-11-2510:

06:

20 运行期间对数据库表的

一、数据集表的打开与关闭

打开:

设置数据集组件的Active属性为True或调用数据集组件的Open方法

关闭:

设置数据集组件的Active属性为False或调用数据集组件的Close方法

二、创建数据库应用程序

?

利用向导创建:

使用Database菜单/FormWizard选项;

?

创建主从表:

设置从表的MasterSource、MasterField属性;

?

创建查询表:

使用TQuery组件;

三、数据库表记录的定位

?

使用TDBNavigator组件;

?

调用数据集组件的First、Next、Prior、Last方法;

?

数据集组件的EOF属性(或BOF属性)用来判断记录指针是否指向第一条记录(或最后一条记录);

?

使用数据集的书签BookMark(GetBookMark:

获得当前记录的BookMark记号;GotoBookMark:

从当前记录直接转到指定BookMark的那条记录;FreeBookMark:

释放某个BookMark)

?

使用GotoKey、FindKey方法查找记录进行定位;

四、数据库表字段对象的使用

(1)创建永久的字段对象

 双击或单击再右击TTable(TQuery)对象打开字段编辑器,使用其弹出菜单增加字段对象、删除字段对象、定义新的字段对象(字段编辑器的弹出菜单的NewFields选项,可创建计算字段);

(2)字段对象的属性、方法、事件

 字段对象名:

如Table1Name、Query1Sid

 属性:

Alignment(对齐方式)、Calculated(是否是从其它字段值计算得到)、DisplayLabel(显示的标题)、DisplayWidth(显示的宽度)、DisplayFormat(显示的格式)、EditMask(输入的限制)、FieldName(字段名)、ReadOnly(是否只读)、Visible(是否显示)

 事件:

OnChange(字段值发生变化时触发)、OnGetText(当字段对象获得字段值时触发)、OnSetText(当字段对象被设置字段值时触发)、OnValiData(当修改、插入、进行有效性检验时触发)

(3)字段对象的类型转换

 有:

AsString、AsSmallInt、AsInteger、AsWord、AsBoolean、AsFloat、AsCurrency、AsBCD、AsDate、AsTime、AsDateTime转换函数

如:

Edit1.Text:

=Table1Name.Value;

Table1Bdate.AsString:

=DateToStr(DATE);

(4)对字段对象的访问

 动态字段对象的访问:

Table1.Fields[0].DisplayLabel:

='学生编号'

Table1.FieldByName('Sid').DisplayLabel:

='学生编号'Table1.Fields[0].Assignment:

=taCenter

Edit1.Text:

=Table1.FieldByName('Sid').AsString

 永久字段对象的访问:

Query1Sid.DisplayLabel:

='学生编号'

Query1Sid.DisplayWidth:

=12

五、对数据库表数据的操作方法

(1)访问表中某一字段的数据的方法:

?

Table1.FieldByName('bookidx').AsString

?

Table1.Field[0].AsInteger

?

Table1.Fieldvalues['bookidx']

(2)数据库表的一些属性:

?

当前记录号:

Table1.Recno

?

记录总数:

Table1.RecordCount

?

得到表的字段名:

Table1.GetFieldNames(ListBox1。

Items)

(3)数据维护的方法:

?

Edit方法:

把数据集设置为编辑状态;

?

Append方法:

把数据集设置为插入状态(最后);

?

Insert方法:

把数据集设置为插入状态(当前记录后);

?

Post方法:

把修改的记录写回数据集;

?

Cancel方法:

取消当前的操作;

?

Delete方法:

删除表中当前记录;

?

AppendRecord方法:

?

InsertRecord方法:

table1.InsertRecord(['963409',NIL,NIL,'考试']);

?

SetRecords方法:

?

Abort方法:

取消各种方法的调用;

(4)输入数据的合法性验证

 对数据库表建立合法性验证机制(如在DBD设置表的ValidityCheck、TableLookup、ReferentialIntegrity等属性);

?

在字段编辑表FieldsEditor(双击Ttable对象),选择字段,编写其OnValidate事件,要求非空可设置其Required属性为True;

?

在程序中防止不合法输入(如:

使用TDBcombobox对象,TDBlookupcombobox对象);

六、数据检索

(1)利用索引排序

 如:

TABLE1.IndexName:

='uspa'或TABLE1.IndexFieldNames:

='user_id'

(2)使用GotoKey方法查找数据库中的记录

?

要求查找字段建立了索引,非主索引要设置Ttable对象的IndexName属性。

?

调用SetKey方法,把要查找的Ttable对象置成查找模块;

?

把查找值送进被查找的Field的查找缓冲区;

?

调用Ttable对象的GotoKey方法,测试该方法的返回值判断查找是否成功;

(3)使用FindKey方法查找数据库中的记录

 把查找值作为参数传递给FindKey函数,允许有多个查找值,要求把要查找的多个字段的索引名赋给Ttable对象的IndexName属性;

(4)不精确查找

 GotoNearest方法

 FindNearest方法

(5)使用Locate方法查找数据库中的记录(不用建索引)

 table1.locate(‘字段名1;字段名2’,VarArroyof([‘值1’,‘值2’]),[LoCaseInsensitive,LoPartialKey])

 LoCaseInsensitive:

忽略大小写;IoPartialKey:

不精确查找

(6)设定查找范围的方法

 SetRangeStart、SetRangeEnd、EditRangeStart、EditRangeEnd、SetRange([StartValues],[EndValue])、ApplyRange、CancelRange

(7)用TQuery组件的动态SQL语句进行查找

七、修改数据库中的记录

 在程序中对数据库记录进行操作可按下列的步骤进行:

(1)移动数据指针到要修改的记录;

(2)调用Edit方法将Ttable组件设置成编辑状态;

(3)修改字段值;(Table1.Fieldvalues['字段名']:

=值、Table1.Field[0].AsString:

=值)

(4)可用Nil对字段赋空值;

(5)调用Post方法将修改后的记录写入数据库;

八、插入和删除记录

 删除:

移动指针到相应记录处,调用Delete方法;

 插入:

调用Insert、InsertRecord方法(当前记录处插入)或Append、InsertRecord方法(表的末尾插入);

2003-11-2510:

11:

12 动态的添加PARADOX表的方法【王寒松】下面给出的函数AddMasterPassword完成添加PARADOX表主口令的工作

AddMasterPassword(Table1,'MyNewPassword')

procedureAddMasterPassword(Table:

TTable;pswd:

string);

const

 RESTRUCTURE_TRUE=WordBool

(1);

var

 TblDesc:

CRTblDesc;

 hDb:

hDBIDb;

begin

 {表打开?

表是独占吗?

}

 if(Table.Active=False)or(Table.Exclusive=False)then

  raiseEDatabaseError.Create('数据表必须在独占方式才可以添加口令');

 {初始化表描述区}

 FillChar(TblDesc,SizeOf(CRTblDesc),0);

 withTblDescdo

 begin

  {把表名放到描述区}

  StrPCopy(szTblName,Table.TableName);

  {把表类型放到描述区}

  StrCopy(szTblType,szPARADOX);

  StrPCopy(szPassword,pswd);

  {设置BPROTECTED为TRUE}

  bProtected:

=RESTRUCTURE_TRUE;

 end;

 {从当前的HANDLE里得到DATABASE的HANDLE}

 Check(DbiGetObjFromObj(hDBIObj(Table.Handle),objDATABASE,hDBIObj(hDb)));

 {关闭表}

 Table.Close;

 {添加主口令到PARADOX表里}

 Check(DbiDoRestructure(hDb,1,@TblDesc,nil,nil,nil,FALSE));

 {添加一个新口令到SESSION}

 Session.AddPassword(pswd);

 {重新打开表}

 Table.Open;

end;

添加副口令的办法与此类似

2003-11-2511:

21:

29 如何选择一个好的数据库【三大数据库比较】

【开放性】

SQLServer

 只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。

Windows9X系列产品是偏重于桌面应用,NTserver只适合中小型企业。

而且windows平台的可靠性,安全性和伸缩性是非常有限的。

它不象unix那样久经考验,尤其是在处理大数据量的关键业务时.

Oracle

 能在所有主流平台上运行(包括windows)。

完全支持所有的工业标准。

采用完全开放策略。

可以使客户选择最适合的解决方案。

对开发商全力支持。

DB2

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1