SQL参考手册使用说明_第1页
SQL参考手册使用说明_第2页
SQL参考手册使用说明_第3页
SQL参考手册使用说明_第4页
SQL参考手册使用说明_第5页
已阅读5页,还剩853页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

页SQL参考手册Oracle、DB2、SQLServer、MySQL、SQLite本文档所使用的数据库版本说明Oracle.0Express(某些代码为企业版)DB29.7ExpressSQLServer2005/2008Express(某些代码为Developer版本)MySQL5.1.50-communitySQLiteRelease3.7.4

基本SQL命令 15启动程序 15清除输入缓冲 18显示表结构 18HelloWorld 21变量定义与赋值 24MERGE语句 25两表UPDATE处理 29数据类型 32数字类型 32字符类型 36日期类型 39二进制类型 1其他类型 1运算符号 1算术运算符 1赋值运算符 1按位运算符 1比较运算符 1逻辑运算符 1ALL/ANY/SOME 1EXISTS 1IN 1LIKE 1字符串串联运算符 1一元运算符 1运算符优先级 1DDL 1创建数据库 1创建构架 1创建表 1创建表同时定义主键 1自动递增列 1计算列 1约束 1表/字段的备注 1通过查询创建表 1修改表 1新增主键 1新增唯一约束 1新增其他约束 1新增IN方式的约束 1Check约束中调用自定义函数 1新增列 1删除列 1修改列名 1修改列的数据类型 1修改列的默认值 1变更表名 1表加入缓存 1创建索引 1概述 1创建普通索引 1SQLServer聚集索引/非聚集索引 1SQLServer索引中的INCLUDE 1创建用户 1创建PROFILE 1用户权限设置 1对用户撤销权限REVOKE 1对用户分配角色 1禁用、启用登陆帐户 1登陆帐户改名 1登陆帐户改密码 1数据库用户改名 1更改数据库用户默认构架(default_schema) 1删除用户 1控制结构 1IF/ELSE 1WHILE 1FOR 1LOOP 1REPEAT 1循环控制Break与Continue 1查询 1TOP-N 1只取前面N条 1前面N条到N+M条(使用ROWNUM方案) 1前面N条到N+M条(使用TOP方案) 1前面N条到N+M条(使用MINUS/EXCEPT方案) 1分组的TOP-N 1行转换为列 1行转换为列2 1树形结构 1多行转一行 1JOIN关联 1INNERJOIN 1LEFTOUTERJOIN 1RIGHTOUTERJOIN 1CROSSJOIN 1FULLJOIN 1CROSSAPPLY和OUTERAPPLY(SQLServerOnly) 1UNION-UNIONALL-INTERSECT-MINUS/EXCEPT 1UNION-合并且去除重复记录 1UNIONALL-合并且不去除重复记录 1INTERSECT–仅仅给出2个表都有的数据(去除重复记录) 1MINUS/EXCEPT–返回第一个表中有、第二个表中没有的数据 1随机获取数据的处理 1视图 1单表简单视图 1只读视图 1约束可更新视图 1单表统计视图 1多表关联视图 1带有“主键”的视图 1同义词 1存储过程 1创建时的基本定义与调用 1修改存储过程 1参数定义 1单个参数 1IN、OUT、INOUT 1参数的默认值 1指定参数名称调用 1存储过程返回结果集 1函数 1创建时的基本定义与调用 1创建返回结果集的函数 1触发器 1统一的测试表 1INSERT 1UPDATE 1DELETE 1INSERT/UPDATE/DELETE行为判断 1Oracle、DB2语句级/行级 1SQLServerINSERT/UPDATE/DELETE多行 1例子二 1针对特定列的触发 1针对特定条件的触发 1嵌套触发器 1递归触发器 1通过数据库参数禁止递归 1通过代码避免过度递归 1触发器实现数据完整性的处理1 1触发器实现数据完整性的处理2 1已创建的触发器的查询 1INSTEADOF触发器 1DDL触发器数据库级别 1DDL触发器服务器级别 1DDL触发器服务器级别-登录时使用 1小结 1外键约束 1默认外键约束方式 1DELETECASCADE方式 1UPDATECASCADE方式 1SETNULL方式 1关于非主键的外键设置 1小结 1游标处理 1简单循环处理I 1简单循环处理II 1支持来回滚动的游标 1带参数的游标 1用于更新的游标 1游标的状态 1FOR的使用 1BULKCOLLECT使用 1SELECTINTO的使用方式 1FETCHINTO的使用方式 1RETURNINGINTO的使用方式 1FORALL使用 1小结 1数据库系统自带函数 1说明 1字符函数 1由字符获取ASCII码ASCII 1格式化为ASCII字符串信息ASCIISTR(OracleOnly) 1由字符获取UNICODE码 1返回字符集CHARSET(MySQLOnly) 1由ASCII码获取字符CHR/CHAR 1由UNICODE码获取字符NCHAR 1字符串连接CONCAT||/+ 1单词首字母大写INITCAP(OracleOnly) 1字符替换INSERT(MySQLOnly) 1字符串搜索INSTR/POSSTR/CHARINDEX/LOCATE 1获取字符串左边开始指定个数的字符LEFT 1字符串长度LENGTH/LEN 1加载文件LOAD_FILE(MySQLOnly) 1字符转换为小写LOWER/LCASE 1左边字符填充LPAD 1去除左边空格与字符LTRIM 1MAKE_SET(MySQLOnly) 1检索指定模式首次出现位置PATINDEX(SQLServerOnly) 1正则表达式检索REGEXP_LIKE/REGEXP 1正则表达式字符截取REGEXP_SUBSTR(OracleOnly) 1正则表达式字符位置检索REGEXP_INSTR(OracleOnly) 1正则表达式字符替换REGEXP_REPLACE(OracleOnly) 1字符替换REPLACE 1增加标示符定义QUOTENAME/QUOTE 1重复字符串REPLICATE/REPEAT 1字符反转REVERSE 1获取字符串右边开始指定个数的字符RIGHT 1右边字符填充RPAD 1去除右边空格与字符RTRIM 1取得发音SOUNDEX 1取得发音的不同DIFFERENCE 1返回由重复的空格组成的字符串SPACE 1小数转换为字符串STR(SQLServerOnly) 1逐字符比较字符串大小STRCMP(MySQLOnly) 1删除指定长度的字符并在指定的起始点插入另一组字符STUFF(SQLServerOnly) 1返回字符串一部分SUBSTR/SUBSTRING 1SUBSTRING_INDEX(MySQLOnly) 1TRANSLATE 1删除前后空格或其它字符TRIM 1转换为大写UPPER 1数学函数 1绝对值ABS 1反余弦ACOS 1反正弦ASIN 1反正切ATAN 1反正切ATAN2/ATN2 1十进制转二进制BIN(MySQLOnly) 1二进制转十进制BIN_TO_NUM(OracleOnly) 1按位与操作BITAND(OracleOnly) 1向上取整CEIL/CEILING 1进制转换CONV(MySQLOnly) 1余弦COS 1双曲余弦COSH(OracleOnly) 1三角余切COT(SQLServerOnly) 1CRC32(MySQLOnly) 1度数为单位的角度DEGREES 1指数值EXP 1向下取整FLOOR 1保留小数位数FORMAT(MySQLOnly) 1转16进制HEX 1INTERVAL 1自然对数LN/LOG 1对数LOG 1以2为底的对数LOG2 1以10为底的对数LOG10 1余数MOD/% 1PI的常量值PI 1乘指定次方POWER 1度数值返回弧度值RADIANS 1随机数RAND 1四舍五入ROUND 1表达式的正(+1)、零(0)或负(-1)号SIGN 1正弦SIN 1双曲正弦SINH(OracleOnly) 1平方SQUARE(SQLServerOnly) 1平方根SQRT 1正切TAN 1双曲正切TANH(OracleOnly) 1截尾TRUNC/ROUND 1数字格式化显示 1日期函数 1取得数据库系统时间SYSDATE/GETDATE() 1日期增减计算 1日期组成部分的取得 1两个日期之间的差值 1日期的截尾 1日期的名称DATENAME 1日期/时间的格式化[日期转换为字符串] 1日期/时间的格式化[字符串转换为日期] 1时间/秒转换 1新建日期/时间 1时区相关 1一般比较函数 1取得最大值GREATEST 1取得最小值LEAST 1数据字典类函数 1返回列名COL_NAME 1列属性COLUMNPROPERTY 1数据库选项设置DATABASEPROPERTYEX 1数据库中的主体的ID号DATABASE_PRINCIPAL_ID 1取得数据库标识号DB_ID(SQLServerOnly) 1取得数据库名DB_NAME/DATABASE 1取得文件标识号FILE_IDEX 1取得逻辑文件名FILE_NAME 1取得文件组标识号FILEGROUP_ID 1取得文件组名FILEGROUP_NAME 1读取文件属性FILEPROPERTY 1取得工作站标识号HOST_ID(SQLServerOnly) 1取得工作站名称HOST_NAME(SQLServerOnly) 1返回定义的源文本OBJECT_DEFINITION 1返回对象标识OBJECT_ID 1返回对象名称OBJECT_NAME 1返回对象构架名OBJECT_SCHEMA_NAME 1对象的有关信息OBJECTPROPERTY 1对象的有关信息OBJECTPROPERTYEX 1获取当前用户可用权限PERMISSIONS 1获取架构名称SCHEMA_ID 1获取架构名称SCHEMA_NAME 1获取服务器实例的属性信息SERVERPROPERTY 1返回会话的SET选项设置SESSIONPROPERTY 1返回上次更新指定索引的统计信息的日期STATS_DATE 1返回用户登录名的安全标识号(SID)SUSER_SID(SQLServerOnly) 1从用户的安全标识号(SID)返回登录标识名SUSER_SNAME(SQLServerOnly) 1取得用户IDUID/USER_ID 1取得用户名USER_NAME 1获取数据类型名称的编号TYPE_ID 1获取指定类型ID的未限定的类型名称TYPE_NAME 1返回有关数据类型的信息TYPEPROPERTY 1其他函数 1取得客户端应用程序名字APP_NAME 1数字或字符转换为BIGINT数据类型BIGINT 1数据校验BINARY_CHECKSUM 1数据转换为BLOB类型BLOB 1类型转换CAST 1字符串转换为行编号CHARTOROWID(OracleOnly) 1返回最近语句更新行数CHANGE 1数据校验CHECKSUM 1数据校验CHECKSUM_AGG 1数据转换为CLOB类型CLOB 1返回列的定义的长度COL_LENGTH 1条件判断函数DECODE(Oracle、DB2Only) 1非空判断NVL/ISNULL 1非空判断NVL2 1取得第一个非空数据COALESCE 1取得字段所占用字节数VSIZE/DATALENGTH 1判断是否是日期ISDATE(SQLServerOnly) 1判断是否是数字ISNUMERIC(SQLServerOnly) 1取得GUID号SYS_GUID/NEWID 1如果两个指定的表达式相等,则返回空值NULLIF 1取指定位置的数据ELT(MySQLOnly) 1取数据的位置FIELD(MySQLOnly) 1FIND_IN_SET(MySQLOnly) 1PARSENAME(SQLServerOnly) 1获取数据库当前的版本 1IP地址转换处理 1统计分析函数 1测试表/数据 1ROW_NUMBER顺序编号 1RANK排名不连续 1DENSE_RANK排名连续 1NTILE分组 1计算一行在组中的相对位置CUME_DIST 1PERCENT_RANK 1计算百分比RATIO_TO_REPORT 1窗口函数(Oracle特有) 1逐步累计 1移动平均1 1移动平均2 1移动平均3 1FIRST_VALUEandLAST_VALUE 1LAG/LEAD 1FIRST/LAST 1WITHINGROUP 1PERCENTILE_CONT|PERCENTILE_DISC 1中位数Median 1MODEL查询函数(Oracle特有) 1CURRENTV()取当前行 1ISPRESENT/PRESENTV/PRESENTNNV 1IGNORENAV选项 1RULESUPDATE选项 1REFERENCE语句与CV函数 1Iterative方法 1AUTOMATICORDER 1排序规则 1安全函数 1是否可访问指定数据库HAS_DBACCESS(SQLServerOnly) 1用户是否是Microsoft®WindowsNT®组或MicrosoftSQLServer™角色的成员IS_MEMBER(SQLServerOnly) 1指明当前的用户登录是否是指定的服务器角色的成员IS_SRVROLEMEMBER(SQLServerOnly) 1取得连接到SQLServer实例的登录名ORIGINAL_LOGINSYSTEM_USER 1取得用户名USER 1聚集函数 1平均值AVG 1相关系数CORR(Oracle) 1行的计数COUNT 1COUNT_BIG 1总体协方差COVAR_POP 1样本协方差COVAR_SAMP 1最大值MAX 1中位数MEDIAN 1最小值MIN 1标准偏差STDDEV/STDEV 1总体标准方差STDDEV_POP/样本标准方差STDDEV_SAMP 1填充统计标准偏差STDEVP(SQLServerOnly) 1合计值SUM 1COMPUTESUM(SQLServer) 1方差VARIANCE/VAR 1总体方差VAR_POP/样本方差VAR_SAMP 1填充的统计方差VARP(SQLServerOnly) 1ROLLUP与CUBE查询 1ROLLUP-简单用法 1ROLLUP-GROUPING 1ROLLUP-调整NULL显示 1CUBE-简单用法 1CUBE-GROUPING 1大小写敏感问题 1表名字段名的例子 1=操作的例子 1LIKE操作的例子 1排序的例子 1排序规则冲突的处理-JOIN 1排序规则冲突的处理-UNION 1关于中文汉字的排序 1异常处理 1简单异常测试 1没有异常处理时 1有异常处理时 1取得错误代码与错误信息 1自定义错误 1简单命名方式 1与数据库错误关联 1应用级别的错误 1错误的传播 1当前代码块未处理异常 1当前代码块处理异常 1数据字典表 1构架 1用户 1表 1字段 1表备注说明信息 1字段备注说明信息 1视图 1视图列 1触发器 1存储过程 1函数 1依赖关系 1约束 1主键 1唯一 1外键 1其他 1事务处理 1简单的正常提交-异常回滚 1自治事务(OracleOnly) 1多用户间锁的处理 1简单锁定 1SQLServer(nolock) 1SQLServer(READPAST) 1死锁 1队列处理 1基础知识 1HelloWorld 1HelloWorld2 1临时表 1创建临时表 1插入数据-查询 1总结 1分区表 1RANGE分区 1初期分区定义 1查询分区信息 1新增分区 1删除分区 1分区的合并 1分区的拆分 1计算列的分区 1列表分区(List分区) 1初期分区定义 1新增分区 1删除分区 1分区的拆分 1分区的合并 1散列分区(Hash分区) 1初期分区定义 1增加分区 1减少分区 1组合分区 1初期分区定义 1分区视图 1动态SQL 1测试表/数据 1直接执行的方式 1简单执行 1参数的传入 1单条结果的获取 1游标方式获取 1执行存储过程的方式 1简单的执行 1参数的传入 1单条结果的获取 1游标方式获取 1小结 1数据库链接 1Oracle 1SQLServer 1MySQL 1Access 1Excel 1权限体系结构 1数据库作业 1作业的创建 1作业的查询 1作业的修改 1作业的删除 1查询的优化 1获取执行计划 1获取查询计划与统计信息 1提示Hint 1优化器提示 1连接提示 1表反连接提示 1Index提示 1Parallel提示 1表提示 1查询提示 1数据库系统参数 1查询系统参数 1修改系统参数 1监控运行状况 1数据库会话的基本参数设置SET 1日期和时间语句 1设置一周的第一天 1设置输入的年月日顺序 1锁定语句 1死锁优先级设置 1锁定超时设置 1杂项语句 1提交事务时是否关闭游标 1检查是否遵从FIPS127-2标准 1允许将显式值插入表的标识列中 1指定会话的语言环境 1双引号分隔标识符设置 1查询执行语句 1溢出或被零除错误时的处理 1测试响应模式 1显示行数信息设置 1仅仅编译不执行 1语法检查 1查询开销设置 1处理指定行数后结束 1SQL-92设置语句 1ANSI_DEFAULTS设置 1空/非空的默认值设定 1错误警告的提示 1统计语句 1查询计划的设置 1查看查询计划的详细情况 1查看查询计划文本 1XML方式查看查询计划 1显示磁盘活动统计信息 1显示查询计划与实际执行情况信息 1显示花费时间 1事务语句 1隐式事务模式 1分布式事务 1隔离级别的设定 1是否自动回滚 1导出/导入 1简单表的导出/导入 1详细参数与用法 1大容量导入/导出操作 1普通表导入导出 1数据文件结构与表结构不匹配情况下的导入 1存在特殊字符情况的处理 1使用外部表 1备份与恢复 1错误恢复 1FlashbackQuery 1执行操作系统下的程序 1执行外部sql文件 1XML 1简单格式化 1多行数据转化成一行 1SQL查询 1前提条件 1query查询 1Exist查询 1value查询 1modify查询 1

基本SQL命令启动程序OracleC:\DocumentsandSettings\wzq>sqlplusSQL*Plus:Release.0-Productionon星期二8月2411:08:522010Copyright(c)1982,2005,Oracle.Allrightsreserved.Enteruser-name:hrEnterpassword:Connectedto:OracleDatabase10gExpressEditionRelease.0-ProductionSQL>DB2C:\DocumentsandSettings\wzq>DB2CMD.exeDB2SETCP.BATDB2.EXE弹出新窗口(c)CopyrightIBMCorporation1993,2007DB2客户机9.7.1的命令行处理器可从命令提示符处发出数据库管理器命令和SQL语句。例如:db2=>connecttosampledb2=>bindsample.bnd要获得一般帮助,输入:?。要获得命令帮助,输入:?command,其中command可以是数据库管理器命令的前几个关键字。例如:?CATALOGDATABASE用于关于CATALOGDATABASE命令的帮助?CATALOG用于关于所有CATALOG命令的帮助。要退出db2交互方式,在命令提示符处输入QUIT。在非交互方式下,所有命令都必须以“db2”作前缀。要列出当前命令选项设置,输入LISTCOMMANDOPTIONS。要获取更详细的帮助,请参阅OnlineReferenceManual。Db2=>db2=>connecttotest数据库连接信息数据库服务器=DB2/NT9.7.1SQL授权标识=WZQ本地数据库别名=TEST注意:Db2默认情况下,以回车换行,认为是语句执行结束。如果要换行,需要使用\符号来标记为换行的处理。如果要使用;作为语句结束的处理,建议使用Db2.exe-t的参数,这种情况下,数据库将遇到分号的时候,才认为是语句结束。后面大部分查询代码(非存储过程),将都是用Db2.exe-t的处理逻辑。E:\IBM\SQLLIB\BIN>db2.exe?optionsdb2[option...][db2-command|sql-statement|[?[phrase|message|sqlstate|class-code]]]option:-a、-c、-d、-e{c|s}、-finfile、-i、-lhistfile、-m、-n、-o、-p、-q、-rreport、-s、-t、-td;、-v、-w、-x和-zoutputfile。选项描述缺省设置-a显示SQLCAOFF-c自动落实ON-d检索并显示XML声明OFF-e显示SQLCODE/SQLSTATEOFF-f读取输入文件OFF-i显示XML数据并带有缩进OFF-l将命令记录到历史记录文件中OFF-m显示受影响的行数OFF-n除去换行字符OFF-o显示输出ON-p显示db2交互式提示符ON-q保留空格和换行符OFF-r将输出报告保存到文件OFF-s在命令出错时停止执行OFF-t设置语句终止字符OFF-v回传当前命令OFF-w显示FETCH/SELECT警告消息ON-x不打印列标题OFF-z将所有输出保存到输出文件OFF注意:使用DB2OPTIONS环境变量定制选项缺省值。紧跟选项字母后的减号(-)使该选项关闭。使用UPDATECOMMANDOPTIONS更改选项设置(以交互方式或文件输入方式)。对于存储过程,可以通过db2-td@来使用@字符,作为命令的结束字符.SQLServerC:\DocumentsandSettings\wzq>sqlcmd-S"HOME-BED592453C\SQLEXPRESS"1>USEstock;2>go已将数据库上下文更改为'Stock'。1>或者C:\DocumentsandSettings\wzq>sqlcmd-S"localhost\SQLEXPRESS"1>usestock2>go已将数据库上下文更改为'Stock'。此处使用MicrosoftWindows身份验证模式进行连接,没有输入用户名与密码。或者C:\Users\zqwang>osql-E-S"localhost\SQLEXPRESS"1>usestock2>:reset无法打开文件“eset”3>reset1>usetest2>goMySQLE:\MySQL\MySQLServer5.1\bin>mysql-uroot-pEnterpassword:********WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis4Serverversion:5.1.50-communityMySQLCommunityServer(GPL)Copyright(c)2000,2010,Oracleand/oritsaffiliates.Allrightsreserved.ThissoftwarecomeswithABSOLUTELYNOWARRANTY.Thisisfreesoftware,andyouarewelcometomodifyandredistributeitundertheGPLv2licenseType'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.mysql>usetestDatabasechangedSQLiteE:\SQLite\SQLite\Debug>sqlitetest.dbSQLiteversion3.7.152012-12-1213:36:53Enter".help"forinstructionsEnterSQLstatementsterminatedwitha";"sqlite>注:上面的命令,后面跟了一个test.db,就是使用test数据库。如果数据库文件不存在,那么将自动创建一个。(当建表的时候创建)清除输入缓冲OracleSQLPlus中输入错误,通过多次回车清理SQL>SELECT*2FROM3input_err4SQL>SQLServerSqlCmd中输入错误,通过:reset清理1>SELECT*2>FROM3>inputerror4>5>:reset1>MySQL输入\c清除mysql>SELECT->FROM->\cmysql>显示表结构OracleSQLPlus中DESCSQL语句中无效SQL>descall_tab_columnsNameNull?TypeOWNERNOTNULLVARCHAR2(30)TABLE_NAMENOTNULLVARCHAR2(30)COLUMN_NAMENOTNULLVARCHAR2(30)DATA_TYPEVARCHAR2(106)DATA_TYPE_MODVARCHAR2(3)DATA_TYPE_OWNERVARCHAR2(30)DB2db2=>describeselect*fromtest列信息列数:1SQL类型类型长度列名名称长度497INTEGER4ID2或者db2=>describeTABLEtest数据类型列列名模式数据类型名称长小数位NULLIDSYSIBMINTEGER40是1条记录已选择。SQLServerSqlCmd中sp_help1>sp_help'SALE_REPORT'2>go输出略MySQLmysql>descsale_report;+++++++|Field|Type|Null|Key|Default|Extra|+++++++|SALE_DATE|datetime|NO||NULL|||SALE_ITEM|varchar(2)|NO||NULL|||SALE_MONEY|decimal(10,2)|NO||NULL||+++++++3rowsinset(0.03sec)

HelloWorldOracleSQL>setserveroutputonSQL>BEGIN2dbms_output.put_line('HelloWorld');3END;4/HelloWorldPL/SQLproceduresuccessfullycompleted.DB2注:DB2里面的SYSIBM.SYSDUMMY1等价于Oracle里面的Dual也就是只有1行数据的因为Oracle和DB2不能SELECT1必须要SELECT1FROM表DB2没有print之类的语句。只好把结果写入临时表db2=>CREATETABLEtest_helloworld(\db2(cont.)=>datavarchar(20)\db2(cont.)=>)DB20000ISQL命令成功完成。Db2=>CREATEPROCEDUREHelloWorld\db2(cont.)=>LANGUAGESQL\db2(cont.)=>BEGIN\db2(cont.)=>INSERTINTOtest_helloworld\db2(cont.)=>SELECT‘HelloWorld’FROMSYSIBM.SYSDUMMY1;\db2(cont.)=>ENDDB20000ISQL命令成功完成。Db2=>callHelloWorld返回状态=0db2=>select*fromtest_helloworldDATAHelloWorld1条记录已选择。SQLServer1>2>BEGINPRINT‘HelloWorld’;4>END;5>goHelloWorldMySQL暂不支持匿名的BEGINEND只能通过mysql>DELIMITER//mysql>CREATEPROCEDUREHelloWorld()->BEGIN->SELECT‘HelloWorld’;->END//QueryOK,0rowsaffected(0.00sec)mysql>callHelloWorld();//++|HelloWorld|++|HelloWorld|++1rowinset(0.00sec)QueryOK,0rowsaffected(0.00sec)注:如果HelloWorld都失败,那么首先需要检查数据库的存储引擎mysql>showvariableslike'%storage_engine%';+++|Variable_name|Value|+++|storage_engine|MyISAM|+++1rowinset(0.00sec)存储引擎为InnoDB的数据库,能使用存储过程。mysql>showvariableslike'%storage_engine%';+++|Variable_name|Value|+++|storage_engine|InnoDB|+++1rowinset(0.01sec)

变量定义与赋值OracleSQL>DECLARE2testvalue1VARCHAR2(20);3testvalue2VARCHAR2(20);4BEGIN5testvalue1:='FirstTest!';6SELECT'SecondTest!'INTOtestvalue2FROMDUAL;7dbms_output.put_line(testvalue1||testvalue2);8END;9/FirstTest!SecondTest!PL/SQL过程已成功完成。DB2db2=>CREATEPROCEDUREFirstTest\db2(cont.)=>LANGUAGESQL\db2(cont.)=>BEGIN\db2(cont.)=>DECLAREtestvalueVARCHAR(20);\db2(cont.)=>SETtestvalue='FirstTest!';\db2(cont.)=>INSERTINTOtest_helloworldVALUES(testvalue);\db2(cont.)=>ENDDB20000ISQL命令成功完成。db2=>callFirstTest返回状态=0由于一不能print,二不能select,这里只要借用前面的测试表。Db2=>select*fromtest_helloworldDATAHelloWorldFirstTest!2条记录已选择。SQLServer1>DECLARE2>@testvalue1ASVARCHAR(20),3>@testvalue2ASVARCHAR(20);4>BEGIN5>SET@testvalue1='FirstTest!';6>SELECT@testvalue2='SecondTest!';7>PRINT(@testvalue1+@testvalue2);8>END;9>goFirstTest!SecondTest!MySQLmysql>DELIMITER//mysql>CREATEPROCEDUREFirstTest()->BEGIN->DECLAREtestvalueVARCHAR(20);->SETtestvalue=‘FirstTest!’;->SELECTtestvalue;->END//QueryOK,0rowsaffected(0.03sec)mysql>callFirstTest()//++|testvalue|++|FirstTest!|++1rowinset(0.00sec)QueryOK,0rowsaffected(0.00sec)MERGE语句OracleOracle9i开始支持MERGE语句Oracle的MERGE相对于SQLServer2008的MERGE。功能上,缺少一个WHENNOTMATCHEDBYSOURCE的情况。--源表CREATETABLEtest_from(idINT,valVARCHAR(20));--目标表CREATETABLEtest_to(idINT,valVARCHAR(20));--插入源表INSERTINTOtest_fromVALUES(1,'A');INSERTINTOtest_fromVALUES(2,'B');--合并源表到目标表MERGEINTOtest_toUSINGtest_fromON(test_to.id=test_from.id)--条件是id相同WHENMATCHEDTHENUPDATESETtest_to.val=test_from.val--匹配的时候,更新WHENNOTMATCHEDTHENINSERTVALUES(test_from.id,test_from.val)--源表有,目标表没有,插入--第一次检查目标表数据.SQL>SELECT*FROMtest_to;IDVAL1A2B--更新源表UPDATEtest_fromSETval='A2'WHEREid=1;--删除源表DELETEFROMtest_fromWHEREid=2;--插入源表INSERTINTOtest_fromVALUES(3,'C');--合并源表到目标表MERGEINTOtest_toUSINGtest_fromON(test_to.id=test_from.id)--条件是id相同WHENMATCHEDTHENUPDATESETtest_to.val=test_from.val--匹配的时候,更新WHENNOTMATCHEDTHENINSERTVALUES(test_from.id,test_from.val)--源表有,目标表没有,插入--再次检查目标表数据.SQL>SELECT*FROMtest_to;IDVAL1A22B3CDB2本处使用db2–t进入系统。--源表db2=>CREATETABLEtest_from(idINT,valVARCHAR(20));DB20000ISQL命令成功完成。--目标表db2=>CREATETABLEtest_to(idINT,valVARCHAR(20));DB20000ISQL命令成功完成。--插入源表db2=>INSERTINTOtest_fromVALUES(1,'A');DB20000ISQL命令成功完成。db2=>INSERTINTOtest_fromVALUES(2,'B');DB20000ISQL命令成功完成。--合并源表到目标表MERGEINTOtest_toUSINGtest_fromON(test_to.id=test_from.id)--条件是id相同WHENMATCHEDTHENUPDATESETtest_to.val=test_from.val--匹配的时候,更新WHENNOTMATCHEDTHENINSERTVALUES(test_from.id,test_from.val)--源表有,目标表没有,插入;--第一次检查目标表数据.db2=>SELECT*FROMtest_to;IDVAL1A2B2条记录已选择。db2=>--更新源表db2=>UPDATEtest_fromSETval='A2'WHEREid=1;DB20000ISQL命令成功完成。db2=>--删除源表db2=>DELETEFROMtest_fromWHEREid=2;DB20000ISQL命令成功完成。db2=>--插入源表db2=>INSERTINTOtest_fromVALUES(3,'C');DB20000ISQL命令成功完成。再次执行mergeMERGEINTOtest_toUSINGtest_fromON(test_to.id=test_from.id)--条件是id相同WHENMATCHEDTHENUPDATESETtest_to.val=test_from.val--匹配的时候,更新WHENNOTMATCHEDTHENINSERTVALUES(test_from.id,test_from.val)--源表有,目标表没有,插入;db2=>--再次检查目标表数据.db2=>SELECT*FROMtest_to;IDVAL1A22B3C3条记录已选择。SQLServerSQLServer2008开始支持MERGE语句--源表CREATETABLEtest_from(idINT,valVARCHAR(20));--目标表CREATETABLEtest_to(idINT,valVARCHAR(20));--插入源表INSERTINTOtest_fromVALUES(1,'A');INSERTINTOtest_fromVALUES(2,'B');--合并源表到目标表MERGEtest_toUSINGtest_fromON(test_to.id=test_from.id)--条件是id相同WHENMATCHEDTHENUPDATESETtest_to.val=test_from.val--匹配的时候,更新WHENNOTMATCHEDTHENINSERTVALUES(test_from.id,test_from.val)--源表有,目标表没有,插入WHENNOTMATCHEDBYSOURCETHENDELETE;--目标表有,源表没有,目标表该数据删除.--第一次检查目标表数据.SELECT*FROMtest_to;idval1A2B--更新源表UPDATEtest_fromSETval='A2'WHEREid=1;--删除源表DELETEFROMtest_fromWHEREid=2;--插入源表INSERTINTOtest_fromVALUES(3,'C');--合并源表到目标表MERGEtest_toUSINGtest_fromON(test_to.id=test_from.id)--条件是id相同WHENMATCHEDTHENUPDATESETtest_to.val=test_from.val--匹配的时候,更新WHENNOTMATCHEDTHENINSERTVALUES(test_from.id,test_from.val)--源表有,目标表没有,插入WHENNOTMATCHEDBYSOURCETHENDELETE;--目标表有,源表没有,目标表该数据删除.--再次检查目标表数据.SELECT*FROMtest_to;idval1A23C两表UPDATE处理--源表CREATETABLEtest_from(idINT,valVARCHAR(20));--目标表CREATETABLEtest_to(idINT,valVARCHAR(20));--插入源表INSERTINTOtest_fromVALUES(1,'A');INSERTINTOtest_fromVALUES(2,'B');--插入目标表INSERTINTOtest_toSELECT*FROMtest_from;--更新源表UPDATEtest_fromSETval='AAA'WHEREid=1;Oracle同步更新到目标表.SQL>UPDATE2test_to3SET4test_to.val=5(SELECT6test_from.val7FROM8test_from9WHERE10test_to.id=test_from.id11);2rowsupdated.SQL>select*fromtest_to;IDVAL1AAA2BDB2(同Oracle)db2=>UPDATEdb2(cont.)=>test_todb2(cont.)=>SETdb2(cont.)=>test_to.val=db2(cont.)=>(SELECTdb2(cont.)=>test_from.valdb2(cont.)=>FROMdb2(cont.)=>test_fromdb2(cont.)=>WHEREdb2(cont.)=>test_to.id=test_from.iddb2(cont.)=>);DB20000ISQL命令成功完成。db2=>select*fromtest_to;IDVAL1AAA2B2条记录已选择。SQLServer同步更新到目标表.1>UPDATE2>test_to3>SET4>test_to.val=test_from.val5>FROM6>test_toJOINtest_from7>ON(test_to.id=test_from.id);8>go(2行受影响)1>SELECT*FROMtest_to;2>goidval1AAA2B(2行受影响)MySQL(同Oracle)mysql>UPDATE->test_to->SET->test_to.val=->(SELECT->test_from.val->FROM->test_from->WHERE->test_to.id=test_from.id->);QueryOK,1rowaffected(0.03sec)Rowsmatched:2Changed:1Warnings:0mysql>select*fromtest_to;+++|id|val|+++|1|AAA||2|B|+++2rowsinset(0.00sec)

数据类型数字类型Oracle基本类型为NUMBER(P,S)P范围1到38S范围-84到127以下为与ANSISQL兼容而使用:FLOAT浮点数REAL单精度浮点数DOUBLEPRECISION双精度浮点数NUMERICDECIMAL小数INTEGERINT整数SMALLINT小整数BINARY_FLOAT浮点数Oracle10gR1以后。6位精度,5字节BINARY_DOUBLE浮点数Oracle10gR1以后,13位精度,9字节DB2整数:SMALLINT、INTEGER和BIGINT用来存储整数。例如,库存数量可以定义为INTEGER。SMALLINT可以在2个字节中存储从-32,768到32,767的整数。INTEGER可以在4个字节中存储从-2,147,483,648到2,147,483,647的整数。BIGINT可以在8个字节中存储从-9,223,372,036,854,775,808到9,223,372,036,854,775,807的整数。小数:DECIMAL用来存储有小数部分的数字。要定义这个数据类型,需要指定精度(p,表示总的位数)和小数位(s,表示小数点右边的位数)。定义为DECIMAL(10,2)的列可以保存的金额最高可为99999999.99。数据库中需要的存储空间依赖于精度,按照公式p/2+1计算。所以DECIMAL(10,2)需要10/2+1(即6)字节。浮点数:REAL和DOUBLE用来存储数字的近似值。例如,非常小或非常大的科学计量值可以定义为REAL。REAL可以定义为具有1到24位之间的长度,需要4字节的存储空间。DOUBLE可以定义为具有25到53位之间的长度,需要8字节的存储空间。FLOAT可以视为REAL或DOUBLE的同义词。SQLServerbit整型其值只能是0、1或空值。int整型-2的31次方到2的31次方smallint整型-2的15次方到2的15次方tinyint0到255之间的整数numericdecimal精确数值型从-10的38次方-1,到10的38次方-1money数据类型用来表示钱和货币值。这种数据类型能存储从-9220亿到9220亿之间的数据,精确到货币单位的万分之一smallmoney存储从-214748.3648到214748.3647之间的数据,精确到货币单位的万分之一float浮点数real浮点数MySQLBIT[(M)]位字段类型。M表示每个值的位数,范围为从1到64。如果M被省略,默认为1。·TINYINT[(M)][UNSIGNED][ZEROFILL]很小的整数。带符号的范围是-128到127。无符号的范围是0到255。·BOOL,BOOLEAN是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。在将来,将根据标准SQL引入完全布尔类型的处理。·SMALLINT[(M)][UNSIGNED][ZEROFILL]小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。·MEDIUMINT[(M)][UNSIGNED][ZEROFILL]中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。·INT[(M)][UNSIGNED][ZEROFILL]普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。·INTEGER[(M)][UNSIGNED][ZEROFILL]这是INT的同义词。·BIGINT[(M)][UNSIGNED][ZEROFILL]大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。应清楚BIGINT列的下述内容:o使用带符号的BIGINT或DOUBLE值进行所有算法,因此除了位函数,不应使用大于9223372036854775807(63位)的无符号的大整数!如果这样做,结果中的最后几位可能出错,这是由于将BIGINT值转换为DOUBLE进行四舍五入时造成的错误。MySQL可以在以下情况下处理BIGINT:§当使用整数在一个BIGINT列保存大的无符号的值时。§在MIN(col_name)或MAX(col_name)中,其中col_name指BIGINT列。§使用操作符(+,-,*等等)并且两个操作数均为整数时。o总是可以使用一个字符串在BIGINT列中保存严格整数值。在这种情况下,MySQL执行字符串-数字转换,其间不存在双精度表示。o当两个操作数均为整数值时,-、+和*操作符使用BIGINT算法。这说明如果乘两个大整数(或来自返回整数的函数),当结果大于9223372036854775807时,会得到意想不到的结果。·FLOAT[(M,D)][UNSIGNED][ZEROFILL]小(单精度)浮点数。允许的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。这些是理论限制,基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。M是小数纵位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位。如果指定UNSIGNED,不允许负值。使用浮点数可能会遇到意想不到的问题,因为在MySQL中的所有计算用双精度完成。参见A.5.7节,“解决与不匹配行有关的问题”。·DOUBLE[(M,D)][UNSIGNED][ZEROFILL]普通大小(双精度)浮点数。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E+308。这些是理论限制,基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。M是小数总位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。双精度浮点数精确到大约15位小数位。如果指定UNSIGNED,不允许负值。·DOUBLEPRECISION[(M,D)][UNSIGNED][ZEROFILL],REAL[(M,D)][UNSIGNED][ZEROFILL]为DOUBLE的同义词。除了:如果SQL服务器模式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而不是DOUBLE的同义词。·FLOAT(p)[UNSIGNED][ZEROFILL]浮点数。p表示精度(以位数表示),但MySQL只使用该值来确定是否结果列的数据类型为FLOAT或DOUBLE。如果p为从0到24,数据类型变为没有M或D值的FLOAT。如果p为从25到53,数据类型变为没有M或D值的DOUBLE。结果列范围与本节前面描述的单精度FLOAT或双精度DOUBLE数据类型相同。FLOAT(p)语法与ODBC兼容。·DECIMAL[(M[,D])][UNSIGNED][ZEROFILL]压缩的“严格”定点数。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。小数点和(负数)的‘-’符号不包括在M中。如果D是0,则值没有小数点或分数部分。DECIMAL整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。如果D被省略,默认是0。如果M被省略,默认是10。如果指定UNSIGNED,不允许负值。所有DECIMAL列的基本计算(+,-,*,/)用65位精度完成。·DEC[(M[,D])][UNSIGNED][ZEROFILL],NUMERIC[(M[,D])][UNSIGNED][ZEROFILL],FIXED[(M[,D])][UNSIGNED][ZEROFILL]是DECIMAL的同义词。FIXED同义词适用于与其它服务器的兼容性。SQLiteINTINTEGERTINYINTSMALLINTMEDIUMINTBIGINTUNSIGNEDBIGINTINT2INT8内部都按照INTEGER来处理。REALDOUBLEDOUBLEPRECISIONFLOAT内部都按照REAL来处理。NUMERICDECIMAL(10,5)BOOLEANDATEDATETIME内部都按照NUMERIC来处理。

字符类型OracleCHAR定长字符串,最长2000字节NCHAR定长字符串,存储的数据为NLS字符VARCHAR2变长字符串,最长4000字节NVARCHAR2变长字符串,存储的数据为NLS字符LONG最大存储2G字符数据不推荐使用(改用CLOB)CLOBOracle9i及以前,最大4G字符数据Oracle10g最大4G*数据库块大小的字符数据NCLOB基本同CLOB,就是存储的数据为NLSDB2CHAR或CHARACTER用来存储最多254字节的固定长度的字符串。例如,制造商可以给零件分配一个8字符长度的标识符,因此这些标识符在数据库中存储为CHAR(8)类型的列。VARCHAR用来存储可变长度的字符串。例如,制造商用不同长度的标识符表示大量零件,因此这些标识符存储为VARCHAR(100)类型的列。VARCHAR列的最大长度为32,672字节。在数据库中,VARCHAR数据只占用恰好所需的空间。下面的数据类型用来存储双字节字符串:GRAPHIC用来存储固定长度的双字节字符串。GRAPHIC列的最大长度是127个字符。VARGRAPHIC用来存储可变长度的双字节字符串。VARGRAPH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论