【网学网提醒】:网学会员为大家收集整理了SQL语法、语句+实例大全提供大家参考,希望对大家有所帮助!
SQL语法语法,SQL语句大全语句大全,SQL基础
SQL语法参考手册(SQL)/数据类型2006-07-2407:42《SQL语法参考手册(SQL)》DB2提供了关连式资料库的查询语言SQL(StructuredQueryLanguage),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的*作,包含了资料的定义(DDL)以及资料的处理(DML)。SQL原来拼成SEQUEL,这语言的原型以“系统R“的名字在IBM圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R的技术基础发展出来IBM的产品。而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以IBMSQL为基础的标准关连式资料语言定义。一、资料定义DDL(DataDefinitionLanguage)资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。1、建表格:CreateTABLEtable_name(column1DATATYPE[NOTNULL][NOTNULLPRIMARYKEY],column2DATATYPE[NOTNULL],...)说明:DATATYPE--是资料的格式,详见表。NUTNULL--可不可以允许资料有空的(尚未有资料填入)。PRIMARYKEY--是本表的主键。2、更改表格AlterTABLEtable_nameADDCOLUMNcolumn_nameDATATYPE说明:增加一个栏位(没有删除某个栏位的语法。AlterTABLEtable_nameADDPRIMARYKEY(column_name)说明:更改表得的定义把某个栏位设为主键。AlterTABLEtable_nameDropPRIMARYKEY(column_name)说明:把主键的定义删除。3、建立索引CreateINDEXindex_nameONtable_name(column_name)说明:对某个表格的栏位建立索引以增加查询时的速度。
4、删除Droptable_nameDropindex_name二、资料形态DATATYPEssmallint16位元的整数。interger32位元的整数。decimal(p,s)p精确值和s大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。如果没有特别指定,则系统会设为p=5;s=0。float32位元的实数。double64位元的实数。char(n)n长度的字串,n不能超过254。varchar(n)长度不固定且其最大长度为n的字串,n不能超过4000。graphic(n)和char(n)一样,不过其单位是两个字元double-bytes,n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。vargraphic(n)可变长度且其最大长度为n的双字元字串,n不能超过2000。date包含了年份、月份、日期。time包含了小时、分钟、秒。timestamp包含了年、月、日、时、
分、秒、千分之一秒。三、资料操作DML(DataManipulationLanguage)资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update)、删除资料(delete)四种模式,以下分别介绍他们的语法:1、增加资料:InsertINTOtable_name(column1,column2,...)valueS(value1,value2,...)说明:1.若没有指定column系统则会按表格内的栏位顺序填入资料。2.栏位的资料形态和所填入的资料必须吻合。3.table_name也可以是景观view_name。
InsertINTOtable_name(column1,column2,...)Selectcolumnx,columny,...FROManother_table说明:也可以经过一个子查询(subquery)把别的表格的资料填入。2、查询资料:基本查询Selectcolumn1,columns2,...FROMtable_name说明:把table_name的特定栏位资料全部列出来Select*FROMtable_nameWherecolumn1=xxx[ANDcolumn2〉yyy][ORcolumn3〈〉zzz]说明:1.’*’表示全部的栏位都列出来。2.Where之後是接条件式,把符合条件的资料列出来。
Selectcolumn1,column2FROMtable_nameorDERBYcolumn2[DESC]说明:ORDERBY是指定以某个栏位做排序,[DESC]是指从大到小排列,若没有指明,则是从小到大排列组合查询组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。Select*FROMtable1,table2Wheretable1.colum1=table2.column1说明:1.查询两个表格中其中column1值相同的资料。2.当然两个表格相互比较的栏位,其资料形态必须相同。3.一个复杂的查询其动用到的表格可能会很多个。整合性的查询:SelectCOUNT(*)FROMtable_nameWherecolumn_name=xxx说明:查询符合条件的资料共有几笔。SelectSUM(column1)FROMtable_name说明:1.计算出总和,所选的栏位必须是可数的数字形态。
2.除此以外还有AVG()是计算平均、MAX()、MIN()计算最大最小值的整合性查询。Selectcolumn1,AVG(column2)FROMtable_nameGROUPBYcolumn1HAVINGAVG(column2)〉xxx说明:1.GROUPBY:以column1为一组计算column2的平均值必须和AVG、SUM等整合性查询的关键字一起使用。2.HAVING:必须和GROUPBY一起使用作为整合性的限制。复合性的查询Select*FROMtable_name1WhereEXISTS(Select*FROMtable_name2Whereconditions)说明:1.Where的conditions可以是另外一个的query。2.EXISTS在此是指存在与否。Select*FROMtable_name1Wherecolumn1IN(Selectcolumn1FROMtable_name2Whereconditions)说明:1.IN後面接的是一个集合,表示column1存在集合里面。2.Select出来的资料形态必须符合column1。其他查询Select*FROMtable_name1Wherecolumn1LIKE’x%’说明:LIKE必须和後面的’x%’相呼应表示以x为开头的
字串。Select*FROMtable_name1Wherecolumn1IN(’xxx’,’yyy’,..)说明:IN後面接的是一个集合,表示column1存在集合里面。Select*FROMtable_name1Wherecolumn1BETWEENxxANDyy说明:BETWEEN表示column1的值介於xx和yy之间。
3、更改资料:Updatetable_nameSETcolumn1=’xxx’Whereconditoins说明:1.更改某个栏位设定其值为’xxx’。2.conditions是所要符合的条件、若没有Where则整个table的那个栏位都会全部被更改。4、删除资料:DeleteFROMtable_nameWhereconditions说明:删除符合条件的资料。说明:关于Where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下:(1)如果是ACCESS数据库,则为:Wheremydate〉#2000-01-01#(2)如果是ORACLE数据库,则为:Wheremydate〉cast(’2000-01-01’asdate)或:Wheremydate〉to_date(’2000-01-01’,’yyyy-mm-dd’)在Delphi中写成:thedate=’2000-01-01’;query1.SQL.add(’select*fromabcwheremydate〉cast(’+’’’’+thedate+’’’’+’asdate)’);如果比较日期时间型,则为:Wheremydatetime〉to_date(’2000-01-0110:00:01’,’yyyy-mm-ddhh24:mi:ss’)
Recordset对象一些有用的属性"/〉引用来自增加一个:Recordset对象一些有用的属性rs.CursorType=rs.CursorLocation=rs.LockType=rs.CacheSize=rs.Pagesize=rs.Pagecount=rs.RecordCount=’’----CursorTypeValues---ConstadOpenForwardOnly=0仅向前ConstadOpenKeyset=1键集游标ConstadOpenDynamic=2动态游标ConstadOpenStatic=3静态游标
’’----LockTypeValues---ConstadLockReadOnly=1默认值,只读ConstadLockPessimistic=2保守式记录锁定
ConstadLockOptimistic=3开放式记录锁定,只在调用Update方法时锁定记录ConstadLockBatchOptimistic=4开放式批更新
’’----CursorLocationValues---ConstadUseServer=2ConstadUseClient=3Setrs=Server.CreateObject("ADODB.Rrecordset")rs.Open.sqlst,conn,1,1’读取rs.Opensqlst,conn,1,2’新增,修改,或删除)
下一页:《SQLSERVER的数据类型》〉〉〉---------我想分页!--这么长的文章,在这里来个分页多好啊!哈哈----------〈〈〈《SQLSERVER的数据类型》1.SQLSERVER的数据类型数据类弄是数据的一种属性,表示数据所表示信息的类型。任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同。SQLServer提供了25种数据类型:?Binary[(n)]?Varbinary[(n)]?Char[(n)]?Varchar[(n)]?Nchar[(n)]?Nvarchar[(n)]?Datetime?Smalldatetime?Decimal[(p[,s])]?Numeric[(p[,s])]?Float[(n)]?Real?Int?Smallint?Tinyint?Money?Smallmoney?Bit?Cursor?Sysname?Timestamp?Uniqueidentifier
?Text?Image?Ntext(1)二进制数
据类型二进制数据包括Binary、Varbinary和ImageBinary数据类型既可以是固定长度的(Binary),也可以是变长度的。Binary[(n)]是n位固定的二进制数据。其中,n的取值范围是从1到8000。其存储窨的大小是n+4个字节。Varbinary[(n)]是n位变长度的二进制数据。其中,n的取值范围是从1到8000。其存储窨的大小是n+4个字节,不是n个字节。在Image数据类型中存储的数据是以位字符串存储的,不是由SQLServer解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF和JPEG格式把数据存储在Image数据类型中。(2)字符数据类型字符数据的类型包括Char,Varchar和Text字符数据是由任何字母、符号和数字任意组合而成的数据。Varchar是变长字符数据,其长度不超过8KB。Char是定长字符数据,其长度最多为8KB。超过8KB的ASCII数据可以使用Text数据类型存储。例如,因为Html文档全部都是ASCII字符,并且在一般情况下长度超过8KB,所以这些文档可以Text数据类型存储在SQLServer中。(3)Unicode数据类型Unicode数据类型包括Nchar,Nvarchar和Ntext在MicrosoftSQLServer中,传统的非Unicode数据类型允许使用由特定字符集定义的字符。在SQLServer安装过程中,允许选择一种字符集。使用Unicode数据类型,列中可以存储任何由Unicode标准定义的字符。在Unicode标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非Unicode数据类型所占用的窨大小的两倍。在SQLServer中,Unicode数据以Nchar、Nvarchar和Ntext数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar字符类型,这时最多可以存储4000个字符。当列的长度固定不变时,应该使用Nchar字符类型,同样,这时最多可以存储4000个字符。当使用Ntext数据类型时,该列可以存储多于4000个字符。(4)日期和时间数据类型日期和时间数据类型包括Datetime和Smalldatetime两种类型日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在MicrosoftSQLServer中,日期和时间数据类型包括Datetime和Smalldatetime两种类型时,所存储的日期范围是从1753年1月1日开始,9999年到12月31日结束(每一个值要求8个存储字节)。使用Smalldatetime数据类型时,所存储的日期范围是1900年1月1日开始,到2079年12月31日结束(每一个值要求4个存储字节)。
日期的格式可以设定。设置日期格式的命令如下:SetDateFormat{format|@format_var|其中,format|@format_var是日期的顺序。有效的参数包括MDY、DMY、YMD、YDM、MYD和DYM。在默认情况下,日期格式为MDY。
例如,当执行SetDateFormatYMD之后,日期的格式为年月日形式;当执行SetDateFormatDMY之后,日期的格式为日月有年形式(5)数字数据类型数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数整数由正整数和负整数组成,例如39、25、0-2和33967。在MicrsoftSQLServer中,整数存储的数据类型是Int,Smallint和Tinyint。Int数据类型存储数据的范围大于Smallint数据类型存储数据的范围,Smallint据类型存储数据的范围大于Tinyint数据类型存储数据的范围。而使用Int数据狗昔存储数据的范围是从-2147483648到2147483647(每一个值要求4个字节存储空间)。使用Smallint数据类型时,存储数据的范围从-32768到32767(每一个值要求2个字节存储空间)。使用Tinyint数据类型时,存储数据的范围是从0到255(每一个值要求1个字节存储空间)。精确小娄数据在SQLServer中的数据类型是Decimal和Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。在SQLServer中,近似小数数据的数据类型是Float和Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。(6)货币数据表示正的或者负的货币数量。在MicrosoftSQLServer中,货币数据的数据类型是Money和SmallmoneyMoney数据类型要求8个存储字节,Smallmoney数据类型要求4个存储字节。(7)特殊数据类型特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即Bit和Uniqueidentifier。Timestamp用于表示SQLServer活动的先后顺序,以二进投影的格式表示。Timestamp数据与插入数据或者日期和时间没有关系。Bit由1或者0组成。当表示真或者假、ON或者OFF时,使用Bit数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。Uniqueidentifier由16字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。2.用户定义的数据类型用户定义的数据类型基于在MicrosoftSQLServer中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。
例如,可定义一种称为型的可空性。(1)创建用户定义的数据类型创建用户定义的数据类型可以使用Transact-SQL语句。系统存储过程sp_addtype可以来创建用户定义的数据类型。其语法形式如下:sp_addtype{type},[,system_data_bype][,’null_type’]其中,type是用户定义的数据类型的名称。system_data_type是系统提供的数据类型,例postal_code的数据类型,它基于Char数据类型。当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类
Timestamp、
如Decimal、Int、Char例子:Usecust
等等。null_type表示该数据类型是如何处理空值的,必须使用单引号引
起来,例如’NULL’、’NOTNULL’或者’NONULL’。
Execsp_addtypessn,’Varchar(11)’,"NotNull’创建一个用户定义的数据类型ssn,其基于的系统数据类型是变长为11的字符,不允许空。例子:UsecustExecsp_addtypebirthday,datetime,’Null’创建一个用户定义的数据类型birthday,其基于的系统数据类型是DateTime,允许空。例子:UsemasterExecsp_addtypetelephone,’varchar(24),’NotNull’Eexcsp_addtypefax,’varchar(24)’,’Null’创建两个数据类型,即telephone和fax(2)删除用户定义的数据类型当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是sp_droptype{’type’}。例子:UsemasterExecsp_droptype’ssn’注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。以下为SQLSERVER7.0以上版本的字段类型说明。SQLSERVER6.5的字段类型说明请参考SQLSERVER提供的说明。字段类型描述bit0或1的整型数字int从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字smallint从-2^15(-32,768)到2^15(32,767)的整型数字tinyint从0到255的整型数字decimal从-10^38到10^38-1的定精度与有效位数的数字numericdecimal的同义词money从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十smallmoney从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十float从-1.79E+308到1.79E+308可变精度的数字real从-3.04E+38到3.04E+38可变精度的数字datetime从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或
3.33毫秒smalldatetime从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟timestamp时间戳,一个数据库宽度的唯一数字uniqueidentifier全球唯一标识符GUIDchar定长非Unicode的字符型数据,最大长度为8000varchar变长非Unicode的字符型数据,
最大长度为8000text变长非Unicode的字符型数据,最大长度为2^31-1(2G)nchar定长Unicode的字符型数据,最大长度为8000nvarchar变长Unicode的字符型数据,最大长度为8000ntext变长Unicode的字符型数据,最大长度为2^31-1(2G)binary定长二进制数据,最大长度为8000varbinary变长二进制数据,最大长度为8000image变长二进制数据,最大长度为2^31-1(2G)〉〉〉---------我想分页!--这么长的文章,在这里来个分页多好啊!哈哈----------〈〈〈《SQL语句的基本语法》一.Select语句的完整语法为:Select[ALL|DISTINCT|DISTINCTROW|TOP]{*|talbe.*|[table.]field1[ASalias1][,[table.]field2[ASalias2][,…]]}FROMtableexpression[,…][INexternaldatabase][Where…][GROUPBY…][HAVING…][ORDERBY…][WITHOWNERACCESSOPTION]说明:用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须从中选择其中的一个。1FROM子句FROM子句指定了Select语句中字段的来源。FROM子句后面是包含一个或多个的表达式(由逗号分开),其中的表达式可为单一表名称、已保存的查询或由INNERJOIN、LEFTJOIN或RIGHTJOIN得到的复合结果。如果表或查询存储在外部数据库,在IN子句之后指明其完整路径。例:下列SQL语句返回所有有定单的客户:SelectorderID,Customer.customerIDFROMordersCustomersWhereorders.CustomerID=Customers.CustomeersID2ALL、DISTINCT、DISTINCTROW、TOP谓词(1)ALL返回满足SQL语句条件的所有记录。如果没有指明这个谓词,默认为ALL。例:SelectALLFirstName,LastName
FROMEmployees(2)DISTINCT如果有多个记录的选择字段的数据相同,只返回一个。(3)DISTINCTROW如果有重复的记录,只返回一个(4)TOP显示查询头尾若干记录。也可返回记录的百分比,这是要用TOPNPERCENT子句(其中N表示百分比)例:返回5%定货额最大的定单SelectTOP5PERCENT*FROM[orderDetails]orDERBYUnitPrice*Quantity*(1-Discount)DESC3用AS子句为字段取别名如果想为返回的列取一个新的标题,或者,经过对字段的计算或总结之后,产生了一个新的值,希望把它放到一个新的列里显示,则用AS保留。例:返回FirstName字段取别名为NickNameSelectFirstNameASNickName,LastName,CityFROMEmployees例:返回新的一列显示库存价值SelectProductName,UnitPrice,UnitsInStock,UnitPrice*UnitsInStockASvalueInStockFROMProducts
二.Where子句指定查询条件1比较运算符比较运算符含义=等于〉大于〈小于〉=大于等于〈=小于等于〈〉不等于!〉不大于!〈不小于例:返回96年1月的定单SelectorderID,CustomerID,orderDateFROMordersWhereorderDate〉#1/1/96#ANDorderDate〈#1/30/96#注意:McirosoftJETSQL中,
日期用‘#’定界。日期也可以用Datevalue()函数来代替。在比较字符型的数据时,要加上单引号’’,尾空格在比较中被忽略。例:WhereorderDate〉#96-1-1#也可以表示为:WhereorderDate〉Datevalue(‘1/1/96’)
使用NOT表达式求反。例:查看96年1月1日以后的定单WhereNotorderDate〈=#1/1/96#2范围(BETWEEN和NOTBETWEEN)BETWEEN…AND…运算符指定了要搜索的一个闭区间。例:返回96年1月到96年2月的定单。WhereorderDateBetween#1/1/96#And#2/1/96#3列表(IN,NOTIN)IN运算符用来匹配列表中的任何一个值。IN子句可以代替用OR子句连接的一连串的条件。例:要找出住在London、Paris或Berlin的所有客户SelectCustomerID,CompanyName,ContactName,CityFROMCustomersWhereCityIn(‘London’,’Paris’,’Berlin’)4模式匹配(LIKE)LIKE运算符检验一个包含字符串数据的字段值是否匹配一指定模式。LIKE运算符里使用的通配符通配符含义?任何一个单一的字符*任意长度的字符#0~9之间的单一数字[字符列表]在字符列表里的任一值[!字符列表]不在字符列表里的任一值-指定字符范围,两边的值分别为其上下限例:返回邮政编码在(171)555-0000到(171)555-9999之间的客户SelectCustomerID,CompanyName,City,PhoneFROMCustomersWherePhoneLike‘(171)555-####’LIKE运算符的一些样式及含义样式含义不符合LIKE‘A*’A后跟任意长度的字符Bc,c255LIKE’5’5*5555LIKE’5?5’5与5之间有任意一个字符55,5wer5LIKE’5##5’5235,50055kd5,5346LIKE’[a-z]’a-z间的任意一个字符5,%LIKE’[!0-9]’非0-9间的任意一个字符0,1LIKE’[[]’1,*三.用ORDERBY子句排序结果orDER子句按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL语句的最后。
orDER子句中定义了多个字段,则按照字段的先后顺序排序。例:SelectProductName,UnitPrice,UnitInStockFROMProductsorDERBYUnitInStockDESC,UnitPriceDESC,ProductNameorDERBY子句中可以用字段在选择列表中的位置号代替字段名,可以混合字段名和位置号。例:下面的语句产生与上列相同的效果。SelectProductName,UnitPrice,UnitInStockFROMProductsorDERBY1DESC,2DESC,3四.运用连接关系实现多表查询例:找出同一个城市中供应商和客户的名字SelectCustomers.CompanyName,Suppliers.ComPany.NameFROMCustomers,SuppliersWhereCustomers.City=Suppliers.City例:找出产品库存量大于同一种产品的定单的数量的产品和定单SelectProductName,OrderID,UnitInStock,QuantityFROMProducts,[OrderDeails]WhereProduct.productID=[OrderDetails].ProductIDANDUnitsInStock〉Quantity另一
种方法是用MicrosofJETSQL独有的JNNERJOIN语法:FROMtable1INNERJOINtable2ONtable1.field1comparisiontable2.field2其中comparision就是前面Where子句用到的比较运算符。SelectFirstName,lastName,OrderID,CustomerID,OrderDateFROMEmployeesINNERJOINordersONEmployees.EmployeeID=Orders.EmployeeID注意:INNERJOIN不能连接MemoOLEObjectSingleDouble数据类型字段。在一个JOIN语句中连接多个ON子句语法:SelectfieldsFROMtable1INNERJOINtable2ONtable1.field1compoprtable2.field1ANDONtable1.field2compoprtable2.field2orONtable1.field3compoprtable2.field3也可以SelectfieldsFROMtable1INNERJOIN(table2INNERJOIN[(]table3[INNERJOER][(]tablex[INNERJOIN]ONtable1.field1compoprtable2.field1
ONtable1.field2compoprtable2.field2ONtable1.field3compoprtable2.field3外部连接返回更多记录,在结果中保留不匹配的记录,不管存不存在满足条件的记录都要返回另一侧的所有记录。FROMtable[LEFT|RIGHT]JOINtable2ONtable1.field1comparisiontable.field2用左连接来建立外部连接,在表达式的左边的表会显示其所有的数据例:不管有没有定货量,返回所有商品SelectProductName,OrderIDFROMProductsLEFTJOINordersONProducts.PrductsID=Orders.ProductID右连接与左连接的差别在于:不管左侧表里有没有匹配的记录,它都从左侧表中返回所有记录。例:如果想了解客户的信息,并统计各个地区的客户分布,这时可以用一个右连接,即使某个地区没有客户,也要返回客户信息。空值不会相互匹配,可以通过外连接才能测试被连接的某个表的字段是否有空值。Select*FROMtalbe1LEFTJOINtable2ONtable1.a=table2.c1连接查询中使用Iif函数实现以0值显示空值Iif表达式:Iif(IsNull(Amount,0,Amout)例:无论定货大于或小于¥50,都要返回一个标志。Iif([Amount]〉50,?Bigorder?,?Smallorder?)五.分组和总结查询结果在SQL的语法里,GROUPBY和HAVING子句用来对数据进行汇总。GROUPBY子句指明了按照哪几个字段来分组,而将记录分组后,用HAVING子句过滤这些记录。GROUPBY子句的语法SelectfidldlistFROMtableWherecriteria[GROUPBYgroupfieldlist[HAVINGgroupcriteria]]注:MicrosoftJet数据库Jet不能对备注或OLE对象字段分组。GROUPBY字段中的Null值以备分组但是不能被省略。在任何SQL合计函数中不计算Null值。GROUPBY子句后最多可以带有十个字段,排序优先级按从左到右的顺序排列。例:在‘WA’地区的雇员表中按头衔分组后,找出具有同等头衔的雇员数目大于1人的所有头衔。SelectTitle,Count(Title)asTotalFROMEmployeesWhereRegion=‘WA’GROUPBYTitleHAVINGCount(Title)〉1JETSQL中的聚积函数聚集函数意义
SUM()求和AVG()
平均值COUNT()表达式中记录的数目COUNT(*)计算记录的数目MAX最大值MIN最小值VAR方差STDEV标准误差FIRST第一个值LAST最后一个值六.用Parameters声明创建参数查询Parameters声明的语法:PARAMETERSnamedatatype[,namedatatype[,…]]其中name是参数的标志符,可以通过标志符引用参数.Datatype说明参数的数据类型.使用时要把PARAMETERS声明置于任何其他语句之前.例:PARAMETERS[Lowprice]Currency,[Beginningdate]datatimeSelectorderID,OrderAmountFROMordersWhereorderAMount〉[lowprice]ANDorderDate〉=[Beginningdate]七.功能查询所谓功能查询,实际上是一种操作查询,它可以对数据库进行快速高效的操作.它以选择查询为目的,挑选出符合条件的数据,再对数据进行批处理.功能查询包括更新查询,删除查询,添加查询,和生成表查询.1更新查询Update子句可以同时更改一个或多个表中的数据.它也可以同时更改多个字段的值.更新查询语法:Update表名SET新值Where准则例:英国客户的定货量增加5%,货运量增加3%UpdateOEDERSSETorderAmount=orderAmount*1.1Freight=Freight*1.03WhereShipCountry=‘UK’2删除查询Delete子句可以使用户删除大量的过时的或冗于的数据.注:删除查询的对象是整个记录.Delete子句的语法:
Delete[表名.*]FROM来源表Where准则例:要删除所有94年前的定单Delete*FROMordersWhereorderData〈#94-1-1#3追加查询Insert子句可以将一个或一组记录追加到一个或多个表的尾部.INTO子句指定接受新记录的表valueS关键字指定新记录所包含的数据值.Insert子句的语法:INSETRINTO目的表或查询(字段1,字段2,…)valueS(数值1,数值2,…)例:增加一个客户InsertINTOEmployees(FirstName,LastName,title)valueS(‘Harry’,’Washington’,’Trainee’)4生成表查询可以一次性地把所有满足条件的记录拷贝到一张新表中.通常制作记录的备份或副本或作为报表的基础.SelectINTO子句用来创建生成表查询语法:Select字段1,字段2,…INTO新表[IN外部数据库]FROM来源数据库Where准则例:为定单制作一个存档备份Select*INTOordersArchiveFROMorders八.联合查询UNION运算可以把多个查询的结果合并到一个结果集里显示.UNION运算的一般语法:[表]查询1UNION[ALL]查询2UNION…例:返回巴西所有供给商和客户的名字和城市SelectCompanyName,CityFROMSuppliersWhereCountry=‘Brazil’UNIONSelectCompanyName,CityFROMCustomersWhereCountry=‘Brazil’注:
缺省的情况下,UNION子句不返回重复的记录.如果想显示所有记录,可以加ALL选项UNION运算要求查询具有相同数目的字段.但是,字段数据类型不必相同.每一个查询参数中可以使用GROUPBY子句或HAVING子句进行分组
.要想以指定的顺序来显示返回的数据,可以在最后一个查询的尾部使用OREERBY子句.九.交叉查询交叉查询可以对数据进行总和,平均,计数或其他总和计算法的计算,这些数据通过两种信息进行分组:一个显示在表的左部,另一个显示在表的顶部.MicrosoftJetSQL用TRANSFROM语句创建交叉表查询语法:TRANSFORMaggfunctionSelect语句GROUPBY子句PIVOTpivotfield[IN(value1[,value2[,…]])]Aggfounction指SQL聚积函数,Select语句选择作为标题的的字段,GROUPBY分组说明:Pivotfield在查询结果集中创建列标题时用的字段或表达式,用可选的IN子句限制它的取值.value代表创建列标题的固定值.例:显示在1996年里每一季度每一位员工所接的定单的数目:TRANSFORMCount(OrderID)SelectFirstName&;’’&;LastNameASFullNameFROMEmployeesINNERJOINordersONEmployees.EmployeeID=orders.EmployeeIDWhereDatePart(“yyyy”,OrderDate)=‘1996’GROUPBYFirstName&;’’&;LastNameorDERBYFirstName&;’’&;LastNamePOVOTDatePart(“q”,OrderDate)&;’季度’十.子查询子查询可以理解为套查询.子查询是一个Select语句.1表达式的值与子查询返回的单一值做比较语法:表达式comparision[ANY|ALL|SOME](子查询)说明:ANY和SOME谓词是同义词,与比较运算符(=,〈,〉,〈〉,〈=,〉=)一起使用.返回一个布尔值True或False.ANY的意思是,表达式与子查询返回的一系列的值逐一比较,只要其中的一次比较产生True结果,ANY测试的返回True值(既Where子句的结果),对应于该表达式的当前记录将进入主查询的结果中.ALL测试则要求表达式与子查询返回的一系列的值的比较都产生True结果,才回返回True值.例:主查询返回单价比任何一个折扣大于等于25%的产品的单价要高的所有产品Select*FROMProductsWhereUnitPrice〉ANY(SelectUnitPriceFROM[OrderDetails]WhereDiscount〉0.25)
2检查表达式的值是否匹配子查询返回的一组值的某个值语法:[NOT]IN(子查询)例:返回库存价值大于等于1000的产品.SelectProductNameFROMProductsWhereProductIDIN(SelectPrdoctIDFROM[OrderDEtails]WhereUnitPrice*Quantity〉=1000)3检测子查询是否返回任何记录语法:[NOT]EXISTS(子查询)例:用EXISTS检索英国的客户SelectComPanyName,ContactNameFROMordersWhereEXISTS(Select*FROMCustomersWhereCountry=‘UK’ANDCustomers.CustomerID=orders.CustomerID)〉〉〉---------我想分页!--这么长的文章,在这里来个分页多好啊!哈哈----------〈〈〈SqlServer和Access操作数据库结构Sql语句下面是SqlServer和Access操作数据库结构的常用Sql,希望对你有所帮助。内容由海娃整理,不正确与不完整之处还请提出,谢谢。新建表:createtable[表名]([自动编号字段]intIDENTI
TY(1,1)PRIMARYKEY,[字段1]nVarChar(50)default’默认值’null,[字段2]ntextnull,[字段3]datetime,[字段4]moneynull,[字段5]intdefault0,[字段6]Decimal(12,4)default0,[字段7]imagenull,)删除表:Droptable[表名]插入数据:InsertINTO[表名](字段1,字段2)VALUES(100,’51WINDOWS.NET’)
删除数据:DeleteFROM[表名]Where[字段名]〉100更新数据:Update[表名]SET[字段1]=200,[字段2]=’51WINDOWS.NET’Where[字段三]=’HAIWA’新增字段:AlterTABLE[表名]ADD[字段名]NVARCHAR(50)NULL删除字段:AlterTABLE[表名]DropCOLUMN[字段名]修改字段:AlterTABLE[表名]AlterCOLUMN[字段名]NVARCHAR(50)NULL重命名表:(Access重命名表,请参考文章:在Access数据库中重命名表)
引用来自在Access数据库中重命名表
DimConn,ConnStr,oCat,oTblConnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&;Server.MapPath("data.mdb")SetoCat=Server.CreateObject("ADOX.Catalog")oCat.ActiveConnection=ConnStrSetoTbl=Server.CreateObject("ADOX.Table")SetoTbl=oCat.Tables("OldTable")’要重命名的表名:OldTableoTbl.Name="NewTable"’新表名SetoCat=NothingSetoTbl=Nothing
sp_rename’表名’,’新表名’,’OBJECT’新建约束:AlterTABLE[表名]ADDCONSTRAINT约束名CHECK([约束字段]〈=’2000-1-1’)删除约束:AlterTABLE[表名]DropCONSTRAINT约束名新建默认值AlterTABLE[表名]ADDCONSTRAINT默认值名DEFAULT’51WINDOWS.NET’FOR[字段名]
删除默认值AlterTABLE[表名]DropCONSTRAINT默认值名删除SqlServer中的日志,减小数据库文件大小dumptransaction数据库名withno_logbackuplog数据库名withno_logdbccshrinkdatabase(数据库名)execsp_dboption’数据库名’,’autoshrink’,’true’