网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

全面接触SQL语法

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:网学会员为需要朋友们搜集整理了全面接触SQL语法相关资料,希望对各位网友有所帮助!


    全面接触SQL语法
    SQL功能与特性其实,在前面的文章中,已经提及SQL命令的一些基本功能,然而,通过SQL命令,程序设计师或数据库管理员(DBA)可以:(一)建SQL功能与特性
    其实,在前面的文章中,已经提及SQL命令的一些基本功能,然而,通过SQL命令,程序设计师或数据库管理员(DBA)可以:(一)建立数据库的表格。(包括设置表格所可以使用之空间)(二)改变数据库系统环境设置。(三)针对某个数据库或表格,授予用户存取权限。(四)对数据库表格建立索引值。(五)修改数据库表格结构。(新建、删除或是修改表格字段)(六)对数据库进行数据的新建。(七)对数据库进行数据的删除。(八)对数据库进行数据的修改。(九)对数据库进行数据的查询。这几项便是通过SQL命令可以完成的事情,看起来是不是比起“查询”两个字所代表的功能要多的多了呢?SQL语法的分类其实SQL命令并不是非常多,可是要把SQL用到出神入化,却也只需要短短几个命令便够,因为SQL命令是针对关系型数据库所建立出来的语法叙述,所以SQL在这类数据库中所发挥的功能非常的强,以下将针对在VB中常用的SQL语法基本命令加以分类介绍。在说明SQL的命令以及使用语法之前,以下将SQL做了的分类,在致上SQL语法所使用到的类型,可以说都已包含在这些类别当中。第一类、属性词(Predicates)在SQL命令中用来指明所要选择的记录的方式。如ALL、TOP与DISTINCT等等。第二类、声明(Declaration)针对SQLParameter或ParameterQuery的名称与数据类型做声明,如PARAMETERS的声明等等。第三类、条件子句(Clause)在SQL的查询中,利用一些表达式定义出查询的条件,以缩小寻找的范围,如WHERE。
     第四类、运算符(Operator)与操作数(Operation)在SQL的查询中,与Operation共同组成表达式(Expression),如BETWEEN….AND运算符与INNERJOIN操作数。第五类、函数(Function)一些SQL常见的函数,像是AVG是求算数平均数的函数。第六类、SQL语句(Statement)SQL的语句,可以说是SQL语法的主体,用来对某一个特定的数据库发出指示,并返回相关的数据,而SQL的语法结构,基本上可以利用下面的式子来表示:命令+条件子句例如:
    SELECTFROMTABWHERETAB.NAME=‘A‘其中的“FROM….WHERE”便是一个条件子句,其实SQL的语法并不难,您只需记住这样的一个规则,相信可以很快的了解SQL用法。SQL语法与命令
    SELECT语句SELECT[predicate][ASalias1[,alias2[,…]]]FROMtableexpression[,…][INexternaldatabase][WHERE…][GROUPBY…][HAVING…][O
    RDERBY…][WITHOWNERACCESSOPTION]SELECT语句包括下面几个部分predicate
     在VFP里来操作和管理SQLSERVER!
    时间:2009年02月15日来源:互联网作者:未知
    用VFP和SQLSERVER来做系统的网友越来越多。怎么从VFP里来操作或者管理SQLSERVER也成为很多人关心的问题。对SQLSERVER的数据操作,可以用视图,SPT或者ADO来做,但对服务器本身的管理,似乎只有用SPT来发送一些命令了。其实,微软为客户端操作SQLSERVER开发了一套完整的工具,这就是SQL-DMO(DistributedManagementObjects).这是一套COM组件,可以在各种语言里使用,VFP里自然也可以用了。我准备花点时间,写些这方面的介绍文章,然后做个实例,算是我通过MCDBA后,给大家的礼物吧。下面的介绍和例子,是针对SQLSERVER2000和VFP7的。一.用SQL-DMO的必要性大部分VFPER开发的程序,都是中小规模的系统,因为这是VFP最适用的范围。而这样的系统,很多情况下是,客户端没有专业IT人士维护,更不要说专门的DBA了。对于使用SQLSERVER的系统,就带来了一些问题。SQLSERVER是一套比较大的数据库专业软件,是经常需要维护和清理的,而我们这些系统开发者,总不能老跑去用户那里做维护工作吧,尤其对商业软件来说,这是很大的成本了。如果可以把对SQLSERVER的维护工作放到自己的程序里,甚至把SQLSERVER的安装无缝并入到自己的程序的安装包里,相信大家都会很乐意的。DMO的功能就能满足我们的这些需要。通过它,可以从程序里用命令方式来操作SQLSERVER:停止/启动服务,建立数据库和表,添加用户和权限,备份/恢复数据库,数据导入/导出/发布...DMO的作用就是把我们能在EnterpriseManager里完成的功能,完全用代码来做.二.微软的桌面数据引擎(DesktopDatabaseEngine)我们都知道SQLSERVER2000有四个版本:个人版,开发者版,标准班和企业版.其实,还有一个版本,就是桌面数据引擎(DDE)。DDE几乎具有SQLSERVER标准版和企业版的所有功能,不能支持的只是少数几个不常用的功能。而它和其它版本的区别是,DDE没有任何图形管理界面,没有ENTERPRISEMANAGER,没有查询分析器等等工具。对它的管理,主要是通过DMO或者专门的API来进行,它的另一个优点是,提供了安装程序,可以直接加到第3方软件里进行安装。每个版本的SQLSERVERCD里都带有DDE,在MSDE目录下,运行SETUP程序就可以安装。至于怎么把它加到自己的程序里安装,大家查一下SQLSERVER的帮助文件就可以找到。DDE的限制是:只适宜中小型系统(比如没有5个以上的用户同时连接和运行大型SQL命
    令),如果同时访问的用户很多,DDE就会比正常的SQLSERVER慢了。这样,DDE+DMO就可以实现我们上面所要求的功能了。这种做法甚至可以不让用户知道你是在使用SQLSERVER做为数据库。当然,DMO不是只能操作DDE,它可以操作所有版本的SQLSERVER。三.DMO的安装其实DMO主要就是一个DLL文件而已:SQLDMO.DLL。具体位置在C:\ProgramFiles\MicrosoftSQLServer\80\Tools\Binn目录里,在同一目录里还有个帮助文件Sqldmo80.hlp.如果你在程序里不能使用
     DMO,找到这个DLL文件,注册一下,就可以了。另外在C:\ProgramFiles\MicrosoftSQLServer\80\Tools\Devtools\Samples\Sqldmo目录下,有SQLDMO的例子,但都是VB和VC++的。VB的例子和VFP很接近的.四.初步接触DMO在这里写几个简单的句子,来看看DMO的强大.这些命令可以直接在命令窗口里一行一行测试,只是用它们来显示数据库的信息。至于添加数据库,数据表,备份和恢复等比较复杂的功能,得在实例里做。oServer=CreateObject("SQLDMO.SQLServer")&;&;建立SERVER对象oServer.Connect("Snoopy","sa","778899")&;&;连接到你的服务器?oServer.Databases.Count&;&;显示服务器上的数据库总数?oServer.Databases.Item(1).Name&;&;显示第一个数据库的名字oDB=oServer.Databases("PUBS")&;&;建立数据库对象?oDB.Tables.Count&;&;显示库里表的数目oTable=oDB.Tables("Titles")&;&;建立表对象?oTable.Rows&;&;显示表里的记录数?oTable.Columns.Count&;&;显示表的列数**显示列的属性?oTable.Columns(1).Name?oTable.Columns(1).type?oTable.Columns(1).Datatype?oTable.Columns(1).Identity?oTable.Columns(1).IsPrimaryKey
    备份和恢复数据库
    oServer=CreateObject("SQLDMO.SQLServer")&;&;建立SERVER对象oServer.Connect("Snoopy","sa","778899")&;&;连接到你的服务器**备份oBackup=CreateObject("SQLDMO.Backup")&;&;建立备份对象oBackup.Database="PUBS"&;&;指定备份数据库oBackup.Password="8899"&;&;给备份文件加密码oBackup.Files="D:\Temp\PUBBack.Dat"&;&;指定目标文件oBackup.SQLBackup(oServer)&;&;运行备份命令,速度很快的***注:备份数据时默认为追加方式,可以加一句oBackup.initialize=.T.这样就会覆盖原来的文件。或者每次BACKUP时用不同的文件名,比如把日期作为文件名的一部分.**备份恢复oRestore=CreateObject("SQLDMO.Restore")
     oRestore.Database="PUBS"oRestore.Files="D:\Temp\PUBBack.Dat"oRestore.SQLRestore(oServer)&;&;先试不加密码,备份失败oRestore.Password="8899"oRestore.SQLRestore(oServer)SQLSERVER提供几种数据库备份方式,一种是完整备份(FullBackup),第二种是差异备份(DifferentialBackup),第三种是日志备份,第四种是文件备份完整备份是把整个数据库做个备份,差异备份只是备份进行了完整备份后数据库里的新变化。当数据库很
    大时,完整备份很费空间和时间,可以根据情况定期做,比如每周或者每月做一次完整备份。其它时间可以进行差异备份,比如每天一次,或者半天一次,也可以结合进行日志备份。文件备份是直接备份数据库的数据和日志文件。和在操作系统里做备份一样.在恢复的时候,只要先恢复完整备份,然后恢复最后一个差异备份就可以。如果有日志备份,还需要恢复差异备份后所做的日志备份。
    备份种类通过备份对象的Action属性来决定.oBackup.Action=0&;&;参数:0-完整备份,1-差异备份,2-文件备份,3-日志备份
    用DMO来建立任务并让它定时运行.执行环境必须是NT或者WINDOWS2000因为需要运行SQL,,AGENT***建立任务(JOB)oJob=CreateObject("SQLDMO.Job")&;&;创建任务对象ojob.Name="Pubs_Daily_Backup"&;&;任务名称oServer.JobServer.Jobs.Add(oJob)&;&;加到SQLSERVER的任务里oJob.BeginAlter&;&;开始定义任务oJobStep=CreateObject("SQLDMO.JobStep")&;&;创建任务步骤对象oJobStep.Name="Step_1"&;&;步骤名称oJobStep.StepID=1&;&;步骤号码oJobStep.DatabaseName="Pubs"&;&;数据库名称oJobStep.SubSystem="TSQL"&;&;任务类型,可以是TSQL或者操作系统命令(CmdExec),或者ActiveScriptingcFName="PubBack"+Dtoc(Date(),1)+".dat"&;&;备份目标文件名oJobStep.Command="BackupdatabasePubstoDisk=''''D:\Temp\"+cFname+"''''WithPassword=''''7788''''"&;&;执行备份的TSQL命令oJobStep.OnFailAction=2&;&;如果任务失败退出。也可以设成发送EMAIL或者用NT里的NETSEND发信息oJobStep.OnSuccessAction=1&;&;如果任务成功,退出。
     oJob.JobSteps.Add(oJobStep)&;&;添加任务步骤oJob.StartStepID=1&;&;从第一步开始执行,对多步骤的任务起作用oJob.DoAlter&;&;保存修改*
    **把任务加到SCHEDULER里oJobSchedule=CreateObject("SQLDMO.JobSchedule")&;&;创建Schedule对象oJob=oServer.JobServer.Jobs("Pubs_Daily_Backup")&;&;创建任务对象oJobSchedule.Name="Daily_Execution"&;&;名称oJobSchedule.Schedule.FrequencyType=4&;&;运行频率,4是每日运行oJobSchedule.Schedule.FrequencyInterval=1&;&;运行间隔,1是每天oJobSchedule.Schedule.ActiveStartDate=Dtoc(Date(),1)&;&;开始日期(今天),必须是yyyymmdd格式oJobSchedule.Schedule.ActiveStartTimeOfDay="233000"&;&;开始时间(晚上11点30),必须是hhmmss格式**下面2句设置是使任务永不过期oJobSchedule.Schedule.ActiveEndDate=99991231&;&;noenddateoJobSchedule.Schedule.ActiveEndTimeOfDay=235959&;&;Noendtime
     添加任务到SCHEDULE里oJob.BeginAlteroJob.JobSchedules.Add(oJobSchedule)oJob.DoAlter在VFP里来操作和管理SQLSERVER(3)(介绍SQL-DMO)创建数据库,表和用户1.建新数据库oServer=CreateObject("SQLDMO.SQLServer")oServer.Connect("Snoopy","sa","778899")?oserver.VerifyConnection(oServer.ConnectionID)&;&;检查连接是
    否成功oDB=CreateObject("SQLDMO.Database")&;&;创建数据库对象oLogFile=CreateObject("SQLDMO.LogFile")&;&;创建表日志文件对象oDBFile=CreateObject("SQLDMO.DBFile")&;&;创建数据文件对象oDB.Name="MyNewDB"&;&;数据库名oDBFile.Name="MyNewDBData1"&;&;数据文件的逻辑名字,可以在SQL各种命令里使用,不一定和物理名字相同oDBFile.PhysicalName="c:\programfiles\microsoftsqlserver\mssql\data\MyNewDBData.mdf"&;&;数据文件物理名字oDBFile.PrimaryFile=.T.&;&;主文件群oDBFile.FileGrowthType=0&;&;文件增长类型0-MB,1-百分比oDBFile.FileGrowth=1&;&;增长大小(1M)oDB.FileGroups("PRIMARY").DBFiles.Add(oDBFile)&;&;添加到文件群里oLogFile.Name="MyNewDBLog"&;&;日志文件逻辑名oLogFile.PhysicalName="c:\programfiles\microsoftsqlserver\mssql\data\northwnd.ldf"&;&;物理名oDB.TransactionLog.LogFiles.Add(oLogFile)&;&;添加到数据库里oServer.Databases.Add(oDB)&;&;添加数据库。这时候应该会出错。因为日志文件指向了Northwind.ldf,这是已经存在的文件oLogFile.Remove&;&;从数据库里删除oLogFile.PhysicalName="c:\programfiles\microsoftsqlserver\mssql\data\MyNewDB.ldf"&;&;重新指定物理名oDB.TransactionLog.LogFiles.Add(oLogFile)&;&;重新添加oServer.Databases.Add(oDB)&;&;建立数据库2.建表oDB=oServer.Databases("MyNewDB")&;&;数据库对象oTable=CreateObject("SQLDMO.Table")&;&;表对象oTable.Name="FirstTable"&;&;表名oTable.FileGroup="Primary"&;&;文件群
     oCol1=CreateObject("SQLDMO.Column")&;&;列对象(字段)oCol1.Name="Num"&;&;列名oCol1.Datatype="Int"&;&;数据类型oCol1.Identity=.T.&;&;是否IDENTITY字段oCol1.IdentityIncrement=1&;&;增加量oCol1.IdentitySeed=1&;&;种子oCol1.AllowNulls=.F.&;&;是否允许NULL**第2列oCol2=CreateObject("SQLDMO.Column")oCol2.Name="UserName"oCol2.Datatype="varchar"oCol2.Length=10oCol2.AllowNulls=.F.**第3列oCol3=CreateObject("SQLDMO.Column")oCol3.Name="Email"oCol3.Datatype="varchar"oCol3.Length=30oCol3.AllowNulls=.F.**添加列到表对象里oTable.Columns.Add(oCol1)oTable.Columns.Add(oCol2)oTable.Columns.Add(oCol3)**添加表到数据库里oDB.Tables.Add(oTable)3.给表增加主键oFirstTable=ODB.Tables("FirstTable")&;&;创建表对象oKey=CreateObject("SQLDMO.Key")&;&;创建索引对象oKey.Name="FirstTable_PK"&;索引名字oKey.KeyColumns.Add("Num")&;&;索引列oKey.Clustered=.T.&;&;是否物理索引oKey.Type=1&;&;索引类型1-主键2-唯一键3-外部键(Foreign)oFirstTable.BeginAlter&;&;修改表对象oFirstTable.Keys.Add(oKey)&;&;添加索引oFirstTable.DoAlter&;&;保存修改4.添加登录用户oLogin=CreateObject("SQLDMO.Login")&;&;创建登录对象oLogin.Name="myf1"&;&;登录名
     oLogin.Type=2&;&;登录类型2-SQL登录0-NT用户1-NT用户群oServer.Logins.Add(oLogin)&;&;添加到服务器。密码为空oServer.Logins("myf1").SetPassword("","www1")&;&;添加成功后,修改密码oDBUser=CreateObject("SQLDMO.User"
    )&;&;创建数据库用户对象oDBUser.Name="myf1"&;&;数据库用户名,可以和登录名不同oDBUser.Login="myf1"&;&;登录名oDB.Users.Add(oDBUser)&;&;添加到数据库5.给用户授权**假设上边的表对象还存在oFirstTable.Grant(1,"myf1")&;&;第一个参数:1-Select2-Insert4-Update8-Delete63-所有权限oFirstTable.Deny(4,"myf1","Email")&;&;可以把权限限制到列。这条命令是拒绝该用户对EMAIL列的修改oFirstTable.Grant(63,"myf1")&;&;所有权限数据导入和导出1.导出SQLSERVER数据到TEXT文件oServer=CreateObject("SQLDMO.SQLServer")&;&;创建SERVER对象oServer.Connect("Snoopy","sa","778899")&;&;连接到服务器snoopyoTable=oServer.Databases("PUBS").Tables("Titles")&;&;建立表对象oBulk=CreateObject("SQLDMO.BulkCopy")&;&;建立BULKCOPY对象oBulk.DataFilePath="C:\Temp\Title.Txt"&;&;目标文件和路径oBulk.DataFileType=1&;&;数据文件类型1-文本文件,以逗号作为字段分隔符,回车和换行符作为行分隔符oBulk.TruncateLog=.T.&;&;导出成功后,删除日志文件,否则日志文件会变得很大oBulk.FirstRow=1&;&;从第一行开始,可以任意设置,但必须在文件包含的行数范围内,下面的属性也是这样oBulk.LastRow=10&;&;最后一行oBulk.ErrorFilePath="C:\Temp\ErrLog.txt"&;&;错误信息存放文件oBulk.MaximumErrorsBeforeAbort=1&;&;遇到几个错误后退出oTable.ExportData(oBulk)&;&;执行导出任务2.从TEXT文件导入数据到SQL表oTable=oServer.Databases("MyNewDB").Tables("FirstTable")oBulk=CreateObject("SQLDMO.BulkCopy")oBulk.DataFilePath="C:\Temp\Test1.txt"oBulk.DataFileType=1oBulk.TruncateLog=.T.
     oBulk.ErrorFilePath="C:\Temp\ErrLog.txt"oBulk.ColumnDelimiter=","&;&;字段分隔符为逗号oBulk.ServerBCPKeepIdentity=.T.&;&;该属性控制IDENTITY字段的表现,如果为.T.,则文本文件的该字段值会插入到SQL表里即SQL表的INDENTITY功能暂时关闭如果为.F.,则,。SQL表会自动生成IDENTITY值,文本文件里该列的值被忽略(但该列不能省略,否则格式不对会出错)oBulk.ServerBCPKeepNulls=.T.&;&;是否允许NULLoBulk.UseServerSideBCP=.T.&;&;执行服务器端的BCP(而不是ODBC端的),因为有IDENTITY,设置必须如此设置oTable.ImportData(oBulk)&;&;导入数据**改变IDENTITY设置,再试一次oBulk.ServerBCPKeepIdentity=.F.oTable.ImportData(oBulk)TEST1.TXT文件里包含下面的内容:(因为论坛会自动给@前加IE图标,EMAIL地址里我没有加这个符号)1,Zhang3,zhang3.abc2,Li4,li4.abc5,Wang5,wang5.abc如果在VFP里使用COPYTODelimited把DBF文件输出到TEXT文件,然后再导入到SQLSERVER里,有一个毛病,就是字符型数据全部加上了引号,而SQLSERVER会把引号当作字段内容导入。所以在导入前需要先想法把引号去掉。运行SQL命令和获取数据DMO的SERVER对象,可以运行TSQL
    命令或者操作系统的命令,这也为我们在程序里运行操作系统命令提供了一个接口。oServer.CommandShellImmediate("Calc.exe")&;&;打开WINDOWS下的计算器oServer.CommandShellImmediate("Notepad.exe")&;&;运行Notepad**DATABASE对象,可以运行TSQL命令oDB=oServer.Databases("PUBS")&;&;创建数据库对象oDB.ExecuteImmediate("UpdateTitlesSetTitle=''''Sushi,anyoneelse?''''WhereTitle_ID=''''TC7777''''")&;&;执行Update命令oResult=oDB.ExecuteWithResults("Select*FromTitles")&;&;运行SELECT命令,结果放到一个结果集里?oResult.Rows&;&;显示总行数?oResult.Columns&;&;总列数?oResult.ColumnName(1)&;&;第一列字段名?oResult.ColumnType(5)&;&;第5列数据类型**注意下面的命令,因为这是完全在代码方式下操作,返回的数据结果总是一个值,可以用行号和列号来返回任何一个记录的某个字段的值,但只能用列号,不能用列名,如果一定
     想用列名,那就得通过oResult.Column(i).Name来判断,这样可以得到列号。?oResult.GetColumnString(5,3)&;&;以字符串格式返回第5行第3列数据?oResult.GetRangeString(1,1,10,5)&;&;将范围从第一行第一列数据到第10行第5列数据组合成一个字符串SQL-DMO系列文章暂时写到这里。有时间我想在VFP里做个界面,把大部分DMO的功能加进去,用做VFP里管理SQLSERVER的界面,做完后会贴出来.我把这些文章都合并到第一个贴子里。有个比较重要的部分是,DMO很多对象都有自己的事件,比如BACKUP对象,有PercentCompletes事件,可以返回完成备份的百分比。在VFP里需要建立相应的类,把这些事件捆绑到VFP自己的事件里,才能捕捉到这些事件。因为没法在命令窗口里测试,而且需要比较多的时间,也许我会放在以后的实例里。
    VTF与数据库全面接触SQL语法与数据库-全面接触语法(3)!
    时间:2009年02月09日来源:本站原创作者:佚名
     ORDERBY条件语句此条件子句,通常与SELECT语句合并使用目的是将查询的结果,依照指定字段加以排序。SELECTfieldlistFROMtableWHEREselectcriteriaORDERBYfield[ASC|DESC][,field2[ASC|DESC][,...]]fieldlist欲查询的字段名称。其中可以与ALL,DISTINCT,DISINCTROW,或TOP一起来使用。table欲查询的表格名称。selectcriteria查询的标准设置。field1指定要依照那个字段作为排序的依据,若是你没有加上ORDERBY查询出的数据集将不会作排序的操作。ASC递增顺序类别。(默认值)DESC递减顺序类别。例如:或是我们要将输出数据依据出生的先后次序排列,可以利用下面的命令。SELECT,生日FROM职员表格ORDERBY生日SELECTLastName,FirstNameFROMEmployeesORDERBYLastNameASC;IN条件子句指定要速胜哪一个外部数据库的表格。(
    必须是MicrosoftJet数据库引擎所可以连接的数据库,如dBase,Paradox等等)SELECT|INSERT]INTOdestinationIN{path|["path""type"]|[""[type;DATABASE=path]]}FROMtableexpressionIN
     {path|["path""type"]|[""[type;DATABASE=path]]}destination欲插入数据的外部表格名称。tableexpression表格名称或是被读取数据的表格名称。这个参数可以是一个单一的表格名称,或是一段已经被存储的SQL查询等。path包含该表格的完整路径名称。type数据库的类型名称,通常是当数据库部属于Jetdatabase时才会使用。(例如:dBASEIII,dBASEIV,Paradox3.x,Paradox4.x,或Btrieve)例如:下面这两段的意义相同PartA....FROMTableIN""[dBASEIV;DATABASE=C:\DBASE\DATA\SALES;];PartB....FROMTableIN"C:\DBASE\DATA\SALES""dBASEIV;"例如:MicrosoftJetdatabaseSELECT顾客编号FROM顾客表格INCUSTOMER.MDBWHERE顾客编号Like"A*";其中CUSTOMER.MDBO为Jetdatabase的数据库名称,其中包含了顾客表格。例如:dBASEIIIorIVSELECT顾客编号FROM顾客表格IN"C:\DBASE\DATA\SALES""dBASEIV;"WHERE顾客编号Like"A*";所以当我们使用不同于ACCESS的数据库时,必须指明该数据库的类型名称
    VTF与数据库全面接触SQL语法与数据库-全面接触语法(4)!
     时间:2009年02月09日来源:本站原创作者:佚名
    HAVING条件子句指定一特定的分组记录,并满足HAVING所指定的条件或状态,但条件是针对分组的条件设置。SELECTfieldlistFROMtableWHEREselectcriteriaGROUPBYgroupfieldlistHAVINGgroupcriteriafieldlist显示被查询的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP相结合)table欲查询数据的表格名称。selectcriteria选取标准。groupfieldlist分组记录的字段名称,到多10个字段。而这些字段的顺序决定最高到最低的分组阶层。groupcriteria决定什么样的分组记录要被显示。HAVING跟WHERE的用法相当类似,不同之处在于HAVING必须用于GROUP之后的分组数据上。例如:SELECT分类编,Sum(库存数量)FROM产品表格GROUPBY分类编号HAVINGSum(库存数量)>100AND产品名称LIKE"*纸";GROUPBY条件子句依据指定的字段,将具有相同数值的记录合并成一条。SELECTfieldlistFROMtableWHEREcriteriaGROUPBYgroupfieldlistfieldlist欲读取的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP合并使用)table被查询的表格名称。groupfieldlist
     分组记录的字段名称,到多10个字段,而这些字段的顺序决定最高到最低的分组层次。例如:SELECT,Count()AS职员FROM职员表格WHERE部门名称='业务部'GROUPBYFROM条件子句指定表格名称或是查询,其中包含列在SELECT语句的字段数据。SELECTfieldlistFROMtableexpression[INexternaldatabase]fieldlist表
    格中的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP相结合)tableexpression表格名称,或多个表格的算式。externaldatabase若该表格参考到外部的数据库时,将其完整的路径名称记下。例如:从职员表格下,查询出所有字段的数据(只有字段被查询,其他则不显示)。SELECTFROM职员表格;WHERE条件子句指定查询的条件与限制。SELECTfieldlistFROMtableexpressionWHEREcriteriafieldlist字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP相结合)tableexpression表格名称,或多个表格的算式。criteria查询的结果,必须依照这一限制标准。例如:要查询出职员表格中,所有姓氏是李的数据,可以用下面的语句。SELECTFROM职员表格WHERE姓氏='李'
     vtf与数据库全面接触SQL语法与数据库-全面接触语法(5)!
    时间:2009年02月09日来源:本站原创作者:佚名
    BETWEEN...AND运算符决定某一人数值是否介于特定的范围之内,此运算符只可以用在SQL的语句中。expr[Not]BETWEENvalue1ANDvalue2expr指定要加以计算的字段与表达式的组合。value1,value2所指明的数值范围。例如:若是要从职员表格查询出所有年龄介于25-30岁的员工,可以利用下面的程序来做。SELECT,年龄BETWEEN25AND30FROM职员表格;LIKE操作数用来将一字符串与另一特定字符串样式(pattern)比较,并将符合该字符串样式的记录过滤出来。expressionLIKE"pattern"expression使用在WHERE条件子句,SQL表达式。pattern用以比较的字符串样式。例如:若是你要查询出所有以“李”为首的姓氏,可以利用下面的式子。Like"李*"LIKE操作数的多种范例:1、多个字符:(1)"a*a"可筛选:"aa","aBa","aBBBa",不能筛选:"aBC"(2)"*ab*"可筛选:"abc","AABB","Xab",不能筛选:"aZb","bac"2、特殊字符:"a“*”a"
     可筛选:"a*a",不能筛选:"aaa"3、单一字符:"a?a"可筛选:"aaa","a3a","aBa",不能筛选:"aBBBa"4、单一数字:"a#a"可筛选:"a0a","a1a","a2a",不能筛选:"aaa","a10a"5、字符范围:"“a-z”"可筛选:"f","p","j",不能筛选:"2","&;"6、指定字符以外部范围:"“!a-z”"7、指定非数字:"“!0-9”"可筛选:"A","a","&;","~",不能筛选:"0","1","9"8、组合式结构:"a“!b-m”#"可筛选:"An9","az0","a99",不能筛选:"abc","aj0"SQL数字函数1、AVG:算数平均数AVG(expr)expr字段名称或表达式。例如:若要计算职员身高超过165厘米的职员平均身高,可以利用下面的SQL语句来完成。SELECTAvg(身高)AS平均身高FROM职员表格WHERE身高>165;2、COUNT:计算记录条数COUNT(expr)expr字段名称或表达式。例如:若是要统计出业务部门的职员人数,并查询出职员的,
    可以利用下面的程序。SELECTCount()AS职员
     FROM职员表格WHERE部门名称='业务部';3、FIRST与LAST:返回某字段的第一条数据与最后一条数据。FIRST(expr)LAST(expr)expr字段名称或表达式。例如:若是要找出货品数量字段的第一条数据与货品价格字段的最后一条数据时,可以利用下面的查询方式。SELECTFIRST(货品数量),LAST(货品价格)FROM订单表格4、MAX,与MIN:返回某字段的最大值与最小值。用法同FIRST与LAST。5、SUM:返回某特定字段或是运算的总和数值。SUM(expr)expr字段名称或表达式。例如:要计算出货品总价,可使用下面的程序。SELECTSum(单位价格*货品数量)AS货品总价FROM订单表格多层SQL查询顾名思义,多层的SQL查询的便在于:“在一个SQL语句中可以包含另一个SQL查询语句,形成内部嵌套的查询类型。”comparison[ANY|ALL|SOME](sqlstatement)expression[NOT]IN(sqlstatement)[NOT]EXISTS(sqlstatement)comparison将表达式与内层查询的结果比较的操作。expression对内层查询的结果作搜索的表达式。sqlstatement
     为SELECT语句构成的SQL查询,必须用()将该语句括起来。例如:我们先从订单表格当中,查询出所有的单位,再将产品表格中的单位与的一一对比,查询出所有高于订单表格的单位价格的记录。SELECT*FROM产品表格WHERE单位价格>ANY(SELECT单位价格FROM订单表格WHERE折扣>=.25);
    vtf与数据库全面接触SQL语法与数据库-全面接触语法(6)!
    时间:2009年02月09日来源:本站原创作者:佚名
     SQL与数据库的维护表格的建立将SQL中的基本语法作了一番介绍以后,但大多是偏向于数据库数据的查询与过滤,但实际上,我们通过SQL命令所可以做的事还有很多,接下来要介绍的便是如何利用SQL的语法命令来建立一个数据库中的表格。CREATETABLE语句我们可以利用这个命令,来建立一个全新的表格,但前提则是:数据库必须已经存在。CREATETABLEtable(field1type[(size)][index1][,field2type[(size)][index2][,...]][,nultifieldindex[,...]])table欲建立的新的表格名称。field1,field2在新表格中的新的字段名称,到少要一个字段以上。type字段的数据类型。size字段的大小。index1,index2利用CONSTRAINT条件子句定义一个单一字段的索引名称。multifieldindex利用CONSTRAINT条件子句定义一个多重字段的索引名称。例如:建立一个拥有职员与部门字段的表格。CREATETABLE职员表格(TEST,部门TEST,职员编号INTEGERCONSTRAINT职员字段索引PRIMARYKEY)在这一个范例中,我们建立了一个表格名称为“职员表格”的表格,并且定义了该表格的主键值,以限制数据不能重复
    输入。表格索引的建立:CREATEINDEX语句这个命令主要是对一个已存在的表格建立索引,其用法如下:CREATE[UNIQUE]INDEXindexONtable(field[ASC|DESC][,field[ASC|DESC],...])[WITH{PRIMARY|DISALLOWNULL|IGNORENULL}]index欲被建立的索引名称。table
     欲建立索引的表格名称。field欲被建立的索引的字段名称。并可通过DESC保留字,来决定索引的顺序。例如:在职员表格中建立一个索引。CREATEINDEX新索引名称ON职员表格(部门);表格的字段更新CONSTRAINT条件子句CONSTRAINT的功能是类似索引(INDEX)的,虽然CONSTRAINT也可以建立表格之间的关联性。单一字段索引:CONSTRAINTname{PRIMARYKEY|UNIQUE|REFERENCESforeigntable[(foreignfield1,foreignfield2)]}多字段索引:CONSTRAINTname{PRIMARYKEY(primary1[,primary2[,...]])|UNIQUE(unique1[,unique2[,...]])|FOREIGNKEY(ref1[,ref2[,...]])|REFERENCESforeigntable[(foreignfield1[,foreignfield2[,...]])]}name要被建立的CONSTRAINT名称。primary1,primary2被用来设计成主键值的字段名称(可一个以上)。unique1,unique2被用来设计成唯一键值的字段名称(可一个以上)。foreignkey字段名称,或是参考到别的表格中字段的字段名称。foreigntable如前所述,被参考到的表格。foreignfield1,foreignfield2在参考到的表格当中,被ref1,ref2字段所指定的字段。如果被参考的字段是参考表格中的主键值,你也可以省略这个条件子句。例如:当我们要建立一个新的职员数据表格,表格包含、部门名称与生日三个字段,且由这三个字段建立一个唯一的索引时,可以使用下面这段SQL的语句。CREATETABLE职员数据表格
     (TEST,部门名称TEST,生日DATETIME,CONSTRAINT职员数据表格限制UNIQUE(,部门名称,生日));以上是SQL中,与数据库表格建立相关的命令,你可以利用这些命令,通过SQL的语句,将数据库表格完整的建立出来,接下来的章节,将针对数据库建立之后的维护与增删所要使用的SQL语句作一介绍
    VTF与数据库全面接触SQL语法与数据库-全面接触语法(7)!
    时间:2009年02月09日来源:本站原创作者:佚名
     表的删除DELETE语句我们可以利用DELETE语句,将表格中的记录删除。(注意:记录被删除后,无法再复原,所以条件设置要正确)DELETE[table.*]FROMtableexpressionWHEREcriteriatable欲删除记录的表格名称,也可以用*来取代。tableexpression一个或一个以上表格的名称。此一参数可以为单一的表格名称或是从INNERJOIN,LEFTJOIN,或RIGHTJOIN等运算所得到的结果。criteria决定表格中记录要被删除的标准。例如:若是我们要将职员表格中叫做'李名'的记录删除,我们可以利用下面的SQL语句来
    完成。DELETE*FROM职员表格WHERE='李名';数据库表格相关的操作命令SQL除了可以作为查询与数据库表格的建立的工具外,对于数据库与表格的新建、删修、与维护,与具有相当不错的功能,若是读者使用SQL命令得宜,对于整个效率的提高有着很大的帮助,所以对于SQL语句所带来的优势,常常会遇到一个情况,就是:“当我们对多个表格作复杂与多步骤的处理时,或许SQL只要一个语句就可以完成所有的需求与目标”,乍看一下,或许觉得有些玄妙,但是接下来的章节,会让你了解其中的妙处。SELECT...INTO语句我们可以通过这个命令,利用既存表格查询,来建立一个新表格的查询语句。SELECTfield1[,field2[,...]]INTOnewtable[INexternaldatabase]FROMsourcefield1,field2欲拷贝到新表格的字段名称。newtable欲建立之新表格的名称,不可是已经存在的表格。externaldatabase若是该表格在另外的外部数据库时,该数据库的名称。source
     记录数据拷贝的来源表格名称,可以是单一的表格或是一段SQL查询之语句。例如:你可以通过下面的SQL语句,来建立一个新的“训练名册”表格。SELECT职员表格.,职员表格.部门INTO训练名册FROM职员表格WHERE职称='新进人员';INNERJOIN操作数当某一个共同的字段数据相等时,将两个表格的记录加以组合。SELECTfieldsFROMtable1INNERJOINtable2ONtable1.field1compoprtable2.field2table1,table2欲进行记录组合的表格名称。field1,field2欲组合的字段名称。(必须具有相同的数据类型)compopr比较关系运算符如下:“=”,“<”,“>”,“<=”,“<>”等。例如:若是你要把分类表格与产品表格作组合,可参考下面的SQL语句。SELECT分类名称,产品名称FROM分类表格INNERJOIN产品表格ON分类表格.分类编号=产品表格.分类编号;UNION操作数我们可以通过UNION操作数来建立连接的查询条件,UNION操作数可以将两个以上的表格或是查询的结果组合起来。[TABLE]query1UNION[ALL][TABLE]query2[UNION[ALL][TABLE]queryn[...]]query1,query2,queryn为一个SELECT的语句,或是一个已存在的查询名称,或是一个已存在的表格名称。例如:你可以利用下面的SQL语句,将订单数量超过1000的顾客表格记录,与新客户表格作UNION的操作。TABLE新客户表格UNIONALLSELECT*FROM顾客表格WHERE订单数量>1000;
     ALTER语句在一个表格被建立之后,利用ALTER语句,我们可以去修改表格的字段设计.ALTERTABLEtable{ADD{COLUMNfieldtype[(size)][CONSTRAINTindex]|CONSTRAINTmultifieldindex}|DROP{COLUMNfield|CONSTRAINTindexname}}table欲被ALTER的表格名称。field要被增加或删除的字段名称。type字段
    数据类型。size字段大小。index对此字段的索引。例如:在职员表格中新建一个“薪水”的字段。ALTERTABLE职员表格ADDCOLUMN薪水CURRENCY;例如:在职员表格中删除一个“薪水”的字段。ALTERTABLE职员表格DROPCOLUMN薪水;DROP语句针对所指定的表格或字段加以删除,或是把索引删除。DROP{TABLEtable|INDEXindexONtable}table欲删除之表格或索引依附之表格名称。index欲从表格中删除的索引名称。例如:从职员表格中,删除编号索引。DROPINDEXMyIndexONEmployees;例如:从数据库中,删除整个表格。
     DROPTABLE职员表格;INSERTINTO语句新建一条数据到表格当中。多条记录新建查询:INSERTINTOtarget[INexternaldatabase][(field1[,field2[,...]])]SELECT[source.]field1[,field2[,...]FROMtableexpression单条记录新建查询:INSERTINTOtarget[(field1[,field2[,...]])]VALUES(value1[,value2[,...])target新建记录的表格名称。externaldatabase外部数据库的路径,搭配IN条件子句使用。source若是记录从其它表格中拷贝时,指明该表格的名称。field1,field2欲增加数据的字段名称。tableexpression表格名称或描述记录是从哪一个表格中插入的表格名称。配合INNERJOIN,LEFTJOIN,或RIGHTJOIN运算符一起使用。value1,value2欲插入表格中的数值。例如:在客户数据表格中,从新的表格插入数据。INSERTINTO客户数据表格SELECT新客户数据表格.*FROM新客户数据表格;例如:在职员表格中插入数据。INSERTINTO职员表格(,生日,职称)VALUES("王荣","57/12/11","经理");例如:从训练人员表格中,将职员雇用时间超过30天者,加入到正式职员表格中。INSERTINTO职员表格SELECT训练人员表格.*
     FROM训练人员表格WHERE雇用天数>30;UPDATE语句建立一个UPDATE的查询,通过条件的限制来修改特定的数据。UPDATEtableSETnewvalueWHEREcriteria;table欲修改数据的表格名称。newvalue欲修改成的数值(将该项数值插入到特定的字段当中)。criteria查询条件,用来决定要修改哪些记录。例如:若是要把订单表格中的订单数量修改成1.1倍,运费为1.03倍,可利用下列之SQL语句来完成。UPDATE订单表格SET订单数量=订单数量*1.1,运费=运费*1.03倍WHERE运达地点='美国';当我们完成修改后,你可以利用SELECT语句,配合同样的WHERE条件子句,来察看修改的数据是否正确。事实上,要利用SQL完成某些看似复杂的操作,并不需要繁琐的SQL命令组合,或是许许多多的步骤才能完成,其实最重要的还是要活用SQL命令,才会在最精简的SQL语句里获得最高的效率
    
    
  • 下一篇资讯: 全面接触SQL语法(7)
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师