??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲精品线观看动态图,亚洲福利中文字幕在线网址,亚洲无码精品浪潮http://www.tkk7.com/hhhaaawwwkkk/archive/2011/09/15/358680.html生命的熾?/dc:creator>生命的熾?/author>Thu, 15 Sep 2011 02:35:00 GMThttp://www.tkk7.com/hhhaaawwwkkk/archive/2011/09/15/358680.htmlhttp://www.tkk7.com/hhhaaawwwkkk/comments/358680.htmlhttp://www.tkk7.com/hhhaaawwwkkk/archive/2011/09/15/358680.html#Feedback0http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/358680.htmlhttp://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/358680.htmlOracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit)
http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.zip
http://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.zip
http://download.oracle.com/otn/nt/oracle10g/10201/10201_clusterware_win32.zip
http://download.oracle.com/otn/nt/oracle10g/10201/10201_gateways_win32.zip

Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (x64)

http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_database.zip
http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_client.zip
http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_clusterware.zip

Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86

http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux32.zip
http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.zip
http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux32.zip

Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86-64

http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux_x86_64.cpio.gz
http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gz
http://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux_x86_64.cpio.gz
http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux_x86_64.cpio.gz

Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for AIX5L

http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_database.cpio.gz
http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_client.cpio.gz
http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_cluster.cpio.gz
http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_gateways.cpio.gz

Oracle Database 10g Release 2 (10.2.0.2) Enterprise/Standard Edition for Solaris Operating System (x86)

http://download.oracle.com/otn/solaris/oracle10g/10202/10202_database_solx86.zip
http://download.oracle.com/otn/solaris/oracle10g/10202/10202_client_solx86.zip
http://download.oracle.com/otn/solaris/oracle10g/10202/10202_clusterware_solx86.zip

Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Solaris Operating System (x86-64)

http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_database_solx86_64.zip
http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_client_solx86_64.zip
http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_clusterware_solx86_64.zip

ShanShan112411730773@qq.com  

]]>
SQL Server创徏存储q程(?http://www.tkk7.com/hhhaaawwwkkk/archive/2009/09/19/295646.html生命的熾?/dc:creator>生命的熾?/author>Sat, 19 Sep 2009 02:38:00 GMThttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/09/19/295646.htmlhttp://www.tkk7.com/hhhaaawwwkkk/comments/295646.htmlhttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/09/19/295646.html#Feedback0http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/295646.htmlhttp://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/295646.html什么是存储q程Q?/p>

q       存储q程QprocedureQ类gC语言中的函数

q       用来执行理d或应用复杂的业务规则

q       存储q程可以带参敎ͼ也可以返回结?/p>

q       存储q程可以包含数据操纵语句、变量、逻辑 控制语句{?/p>

 

存储q程的优?/p>

(1)执行速度快?/p>

存储q程创徏是就已经通过语法查和性能优化Q在执行时无需每次~译?/p>

存储在数据库服务器,性能高?/p>

(2)允许模块化设计?/p>

只需创徏存储q程一ơƈ其存储在数据库中,以后卛_在程序中调用该过EQ意次。存储过E可由在数据库编E方面有专长的h员创建,q可独立于程序源代码而单独修??/p>

(3)提高pȝ安全性?/p>

    可将存储q程作ؓ用户存取数据的管道。可以限制用户对数据表的存取权限Q徏立特定的存储q程供用户用,完成Ҏ据的讉K?/p>

    存储q程的定义文本可以被加密Q用户不能查看其内宏V?/p>

(4)减少|络量Q?/p>

一个需要数百行Transact-SQL代码的操作由一条执行过E代码的单独语句可实现Q而不需要在|络中发送数百行代码?/p>

 

存储q程的分c?

q       pȝ存储q程

q       ql定义,存放在master数据库中

q       cMC语言中的pȝ函数

q       pȝ存储q程的名U都?#8220;sp_”开头或”xp_”开?/p>

q       用户自定义存储过E?/p>

q       q户在自己的数据库中创建的存储q程

q       cMC语言中的用户自定义函?/p>

 

常用的系l存储过E?

pȝ存储q程
 说明
 
sp_databases
 列出服务器上的所有数据库?br />  
sp_helpdb
 报告有关指定数据库或所有数据库的信?br />  
sp_renamedb
 更改数据库的名称
 
sp_tables
 q回当前环境下可查询的对象的列表
 
sp_columns
 回某个表列的信息
 
sp_help
 查看某个表的所有信?br />  
sp_helpconstraint
 查看某个表的U束
 
sp_helpindex
 查看某个表的索引
 
sp_stored_procedures
 列出当前环境中的所有存储过E?br />  
sp_password
 d或修改登录帐L密码?br />  
sp_helptext
 昄默认倹{未加密的存储过E、用户定义的存储q程、触发器或视囄实际文本?br />  

 

EXEC sp_databases /*列出当前pȝ中的数据?/

EXEC  sp_renamedb 'Northwind','Northwind1' /*修改数据库的名称(单用戯? 最单的办法是执行SQL语句时关掉企业管理器)*/

USE stuDB

GO

EXEC sp_tables /*当前数据库中查询的对象的列表*/

EXEC sp_columns stuInfo /*q回某个表列的信?/

EXEC sp_help stuInfo /*查看表stuInfo的信?/

EXEC sp_helpconstraint stuInfo /*查看表stuInfo的约?/

EXEC sp_helpindex stuMarks /*查看表stuMarks的烦?/

EXEC sp_helptext 'view_stuInfo_stuMarks' /*查看视图的语句文?/

EXEC sp_stored_procedures  /*查看当前数据库中的存储过E?/

 

常用的扩展存储过E?/p>

q       常用的扩展存储过E:xp_cmdshell

q       可以执行DOS命o下的一些的操作

q       以文本行方式q回M输出

q       调用语法Q?/p>

q         EXEC xp_cmdshell DOS命o [NO_OUTPUT]

USE master

GO

EXEC xp_cmdshell 'mkdir d:\bank', NO_OUTPUT /*创徏文g夹D:\bank*/

IF EXISTS(SELECT * FROM sysdatabases

                            WHERE name='bankDB')

   DROP DATABASE bankDB

GO

CREATE DATABASE bankDB

 (

  …

)

GO

EXEC xp_cmdshell 'dir D:\bank\' --查看文g /*查看文g夹D:\bank*/

 

如何创徏存储q程Q?/p>

q       定义存储q程的语?/p>

    CREATE  PROC[EDURE]  存储q程?

              @参数1  数据cd = 默认?

               …… ,

              @参数n  数据cd OUTPUT

            AS

            SQL语句

    GO

q       和C语言的函CP参数可?/p>

q       参数分ؓ输入参数、输出参?

q       输入参数允许有默认?/p>

 

创徏不带参数的存储过E?

CREATE PROCEDURE proc_stu /* proc_stu为存储过E的名称*/

  AS

    DECLARE @writtenAvg float,@labAvg float /* W试q_分和q_分变?*/

    SELECT @writtenAvg=AVG(writtenExam),

           @labAvg=AVG(labExam)  FROM stuMarks

    print 'W试q_分:'+convert(varchar(5),@writtenAvg) 

    print 'q_分:'+convert(varchar(5),@labAvg)

    IF (@writtenAvg>70 AND @labAvg>70)

       print '本班考试成WQ优U' /* 昄考试成W的等U?*/

    ELSE

       print '本班考试成WQ较?

    print '--------------------------------------------------'

    print '           参加本次考试没有通过的学员:'

    SELECT stuName,stuInfo.stuNo,writtenExam,labExam /* 昄未通过的学?*/

      FROM  stuInfo  INNER JOIN stuMarks ON 

          stuInfo.stuNo=stuMarks.stuNo

                 WHERE writtenExam<60 OR labExam<60

GO

 

调用存储q程

q       EXECUTEQ执行)语句用来调用存储q程

q       调用的语?/p>

              EXEC  q程?nbsp; [参数]

 

创徏带参数的存储q程

q       存储q程的参数分两种Q?/p>

q       输入参数

q       输出参数     

q       输入参数Q?/p>

    用于向存储过E传入|cMC语言的按g?

q       输出参数Q?/p>

    用于在调用存储过E后Q?/p>

    q回l果Q类似C语言?/p>

    按引用传?    

 

带输入参数的存储q程

问题Q?/p>

修改上例Q由于每ơ考试的难易程度不一P每次 W试和机试的及格U可能随时变化(不再?0分)Q这D考试的评判结果也相应变化?/p>

 

分析Q?/p>

在述存储q程d2个输入参敎ͼ

@writtenPass   W试及格U?

@labPass         及格U?

CREATE PROCEDURE proc_stu

  @writtenPass int = 60,  /*输入参数Q笔试及格线*/

  @labPass int = 60   /*输入参数Q机试及格线*/

  AS

    print '--------------------------------------------------'

    print '           参加本次考试没有通过的学员:'

    SELECT stuName,stuInfo.stuNo,writtenExam, /*查询没有通过考试的学?/

       labExam  FROM  stuInfo

          INNER JOIN stuMarks ON              

             stuInfo.stuNo=stuMarks.stuNo

                 WHERE writtenExam<@writtenPass

                                                  OR labExam<@labPass

GO

q       调用带参数的存储q程

    假定本次考试偏难Q机试的及格U定?5分,W试及格U定?0?/p>

EXEC proc_stu 60,55 

--或这栯用:

EXEC proc_stu @labPass=55,@writtenPass=60

 

带输出参数的存储q程

q       如果希望调用存储q程后,q回一个或多个|q时需要用输出(OUTPUTQ参C

问题Q?/p>

修改上例Q返回未通过考试的学员h数?/p>

CREATE PROCEDURE proc_stu

  @notpassSum int OUTPUT, /*输出Q返回)参数Q表C没有通过的h?/

  @writtenPass int=60,   /*推荐默认参数放在最?/

  @labPass int=60 

  AS

    ……

     SELECT stuName,stuInfo.stuNo,writtenExam, /*l计q返回没有通过考试的学员h?/

        labExam FROM  stuInfo   INNER JOIN stuMarks

          ON stuInfo.stuNo=stuMarks.stuNo

            WHERE writtenExam<@writtenPass

              OR labExam<@labPass

    SELECT @notpassSum=COUNT(stuNo)

       FROM stuMarks  WHERE writtenExam<@writtenPass

           OR labExam<@labPass

GO

q       调用带输出参数的存储q程

/*---调用存储q程----*/

DECLARE @sum int /*调用时必dOUTPUT关键?Q返回结果将存放在变量@sum?/

EXEC proc_stu @sum OUTPUT ,64 

print '--------------------------------------------------'

IF @sum>=3 /*后箋语句引用q回l果*/

  print '未通过人数Q?+convert(varchar(5),@sum)+ '?

        过60%,及格分数U还应下?

ELSE

  print '未通过人数Q?+convert(varchar(5),@sum)+ '?

        已控制在60%以下Q及格分数线适中'

GO

注意Q调用时也必跟随关键字OUTPUTQ否则SQL Server视入参数?/p>

 

处理存储q程中的错误

q       可以使用PRINT语句昄错误信息Q但q?些信息是临时的,只能昄l用?

q       RAISERROR 昄用户定义的错误信息时

q       可指定严重别,

q       讄pȝ变量@@ERROR

q       记录所发生的错误等

q       RAISERROR语句的用法如下:

RAISERROR (msg_id | msg_str,severity,

   state WITH option[,...n]])

•          msg_idQ在sysmessagespȝ表中指定用户定义错误信息

•          msg_strQ用户定义的特定信息Q最?55个字W?/p>

•          severityQ定义严重性别。用户可使用的别ؓ0–18U?/p>

•          stateQ表C错误的状态,1?27之间的?/p>

•          optionQ指C是否将错误记录到服务器错误日志?

RAISERROR 语句每个参数的详l讲解,可以查阅SQL帮助!

问题Q?/p>

完善上例Q当用户调用存储q程Ӟ传入的及格线参数?/p>

??00之间Ӟ弹出错误警告,l止存储q程的执行?

CREATE PROCEDURE proc_stu

  @notpassSum int OUTPUT, --输出参数

  @writtenPass int=60,  --默认参数攑֐

  @labPass int=60       --默认参数攑֐

  AS

    IF (NOT @writtenPass BETWEEN 0 AND 100)

             OR (NOT @labPass BETWEEN 0 AND 100)

/*引发pȝ错误Q指定错误的严重U别16Q调用状态ؓ1Q默认),q媄响@@ERRORpȝ变量的?*/

       BEGIN

         RAISERROR (‘及格UK误,h?Q?00之间的分

                     敎ͼl计中断退?,16,1)

         RETURN  ---立即q回Q退出存储过E?/p>

       END

    …..其他语句同上例,?/p>

GO

/*---调用存储q程Q测试RAISERROR语句----*/

DECLARE @sum int,  @t int

EXEC proc_stu @sum OUTPUT ,604   /*W试及格U误输入604?/

SET @t=@@ERROR

print  '错误P'+convert(varchar(5),@t )

IF @t<>0  /*如果执行了RAISERRORQ系l全局@@ERROR不{于0Q表C出现错?/

   RETURN  --退出批处理Q后l语句不再执?/p>

print '--------------------------------------------------'

IF @sum>=3

  print '未通过人数Q?+convert(varchar(5),@sum)+ '?过60%,及格分数U还应下?

ELSE

  print '未通过人数Q?+convert(varchar(5),@sum)+ '?已控制在60%以下Q及格分数线适中'

GO

 

好,我们来做个ȝQ?/p>

•          存储q程是一l预~译的SQL语句Q它可以包含数据操纵语句、变量、逻辑控制语句{?

•          存储q程允许带参敎ͼ参数分ؓQ?/p>

–         输入参数

–         输出参数

   其中Q输入参数可以有默认倹{?/p>

•          输入参数Q可以在调用时向存储q程传递参敎ͼ此类参数可用来向存储q程中传入?

•          输出参数从存储过E中q回Q输出)|后面跟随OUTPUT关键?/p>

•          RAISERROR语句用来向用h告错?/p>

 

本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/lenotang/archive/2008/11/18/3329593.aspx



]]>
Oracle10G 如何解除scott用户的锁定状?/title><link>http://www.tkk7.com/hhhaaawwwkkk/archive/2009/07/03/285286.html</link><dc:creator>生命的熾?/dc:creator><author>生命的熾?/author><pubDate>Fri, 03 Jul 2009 01:53:00 GMT</pubDate><guid>http://www.tkk7.com/hhhaaawwwkkk/archive/2009/07/03/285286.html</guid><wfw:comment>http://www.tkk7.com/hhhaaawwwkkk/comments/285286.html</wfw:comment><comments>http://www.tkk7.com/hhhaaawwwkkk/archive/2009/07/03/285286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/285286.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/285286.html</trackback:ping><description><![CDATA[<div>问题描述Q?br />     新装完Oracle10g后,用scott/tiger试Q会出现以下错误提示Q?br />     oracle10g the account is locked<br />     oracle10g the password has expired<br />  <br /> 原因Q默认Oracle10g的scott不能登陆?br />  <br /> 解决Q?br /> Q?Qconn sys/sys as sysdba;//以DBA的n份登?br /> Q?Qalter user scott account unlock;// 然后解锁<br /> Q?Qconn scott/tiger //弹出一个修改密码的对话框,修改一下密码就可以?/div> <div> </div> <div>具体操作步骤如下Q?/div> <div>C:> sqlplus</div> <div>误入用户名Qsys</div> <div>输入口oQsys as sysdba //注意Q在口oq里输入的密码后面必要跟上 as sysdba 才可以?br /> SQL> alter user scott account unlock;<br />      用户已更?<br /> SQL> commit;<br />      提交完成.<br /> SQL> conn scott/tiger</div> <div>更改scott口o</div> <div>新口令:tiger</div> <div>重新键入新口令:tiger</div> <div>口o已更?/div> <div>已连接?/div> <div>//完成?/div><img src ="http://www.tkk7.com/hhhaaawwwkkk/aggbug/285286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hhhaaawwwkkk/" target="_blank">生命的熾?/a> 2009-07-03 09:53 <a href="http://www.tkk7.com/hhhaaawwwkkk/archive/2009/07/03/285286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 创徏表空间、用戗表http://www.tkk7.com/hhhaaawwwkkk/archive/2009/07/02/285175.html生命的熾?/dc:creator>生命的熾?/author>Thu, 02 Jul 2009 06:46:00 GMThttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/07/02/285175.htmlhttp://www.tkk7.com/hhhaaawwwkkk/comments/285175.htmlhttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/07/02/285175.html#Feedback0http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/285175.htmlhttp://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/285175.html 

----创徏表空?/span>
create tablespace test_tableSpace
datafile 
'D:\oracleDatabase\db\test_tableSpace.dbf' 
size 200M
default storage
(initial 200m
next 50m
minextents 
20
maxextents 
500)
online;  

----删除表空?/span>

DROP TABLESPACE test_tableSpace INCLUDING CONTENTS AND DATAFILES 

----创徏用户Q)

CREATE USER shanshan PROFILE DEFAULT IDENTIFIED BY shanshan DEFAULT 
TABLESPACE test_tablespace 
TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;

----l用户分配权限(shanshan用户名)

grant connect,resource to shanshan;
q样可以登录了?br /> 用PL/SQL Developerd
Username Qshanshan
password Qshanshan
database Qzzn
connect as Qnormal

----创徏数据?/span>
create table test_user( 
first_name 
varchar2(15), 
last_name 
varchar2(20
);

----插入一条记?/span>
insert into test_user values ('zhao','zhaonan');


----查询记录
select * from test_user;


]]>
SQL Server 2005 插入varcharcd的中文出Cؕ?/title><link>http://www.tkk7.com/hhhaaawwwkkk/archive/2009/06/23/283832.html</link><dc:creator>生命的熾?/dc:creator><author>生命的熾?/author><pubDate>Tue, 23 Jun 2009 13:44:00 GMT</pubDate><guid>http://www.tkk7.com/hhhaaawwwkkk/archive/2009/06/23/283832.html</guid><wfw:comment>http://www.tkk7.com/hhhaaawwwkkk/comments/283832.html</wfw:comment><comments>http://www.tkk7.com/hhhaaawwwkkk/archive/2009/06/23/283832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/283832.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/283832.html</trackback:ping><description><![CDATA[<p> </p> <p>1Q安装时不要?Hide advice configuration  options。然后再 Collation designator and order  中选择 Chinese_PRC </p> <p>2Q在时指明某个字D늚语言</p> <p>Ҏ COLLATE Chinese_PRC_CS_AS_WS</p> <p>CZQ?/p> <p>create table test<br /> (<br /> a varchar(255) COLLATE Chinese_PRC_CS_AS_WS NULL, <br /> b varchar(255) COLLATE sql_latin1_general_cp1_ci_as NULL <br /> )<br /> <br /> insert test values('中文','中文')</p> <p>插入?字段 a ?中文 Qb ???<br /> <br /> 3Q修Ҏ据库的排序方法ؓChinese_PRC_CI_ASQ将Varcharcd讄为nvarcharcdQ?br /> <br /> </p><img src ="http://www.tkk7.com/hhhaaawwwkkk/aggbug/283832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hhhaaawwwkkk/" target="_blank">生命的熾?/a> 2009-06-23 21:44 <a href="http://www.tkk7.com/hhhaaawwwkkk/archive/2009/06/23/283832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle db_link 和触发器实现不同数据库表的同?/title><link>http://www.tkk7.com/hhhaaawwwkkk/archive/2009/05/06/269251.html</link><dc:creator>生命的熾?/dc:creator><author>生命的熾?/author><pubDate>Wed, 06 May 2009 07:45:00 GMT</pubDate><guid>http://www.tkk7.com/hhhaaawwwkkk/archive/2009/05/06/269251.html</guid><wfw:comment>http://www.tkk7.com/hhhaaawwwkkk/comments/269251.html</wfw:comment><comments>http://www.tkk7.com/hhhaaawwwkkk/archive/2009/05/06/269251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/269251.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/269251.html</trackback:ping><description><![CDATA[<p>---创徏dblink,dblink_test名称Q(被同步数据库的a_testQST10766用户名,ep密码Qass100q接字符?br /> create public database link dblink_test<br />    connect to ST10766 identified by ep <br />    using 'ass100';</p> <p>---删除dblink<br /> ----drop public database link dblink_test;</p> <p>----建立?br /> create table a_test (id int,name varchar(20),pass varchar(20))<br /> select * from a_test;</p> <p>insert into a_test (id,name,pass) values (1,'zzn','shanshan')<br /> insert into b_test (id,username,password) values('1','zxl','xiaolan')</p> <p>----在目的数据库上,试dblinkQ查询的是源数据库的?br /> select * from a_test@dblink_orc10;  <br /> select * from a_test;</p> <p>----创徏触发?/p> <p>create or replace trigger a_b_test<br />   after  insert or update or delete <br />   on a_test<br />   for each row<br /> begin<br />   if deleting then<br />       delete from b_test where id=:old.id;<br />   end if;<br />   if inserting then<br />       insert into b_test(id,username,password)  //b_test表的字段<br />       values(:new.id,:new.name,:new.pass); //a_test表的字段<br />   end if;<br />   if updating then<br />      update b_test set username=:new.name,password=:new.pass where id=:old.id;<br />   end if;<br /> end a_b_test;</p><img src ="http://www.tkk7.com/hhhaaawwwkkk/aggbug/269251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hhhaaawwwkkk/" target="_blank">生命的熾?/a> 2009-05-06 15:45 <a href="http://www.tkk7.com/hhhaaawwwkkk/archive/2009/05/06/269251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]oracle数据库同步技?http://www.tkk7.com/hhhaaawwwkkk/archive/2009/04/28/267823.html生命的熾?/dc:creator>生命的熾?/author>Tue, 28 Apr 2009 00:35:00 GMThttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/04/28/267823.htmlhttp://www.tkk7.com/hhhaaawwwkkk/comments/267823.htmlhttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/04/28/267823.html#Feedback0http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/267823.htmlhttp://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/267823.htmloracle数据库同步技?

高复制
什么是复制Q简单地说复制就是在׃个或者多个数据库pȝ构成的一个分布式数据库环境中拯数据的过E?br />        高复制Q是在组成分布式数据库系l的多个数据库中复制和维护数据库对象的过E?Oracle 高复制允许应用E序更新数据库的M副本Qƈ这些更改自动传递到其他数据库,同时保全局事务处理的一致性和数据完整性?br />        同步复制Q复制数据在M旉在Q何复制节点均保持一致。如果复制环境中的Q何一个节点的复制数据发生了更新操作,q种变化会立d映到其他所有的复制节点。这U技术适用于那些对于实时性要求较高的商业应用中?br />        异步复制Q所有复制节点的数据在一定时间内是不同步的。如果复制环境中的其中的一个节点的复制数据发生了更新操作,q种改变在不同的事务中被传播和应用到其他所有复制节炏V这些不同的事务间可以间隔几U,几分U,几小Ӟ也可以是几天之后。复制节点之间的数据临时是不同步的,但传播最l将保证所有复制节炚w的数据一致?
一、实现数据库复制的前提条?/span>  
1、数据库支持高复制功能  
您可以用systemw䆾d数据库,查看v$option视图Q如果其中Advanced replication为TRUEQ则支持高复制功能Q否则不支持?nbsp; 
2、数据库初始化参数要?/strong>  
①、db_domain = test.com.cn  
指明数据库的域名(默认的是WORLD)Q这里可以用您公司的域名?nbsp; 
②、global_names = true  
它要求数据库链接(database link)和被q接的数据库名称一致?nbsp; 
现在全局数据库名Qdb_name+”.”+db_domain  
③、有跟数据库job执行有关的参?nbsp; 
job_queue_processes = 1  
job_queue_interval = 60  
distributed_transactions = 10  
open_links = 4  
W一行定义SNPq程的启动个Cؓn。系l缺省gؓ0Q正常定义范围ؓ0?6Q根据Q务的多少Q可以配|不同的数倹{?nbsp; 
W二行定义系l每隔NU唤醒该q程一ơ。系l缺省gؓ60U,正常范围??600U。事实上Q该q程执行完当前Q务后Q就q入睡眠状态,睡眠一D|间后Q由pȝ的L负责其唤醒?nbsp; 
如果修改了以上这几个参数Q需要重新启动数据库以参数生效?nbsp; 
二、实现数据库同步复制的步?nbsp; 
假设在Internet上我们有两个数据库:一个叫深圳(shenzhen)Q一个叫北京(beijing)?nbsp; 
具体配置见下表:  
数据库名 shenzhen beijing  
数据库域?test.com.cn test.com.cn  
数据库sid?shenzhen beijing  
Listener端口?1521 1521  
服务器ip地址 10.1.1.100 10.1.1.200  
  
1、确认两台数据库之间可以互相讉KQ在tnsnames.ora里设|数据库q接字符丌Ӏ?/strong>  
①、例如:深圳q边的数据库q接字符串是以下的格?nbsp; 
beijing =  
(DESCRIPTION =  
(ADDRESS_LIST =  
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.200)(PORT = 1521))  
)  
(CONNECT_DATA =  
(SERVICE_NAME = beijing)  
)  
)  
q行$tnsping beijing  
出现以下提示W:  
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))  
OKQn毫秒Q?nbsp; 
表明深圳数据库可以访问北京数据库?nbsp; 
②、在北京那边也同样配|,认$tnsping shenzhen 是通的?nbsp; 
2、改数据库全局名称Q徏公共的数据库链接?/strong>  
①、用systemw䆾dshenzhen数据?nbsp; 
SQL>alter database rename global_name to shenzhen.test.com.cn;  
用systemw䆾dbeijing数据库:  
SQL>alter database rename global_name to beijing.test.com.cn;  
②、用systemw䆾dshenzhen数据?nbsp; 
SQL>create public database link beijing.test.com.cn using 'beijing';  
试数据库全局名称和公q数据库链?nbsp; 
SQL>select * from global_name@beijing.test.com.cn;  
q回l果为beijing.test.com.cn对了?nbsp; 
用systemw䆾dbeijing数据库:  
SQL>create public database link shenzhen.test.com.cn using 'shenzhen';  
试数据库全局名称和公q数据库链?nbsp; 
SQL>select * from global_name@shenzhen.test.com.cn;  
q回l果为shenzhen.test.com.cn对了?nbsp; 
3、徏立管理数据库复制的用户repadminQƈ赋权?/strong>  
①、用systemw䆾dshenzhen数据?nbsp; 
SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp;  
SQL>execute dbms_defer_sys.register_propagator('repadmin');  
SQL>grant execute any procedure to repadmin;  
SQL>execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');  
SQL>grant comment any table to repadmin;  
SQL>grant lock any table to repadmin;  
②、同Lsystemw䆾dbeijing数据库,q行以上的命令,理数据库复制的用户repadminQƈ赋权?nbsp; 
说明Qrepadmin用户名和密码可以Ҏ用户的需求自由命名?nbsp; 
4、在数据库复制的用户repadmin下创建私有的数据库链接?/strong>  
①、用repadminw䆾dshenzhen数据?nbsp; 
SQL>create database link beijing.test.com.cn connect to repadmin identified by repadmin;  
试q个U有的数据库链接Q?nbsp; 
SQL>select * from global_name@beijing.test.com.cn;  
q回l果为beijing.test.com.cn对了?nbsp; 
②、用repadminw䆾dbeijing数据?nbsp; 
SQL>create database link shenzhen.test.com.cn connect to repadmin identified by repadmin;  
试q个U有的数据库链接  
SQL>select * from global_name@shenzhen.test.com.cn;  
q回l果为shenzhen.test.com.cn对了?nbsp; 
5、创建或选择实现数据库复制的用户和对象,l用戯权,数据库对象必Ld键字?/strong>  
假设我们用ORACLE里D例用的scott用户Qdept表?nbsp; 
①、用internalw䆾dshenzhen数据库,创徏scott用户q赋?nbsp; 
SQL>create user scott identified by tiger default tablespace users temporary tablespace temp;  
SQL>grant connect, resource to scott;  
SQL>grant execute on sys.dbms_defer to scott;  
②、用scottw䆾dshenzhen数据库,创徏表dept  
SQL>create table dept  
(deptno number(2) primary key,  
dname varchar2(14),  
loc varchar2(13) );  
③、如果数据库对象没有d键字Q可以运行以下SQL命odQ?nbsp; 
SQL>alter table dept add (constraint dept_deptno_pk primary key (deptno));  
④、在shenzhen数据库scott用户下创Z关键字的序列P范围避免和beijing的冲H?nbsp; 
SQL> create sequence dept_no increment by 1 start with 1 maxvalue 44 cycle nocache;  
(说明Qmaxvalue 44可以Ҏ应用E序及表l构d键字定义的位数需要而定)  
⑤、在shenzhen数据库scott用户下插入初始化数据  
SQL>insert into dept values (dept_no.nextval,'accounting','new york');  
SQL>insert into dept values (dept_no.nextval,'research','dallas');  
SQL>commit;  
⑥、在beijing数据库那边同栯行以?#9312;Q?#9313;Q?#9314;  
⑦、在beijing数据库scott用户下创Z关键字的序列P范围避免和shenzhen的冲H?nbsp; 
SQL> create sequence dept_no increment by 1 start with 45 maxvalue 99 cycle nocache;  
⑧、在beijing数据库scott用户下插入初始化数据  
SQL>insert into dept values (dept_no.nextval,'sales','chicago');  
SQL>insert into dept values (dept_no.nextval,'operations','boston');  
SQL>commit;  
6、创复制的组scott_mgQ加入数据库对象Q生对象的复制支持  
①、用repadminw䆾dshenzhen数据库,创徏d制组scott_mg  
SQL> execute dbms_repcat.create_master_repgroup('scott_mg');  
说明Qscott_mgl名可以Ҏ用户的需求自由命名?nbsp; 
②、在复制lscott_mg里加入数据库对象  
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'dept', type=>'table',use_existing_object=>true,gname=>'scott_mg');  
参数说明Q?nbsp; 
sname 实现数据库复制的用户名称  
oname 实现数据库复制的数据库对象名U?nbsp; 
(表名长度?7个字节内Q程序包名长度在24个字节内)  
type 实现数据库复制的数据库对象类?nbsp; 
(支持的类别:表,索引Q同义词Q触发器Q视图,q程Q函敎ͼE序包,E序包体)  
use_existing_object true表示用主复制节点已经存在的数据库对象  
gname d制组?nbsp; 
③、对数据库对象生复制支?nbsp; 
SQL>execute dbms_repcat.generate_replication_support('scott','dept','table');  
(说明Q生支持scott用户下dept表复制的数据库触发器和程序包)  
④、确认复制的l和对象已经加入数据库的数据字典  
SQL>select gname, master, status from dba_repgroup;  
SQL>select * from dba_repobject;  
7、创Z复制节点  
①、用repadminw䆾dshenzhen数据库,创徏d制节?nbsp; 
SQL>execute dbms_repcat.add_master_database  
(gname=>'scott_mg',master=>'beijing.test.com.cn',use_existing_objects=>true, copy_rows=>false, propagation_mode => 'asynchronous');  
参数说明Q?nbsp; 
gname d制组?nbsp; 
master 加入d制节点的另一个数据库  
use_existing_object true表示用主复制节点已经存在的数据库对象  
copy_rows false表示W一ơ开始复制时不用和主复制节点保持一?nbsp; 
propagation_mode 异步地执?nbsp; 
②、确认复制的d队列已经加入数据库的数据字典  
SQL>select * from user_jobs;  
8、同步l的状态由停顿(quiesced )改ؓ正常(normal)  
①、用repadminw䆾dshenzhen数据库,q行以下命o  
SQL> execute dbms_repcat.resume_master_activity('scott_mg',false);  
②、确认同步组的状态ؓ正常(normal)  
SQL> select gname, master, status from dba_repgroup;  
③、如果这?#9312;命o不能使同步组的状态ؓ正常(normal)Q可能有一些停的复制Q运行以下命令再试试(在紧急的时候才?Q?nbsp; 
SQL> execute dbms_repcat.resume_master_activity('scott_mg',true);  
9、创建复制数据库的时间表Q我们假讄固定的时间表Q?0分钟复制一ơ?/strong>  
①、用repadminw䆾dshenzhen数据库,q行以下命o  
SQL>begin  
dbms_defer_sys.schedule_push (  
destination => 'beijing.test.com.cn',  
interval => 'sysdate + 10/1440',  
next_date => sysdate);  
end;  
/  
?nbsp; 
SQL>begin  
dbms_defer_sys.schedule_purge (  
next_date => sysdate,  
interval => 'sysdate + 10/1440',  
delay_seconds => 0,  
rollback_segment => '');  
end;  
/  
?nbsp; 
②、用repadminw䆾dbeijing数据库,q行以下命o  
SQL>begin  
dbms_defer_sys.schedule_push (  
destination => ' shenzhen.test.com.cn ',  
interval => 'sysdate + 10 / 1440',  
next_date => sysdate);  
end;  
/  
?nbsp; 
SQL>begin  
dbms_defer_sys.schedule_purge (  
next_date => sysdate,  
interval => 'sysdate + 10/1440',  
delay_seconds => 0,  
rollback_segment => '');  
end;  
/  
10、添加或修改两边数据库的记录Q跟t复制过E?/strong>  
如果你想立刻看到d或修改后数据库的记录的变化,可以在两边repadmin用户下找到push的job_numberQ然后运行:  
SQL>exec dbms_job.run(job_number);  
三、异常情늚处理  
1、检查复制工作正常否Q可以在repadmin 用户下查询user_jobs  
SQL>select job,this_date,next_date,what, broken from user_jobs;  
正常的状态有两种Q?nbsp; 
d?#8212;—this_date为空Qnext_date为当前时间后的一个时间?nbsp; 
d?#8212;—this_date不ؓI,next_date为当前时间后的一个时间?nbsp; 
异常状态也有两U:  
d死锁——next_date为当前时间前的一个时间?nbsp; 
d死锁——next_date为非常大的一个时间|例如Q?001-01-01  
q可能因为网l中断照成的死锁  
解除死锁的办法:  
$ps –ef|grep orale  
扑ֈ死锁的刷新快照的q程号ora_snp*Q用kill –9 命o删除此进E?nbsp; 
然后q入repadmin 用户SQL>操作W下Q运行命令:  
SQL>exec dbms_job.run(job_number);  
说明Qjob_number 为用select job,this_date,next_date,what from user_jobs;命o查出的job~号?nbsp; 
2、增加或减少复制l的复制对象  
①、停止主数据库节点的复制动作Q同步l的状态由正常(normal)改ؓ停顿(quiesced )  
用repadminw䆾dshenzhen数据库,q行以下命o  
SQL>execute dbms_repcat.suspend_master_activity (gname => 'scott_mg');  
②、在复制lscott_mg里加入数据库对象Q保证数据库对象必须有主关键字?nbsp; 
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'emp', type=>'table',use_existing_object=>true,gname=>'scott_mg');  
对加入的数据库对象生复制支?nbsp; 
SQL>execute dbms_repcat.generate_replication_support('scott','emp','table');  
③、在复制lscott_mg里删除数据库对象?nbsp; 
SQL>execute dbms_repcat.drop_master_repobject ('scott','dept','table');  
④、重C同步l的状态由停顿(quiesced )改ؓ正常(normal)?nbsp; 
SQL> execute dbms_repcat.resume_master_activity('scott_mg',false);

]]>
创徏oracle dblink q程[转]http://www.tkk7.com/hhhaaawwwkkk/archive/2009/04/27/267751.html生命的熾?/dc:creator>生命的熾?/author>Mon, 27 Apr 2009 09:14:00 GMThttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/04/27/267751.htmlhttp://www.tkk7.com/hhhaaawwwkkk/comments/267751.htmlhttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/04/27/267751.html#Feedback0http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/267751.htmlhttp://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/267751.html      其实dblink和数据库中的view差不多,建dblink的时候需要知道待d数据库的ip地址Qssid以及数据库用户名和密码?br />        创徏可以采用两种方式Q?br />         1、已l配|本地服?br />
以下是引用片D:
  create public database
  link fwq12 connect to fzept
  identified by neu using 'fjept'

               CREATE  DATABASE  LINK +  数据库链接名Q?span style="font-size: 8pt">以后通过q个名字来进行调用远E数据库的内?/span>。)CONNECT TO + 用户名(是用来连接到q程数据库的合法Oracle用户?/span>Q?IDENTIFIED BY +  密码Q?span style="font-size: 9pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: " ?="" mso-hansi-font-family:="" ??="" ?;="">用户q接?/span>Oracle时候的合法密码Q?USING +  本地配置的数据的实例名(Oracle数据库所在的L上的tnsnames.ora文g里边定义的数据库q接?/span>Q?
在安装目录下Q如QE:\Oracle\Ora81\network\ADMIN下用写字板或C本打开TNSNAME.ORA文gQ?br />
SELECT COUNT(*) FROM TABLE_NAME@DB_LINK WHERE WHERE_CLAUSE;//查阅q程数据库的内容?br /> UPDATE TEST.TEST@DB_LINK SET SO_NBR=NEW_SO_NBR WHERE WHERE_CLAUSE;//修改q程数据库的内容?/font>
在实际用过E中Q还可以通过个远E表建立一个同义词来进一步增加透明性,使该数据库连接串对于E序和开发h员来讲完全透明?/span>
CREATE SYNONYM TABLE_NAME FOR TABLE_NAME@DB_LINK; 

     2、未配置本地服务
以下是引用片D:
create database link linkfwq
   connect to fzept identified by neu
   using '(DESCRIPTION =
   (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
   )
   (CONNECT_DATA =
   (SERVICE_NAME = fjept)
   )
   )';

        hostQ数据库的ip地址Qservice_nameQ数据库的ssid?br />        其实两种Ҏ配置dblink是差不多的,我个人感觉还是第二种Ҏ比较好,q样不受本地服务的媄响?br />
       数据库连接字W串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定?

       数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一?/p>

       数据库全局名称可以用以下命令查?br />        SELECT * FROM GLOBAL_NAME;

       查询q端数据库里的表
       SELECT …… FROM 表名@数据库链接名;
       查询、删除和插入数据和操作本地的数据库是一LQ只不过表名需要写?#8220;表名@dblink服务?#8221;而已?/p>


        附带说下同义词创?

      CREATE SYNONYM同义词名FOR 表名;
     CREATE SYNONYM同义词名FOR 表名@数据库链接名;

     删除dblinkQDROP  PUBLIC  DATABASE  LINK linkfwq?br />
如何知道当前用户、当前系l中有哪些数据库q接Ԍ
SELECT * FROM USER_DB_LINKS;
q个查询会给出当前用L数据库联接的名字、联接用户名、联接密码、要q接的主Z及创建时期?/span>

SELECT * FROM DBA_DB_LINKS;
q个查询会给出当前系l中所有的数据库联接的创徏用户、联接用户名、要q接的主Z及创建时期?/span>

SELECT * FROM V$DBLINK;
q个查询会给出当前打开的数据库联接?/span>

4
。常见错误处理:

////////////////////////////////////////////////////////////////
1
。不能分解服务名Q?/span>

d到远E服务器上的l果Q?/span>

net97>show parameters global_name

NAME TYPE VALUE
------------------------------------ ------- ------------------------------
global_names boolean FALSE
net97>
net97>drop database link jinhua;

数据库链接已丢弃?/span>


net97>create database link jinhua
2 connect to username identified by password
3 using 'jinhua';

数据库链接已创徏?/span>


net97>select * from so@jinhua;
select * from so@jinhua
*
ERROR
位于W?/span> 1 ?/span>
:
ORA-12154: TNS:
不能分解服务名称
.
net97>conn username/password@jinhua;
已连接?/span>

net97>
q是因ؓ?/span>Oracle数据库所在的UnixL上面?/span>tnsnames.ora文g里边没有?/span>jinhuaq个服务名的定义。所以不能分解服务名?/span>
 



      如果创徏全局dblinkQ必M用systm或sys用户Q在database前加public?br /> 参考资?
  http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#i1008271



]]>
MySQL常用命ohttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/02/19/255653.html生命的熾?/dc:creator>生命的熾?/author>Thu, 19 Feb 2009 13:54:00 GMThttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/02/19/255653.htmlhttp://www.tkk7.com/hhhaaawwwkkk/comments/255653.htmlhttp://www.tkk7.com/hhhaaawwwkkk/archive/2009/02/19/255653.html#Feedback0http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/255653.htmlhttp://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/255653.html
1.开启MySQL服务Q?br />    在运行中net start mysqlQ?br /> 2.关闭MySQL服务Q?br />    在运行中net stop mysqlQ?br /> 3.q接MySQLQ?br />    MySQL -u用户?-p用户密码Q进入后提示 MySQL>Q?br /> 4.q接q程MySQLQ?br />    MySQL -hIP地址 -u用户?-p用户密码Q?br /> 5.推出MySQLQ?br />    mysql> quitQ?nbsp; exit  加EnterQ?br /> 6.修改密码Q?br />    mysqladmin -u用户?-p旧密?password 新密码;
7.版本查询旉昄Q?br />    mysql> select version(),current_date();

二、操作数据库Q?br />
1:使用SHOW语句扑և在服务器上当前存在什么数据库Q?
  mysql> SHOW DATABASES;
2:创徏一个数据库MYSQLDATA
  mysql> CREATE DATABASE MYSQLDATA;
3:选择你所创徏的数据库
  mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)
4:查看现在的数据库中存在什么表
  mysql> SHOW TABLES;
5:创徏一个数据库?br />   mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:昄表的l构Q?
  mysql> DESCRIBE MYTABLE;
7:往表中加入记录
  mysql> insert into MYTABLE values ("hyq","M");
8:用文本方式将数据装入数据库表中(例如D:/mysql.txtQ?br />   mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE;
9:导入.sql文g命oQ例如D:/mysql.sqlQ?br />   mysql>use database;
  mysql>source d:/mysql.sql;
10:删除?br />   mysql>drop TABLE MYTABLE;
11:清空?br />   mysql>delete from MYTABLE;
12:更新表中数据
  mysql>update MYTABLE set sex="f" where name='hyq';
13.命o的取消:当命令输入错误而又无法改变Q多行语句情形)Ӟ只要在分号出现前可以用 c来取消该条命?br />   mysql> select
  -> user()
  -> c
  mysql>
14.使用\G按行垂直昄l果Q如果一行很长,需要这行显C的话,看vl果来就非常的难受。在SQL语句或者命令后使用\G而不是分L,可以每一行的值垂直输出。这个可能也是大家对于MySQL最熟悉的区别于其他数据库工L一个特性了?br />
mysql> select * from db_archivelog\G
*************************** 1. row ***************************
        id: 1
 check_day: 2008-06-26
   db_name: TBDB1
  arc_size: 137
   arc_num: 166
per_second: 1.6
  avg_time: 8.7
15.使用tee保存q行l果到文Ӟ可以命令行中的l果保存到外部文件中。如果指定已l存在的文gQ则l果会附加到文g中?br />
mysql> tee output.txt
Logging to file 'output.txt'
或?br /> mysql> \T output.txt
Logging to file 'output.txt'

mysql> notee
Outfile disabled.
或?br /> mysql> \t
Outfile disabled.




]]>
SQL中CASE条g表达?/title><link>http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/13/240328.html</link><dc:creator>生命的熾?/dc:creator><author>生命的熾?/author><pubDate>Thu, 13 Nov 2008 07:35:00 GMT</pubDate><guid>http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/13/240328.html</guid><wfw:comment>http://www.tkk7.com/hhhaaawwwkkk/comments/240328.html</wfw:comment><comments>http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/13/240328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/240328.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/240328.html</trackback:ping><description><![CDATA[<p><acronym class="ACRONYM">SQL</acronym> <tt class="TOKEN">CASE</tt> 表达式是一U通用的条件表辑ּQ类g其它语言中的 if/else 语句?</p> <pre class="SYNOPSIS">CASE WHEN <tt class="REPLACEABLE"><em>condition</em></tt> THEN <tt class="REPLACEABLE"><em>result</em></tt> [<span id="hjpbf5t" class="OPTIONAL">WHEN ...</span>] [<span id="bv353dp" class="OPTIONAL">ELSE <tt class="REPLACEABLE"><em>result</em></tt></span>] END</pre> <p><tt class="TOKEN">CASE</tt> 子句可以用于M表达式可以有效存在的地方?<tt class="REPLACEABLE"><em>condition</em></tt> 是一个返?tt class="TYPE">boolean</tt> 的表辑ּ?如果l果为真Q那?<tt class="TOKEN">CASE</tt> 表达式的l果是W合条g?<tt class="REPLACEABLE"><em>result</em></tt>?如果l果为假Q那么以相同方式搜寻M随后?<tt class="TOKEN">WHEN</tt> 子句?如果没有 <tt class="TOKEN">WHEN</tt> <tt class="REPLACEABLE"><em>condition</em></tt> 为真Q那?case 表达式的l果是?<tt class="TOKEN">ELSE</tt> 子句里的倹{?如果省略?<tt class="TOKEN">ELSE</tt> 子句而且没有匚w的条Ӟ l果?NULL?</p> <p>例子Q?</p> <pre class="SCREEN">SELECT * FROM test; a --- 1 2 3 SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test; a | case ---+------- 1 | one 2 | two 3 | other</pre> <p> </p> <p>所?<tt class="REPLACEABLE"><em>result</em></tt> 表达式的数据的类型都必须可以转换成单一的输出类型?nbsp; </p> <p>下面q个<span id="z31tf5h" class="QUOTE">"单的"</span> <tt class="TOKEN">CASE</tt> 表达式是上面的通用形式的一个特D的变种?</p> <pre class="SYNOPSIS">CASE <tt class="REPLACEABLE"><em>expression</em></tt> WHEN <tt class="REPLACEABLE"><em>value</em></tt> THEN <tt class="REPLACEABLE"><em>result</em></tt> [<span id="b55fz5x" class="OPTIONAL">WHEN ...</span>] [<span id="v35lfz5" class="OPTIONAL">ELSE <tt class="REPLACEABLE"><em>result</em></tt></span>] END</pre> <p>先计?<tt class="REPLACEABLE"><em>expression</em></tt> 的| 然后与所有在<tt class="TOKEN">WHEN</tt> 子句里声明的 <tt class="REPLACEABLE"><em>value</em></tt> ҎQ直到找C个相{的?如果没有扑ֈ匚w的,则返回在 <tt class="TOKEN">ELSE</tt> 子句里的 <tt class="REPLACEABLE"><em>result</em></tt> Q或?NULLQ?q个cM?C 里的 <code class="FUNCTION">switch</code> 语句?</p> <p>上面的例子可以用?<tt class="TOKEN">CASE</tt> 语法来写Q?</p> <pre class="SCREEN">SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM test; a | case ---+------- 1 | one 2 | two 3 | other</pre> <p> </p> <p><tt class="TOKEN">CASE</tt> 表达式ƈ不计Q何对于判断结果ƈ不需要的子表辑ּ?比如Q下面是一个可以避免被雉的方法: </p> <pre class="PROGRAMLISTING">SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;</pre> <pre class="PROGRAMLISTING"><p><font face="Courier New">?Q一道SQL语句面试?br /> 表内容:<br /> 2005-05-09 ?br /> 2005-05-09 ?br /> 2005-05-09 ?br /> 2005-05-09 ?br /> 2005-05-10 ?br /> 2005-05-10 ?br /> 2005-05-10 ?br /> <br /> 如果要生成下列结? 该如何写sql语句?<br /> <br />            ??br /> 2005-05-09 2 2<br /> 2005-05-10 1 2<br /> ----------------------------------------------------------<br /> create table #tmp(rq varchar(10),shengfu nchar(1))<br /> <br /> insert into #tmp values('2005-05-09','?)<br /> insert into #tmp values('2005-05-09','?)<br /> insert into #tmp values('2005-05-09','?)<br /> insert into #tmp values('2005-05-09','?)<br /> insert into #tmp values('2005-05-10','?)<br /> insert into #tmp values('2005-05-10','?)<br /> insert into #tmp values('2005-05-10','?)</font></p> <p><font face="Courier New"><span style="color: #008000"><font face="Courier New">select rq, sum(case when shengfu='? then 1 else 0 end)'?,<br />            sum(case when shengfu='? then 1 else 0 end)'? <br />            from #tmp group by rq<br /> </font></span>----------------------------------------------------------<br /> <br /> <br /> <br /> <br /> <br /> <br /> ?Q表中有A B C三列,用SQL语句实现Q当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列?br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <span style="color: #008000">select (case when a>b then a else b end ),<br />        (case when b>c then b esle c end)<br />        from table_name</span><br /> </font></p> ----------------------------------------------------------</pre> <pre class="PROGRAMLISTING">?Q有一张表Q里面有3个字D:语文Q数学,p。其中有3条记录分别表C?0分,数学80分,p58分,L一条sql语句查询三条记录q按以下条g昄出来Qƈ写出您的思\Q:  <br />    大于或等?0表示优秀Q大于或{于60表示及格Q小?0分表CZ及格?nbsp; <br />        昄格式Q?nbsp; <br />        语文              数学                p  <br />        及格              优秀                不及?nbsp;   <br /> ----------------------------------------------------------<br /> <span style="color: #008000">select<br />     (case when 语文>=80 then '优秀'<br />           when 语文>=60 then '及格'<br />           else '不及? end) as 语文,<br />     (case when 数学>=80 then '优秀'<br />           when 数学>=60 then '及格'<br />           else '不及? end) as 数学,<br />     (case when p>=80 then '优秀'<br />           when p>=60 then '及格'<br />          else '不及? end) as p,<br /> from table<br /> </span>----------------------------------------------------------------</pre><img src ="http://www.tkk7.com/hhhaaawwwkkk/aggbug/240328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hhhaaawwwkkk/" target="_blank">生命的熾?/a> 2008-11-13 15:35 <a href="http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/13/240328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL教E【{?/title><link>http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/12/240040.html</link><dc:creator>生命的熾?/dc:creator><author>生命的熾?/author><pubDate>Wed, 12 Nov 2008 03:22:00 GMT</pubDate><guid>http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/12/240040.html</guid><wfw:comment>http://www.tkk7.com/hhhaaawwwkkk/comments/240040.html</wfw:comment><comments>http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/12/240040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/240040.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/240040.html</trackback:ping><description><![CDATA[<span style="color: red"><strong>一、SQL语言?/strong> </span><br /> SQL是结构化查询语言(Structured Query Language)的羃写。这U语a允许我们Ҏ据库q行复杂的查询。同时也提供了创建数据库的方法。SQL语言的用范围非常广泛。许多数据库产品都支持SQL语言Q这意味着如果我们学会了SQL语言Q我们可以把q种知识q用到MS Access 或SQL Server, Oracle, DB2以及非常多的其它数据库中?br />  <br /> SQL语言q用在关pd数据库中。一个关pd数据库把数据<a class="article" target="_blank">存储</a>在表Q也U关p)中。每个数据库的主要组成就是一l表。每个表又由一l记录组成-Q每条记录在表中有相同的l构Q包含固定数量的h一定类型的字段?br />  <br /> 下面我们来看一个实际的数据库中的表。该表的表名为ciaQ包?50多条记录Q每个记录代表一个国家。表?个字D늻成,字段的值有的是字符串类型,有的是数字类型?<br /> <br /> name region area population gdp <br /> ---- ------ ------ ---------- ----------- <br /> Yemen Middle East 527970 14728474 23400000000 <br /> Zaire Africa 2345410 44060636 18800000000 <br /> Zambia Africa 752610 9445723 7900000000 <br /> Zimbabwe Africa 390580 11139961 17400000000 <br /> <br /> 下面我们可以用一些SQL语句来查询这个表中我们该兴趣的数据?<br /> <br /> 1. 中国的GDP是多? <br /> <br /> 查询用的SQL语句为: <br /> select gdp from cia <br /> where name='china' <br /> <br /> 查询l果为: <br /> 4800000000000 <br /> <br /> 2. l出每个地区的国家数和h口L。ƈ且按地区的h口数从多到少排序?<br /> <br /> <br /> 查询用的SQL语句为: <br /> <br /> SELECT region, COUNT(name), SUM(population) <br /> FROM cia <br /> GROUP BY region <br /> ORDER BY 3 DESC <br /> <br /> 查询l果为: <br /> region COUNT(name) SUM(population) <br /> ------ ----------- --------------- <br /> Asia 14 2963031109 <br /> Africa 59 793382933 <br /> Europe 43 580590872 <br /> .... <br /> <br /> 怎么P对SQL语言有了基本的了解了吧,同时Ҏ据库Q表Q记录,字段{一pd在SQL语言中常用的 <br /> 感念也有大概的认识吧。如果不是很清楚也没关系Q在接下来的内容中我们从SQL语言中最?<br /> 的内定w步l大家作介绍Qƈ提供丰富的练习让大家实际操作?br /> <br /> <strong style="color: red">二、最基本的SELECT 命o</strong><br /> select命o或语句用来获取一个或多个表中的记录信息,一般配合where子句使用Q来取得满某些条g的记录,如果没有where子句Q将q回所有记录。一般的使用方式如下Q?<br /> <br /> SELECT attribute-list <br /> FROM table-name <br /> WHERE condition <br /> <br /> attribute-listQ返回内容的列表Q每个内容用逗号分开。这里的内容可以为字D,包含字段的表辑ּ或更复杂的子查询?<br /> <br /> table-nameQ表名,更复杂时可以为子查询?<br /> <br /> conditionQ条件表辑ּQ用来筛选满条g的记录?<br /> <br /> 在本节中我们使用下表作ؓ试验之用Q?<br /> <br /> bbc(name, region, area, population, gdp) <br /> 表名为bbcQ该表有Q个字段QcolumnsQ,又称为属性(attributesQ?. <br /> name Q国家名 <br /> region: 国家所在的地区 <br /> area: 面积 <br /> population Qh?<br /> gdpQ国民生产d?<br /> <br /> SQL实例Q?<br /> 1、选出所有国家名Q地区和人口 <br /> SELECT name, region, population FROM bbc <br /> <br /> <br /> 2、给出France的h口数 <br /> SELECT population FROM bbc <br /> WHERE name = 'France' <br /> <br /> 3、哪些国家的名称以字WD开始? <br /> SELECT name FROM bbc <br /> WHERE name LIKE 'D%' <br /> <br /> 4?国土大国Q面U大于五百万qx公里Q的国名和h口密?<br /> SELECT name, population/area FROM bbc <br /> WHERE area > 5000000 <br /> <br /> 5、给Z些小Q面U小?000qx公里Q而富?国民生d大?0?的国?<br /> SELECT name , region <br /> FROM bbc <br /> WHERE area < 2000 <br /> AND gdp > 5000000000<br /> <br /> <span style="color: red"><strong>三、SELECT命o中的GROUP BY ?HAVING 子句 </strong></span><br /> 在介lGROUP BY ?HAVING 子句前,我们必需先讲讲sql语言中一U特D的函数Q聚合函敎ͼ例如SUM, COUNT, MAX, AVG{。这些函数和其它函数的根本区别就是它们一般作用在多条记录上?<br /> <br /> SELECT SUM(population) FROM bbc <br /> <br /> q里的SUM作用在所有返回记录的population字段上,l果是该查询只q回一个结果,x有国家的Mh口数?<br /> <br /> <br /> 通过使用GROUP BY 子句Q可以让SUM ?COUNT q些函数对属于一l的数据起作用?<br /> 当你指定 GROUP BY region Ӟ 属于同一个regionQ地区)的一l数据将只能q回一行| <br /> 也就是说Q表中所有除regionQ地区)外的字段Q只能通过 SUM, COUNT{聚合函数运后q回一个| <br /> <br /> HAVING子句可以让我们筛选成l后的各l数据. <br /> WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前. <br /> ?HAVING子句在聚合后对组记录q行{选?<br /> <br /> 让我们还是通过具体的实例来理解GROUP BY ?HAVING 子句Q还采用W三节介l的bbc表?<br /> <br /> SQL实例Q?<br /> <br /> 1、显C每个地区的Mh口数和总面U. <br /> SELECT region, SUM(population), SUM(area) <br /> FROM bbc <br /> GROUP BY region <br /> <br /> 先以region把返回记录分成多个组Q这是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段Q一或多条记录)作运?<br /> <br /> 2?昄每个地区的Mh口数和总面U.仅显C那些面U超q?000000的地区?<br /> <br /> SELECT region, SUM(population), SUM(area) <br /> FROM bbc <br /> GROUP BY region <br /> HAVING SUM(area)>1000000 <br /> <br /> 在这里,我们不能用where来筛选超q?000000的地区,因ؓ表中不存在这样一条记录?<br /> 相反QHAVING子句可以让我们筛选成l后的各l数据.<br /> <br /> <span style="color: red"><strong>四、嵌套SELECT语句</strong></span><br /> 嵌套SELECT语句也叫子查询,形如Q?<br /> <br /> SELECT name FROM bbc WHERE region = <br /> (SELECT region FROM bbc WHERE name = 'Brazil') <br /> <br /> 一?SELECT 语句的查询结果可以作为另一个语句的输入倹{?<br /> 上面的SQL语句作用得和'Brazil'Q巴西)同属一个地区的所有国家?<br /> <br /> 子查询不但可以出现在Where子句中,也可以出现在from子句中,作ؓ一个时表使用Q也可以出现在select list中,作ؓ一个字D值来q回。本节我们仅介绍的Where子句中的子查询?<br /> <br /> 在Where子句中用子查询Q有一个在实际使用中容易犯的错在这里说明一下?<br /> <br /> 通常Q就像上面的例子一P嵌套的语句L和一个D行比较。语?(SELECT region FROM bbc WHERE name = 'Brazil') 应该仅返回一个地区,?'Americas'. 但如果我们在表中再插入一条地ZؓƧ洲Q国家名UCؓBrazil的记录,那会发生什么情况? <br /> <br /> q将会导致语句的q行旉误.因ؓq个SQL语句的语法是正确的,所以数据库引擎开始执行,但当执行到外部的语句时就出错了。因时的外部语句像好像?SELECT name FROM bbc WHERE region = ('Americas', 'Europe')Q这个语句当然报错了?<br /> <br /> 那么有没有办法解册个问题呢Q当然有。有一些SQL查询条g允许对列表|卛_个|q行操作?<br /> 例如"IN" 操作W,可以试某个值是否在一个列表中?<br /> <br /> 下面的语句就可以安全的执行而不出错Q不表中有多少条包含Brazils的记?<br /> <br /> SELECT name FROM bbc WHERE region IN <br /> (SELECT region FROM bbc WHERE name = 'Brazil') <br /> <br /> OKQ?<br /> <br /> 让我们再看看一些具体的实例Q?<br /> <br /> 1、给Zh口多于RussiaQ俄国)的国家名U?<br /> SELECT name FROM bbc <br /> WHERE population> <br /> (SELECT population FROM bbc <br /> WHERE name='Russia') <br /> <br /> 2、给?India'Q印度), 'Iran'Q伊朗)所在地区的所有国家的所有信?br /> SELECT * FROM bbc <br /> WHERE region IN <br /> (SELECT region FROM bbc <br /> WHERE name IN ('India','Iran')) <br /> <br /> 3、给Zh均GDP过'United Kingdom'Q英国)的欧z国Ӟ <br /> <br /> SELECT name FROM bbc <br /> WHERE region='Europe' AND gdp/population > <br /> (SELECT gdp/population FROM bbc <br /> WHERE name='United Kingdom')<br /> <br /> Z从两个或多个表中选出数据Q我们一般用表q接来实现这个功能?<br /> <br /> <span style="color: red"><strong>五、SELECT语句中的表连?join) </strong></span><br /> 从这里介ljoinQ连接)的概? 为此我们准备了两个试验用表: albumQ专辑表Q??trackQ曲目表Q? <br /> <br /> 专辑表:包含200首来自Amazon的音乐CD的概要信息?<br /> album(asin, title, artist, price, release, label, rank) <br /> <br /> 曲目表:每张专辑中的曲目Q因为是音乐CDQ所以也可叫歌曲Q的详细信息?<br /> track(album, dsk, posn, song) <br /> <br /> SQL短语 FROM album JOIN track ON album.asin=track.album 表示q接album和track表。其中,album.asin表示专辑的惟一标识Ptrack.album表示曲目表中和专辑关联的专辑受?<br /> q接后,得到一个时表Q该临时表中每条记录包含的字D는两部分组成,除了专辑表中的对应字Dalbum(title, artist ...)Q还包含曲目表的所有字Dtrack(album, disk, posn and song)?<br /> <br /> 有了q张临时表,很多查询容易实C?<br /> <br /> 看看一些具体的实例Q?<br /> <br /> 1、列出歌名ؓ'Alison'的专辑名U和作?<br /> <br /> SELECT title, artist <br /> FROM album JOIN track <br /> ON (album.asin=track.album) <br /> WHERE song = 'Alison' <br /> <br /> 昄Q歌名、专辑名U和作者分别在两个表中Q必需使用表连接来完成q个查询?<br /> <br /> <br /> 2、哪个artist录制了歌?Exodus' <br /> <br /> SELECT artist <br /> FROM album JOIN track ON (asin=album) <br /> WHERE song = 'Exodus' <br /> <br /> 用作q接的两个字DasinQalbum因ؓ在两个表中都是惟一的,所以不一定要加表名作为前~?<br /> 但ؓ了方便理解,使用前缀QŞ如:album.asin=track.album <br /> <br /> 3、列出曲目表中所有属?Blur'专辑的歌?<br /> <br /> SELECT song <br /> FROM album JOIN track ON (asin=album) <br /> WHERE title = 'Blur' <br /> <br /> 如果我们把 album JOIN track ON (asin=album) 看成一个时表的话Qjoin的概念就很好理解了?br /> <br /> 上节我们介绍了表q接Q更切的说是inner joins內连接. <br /> 內连接仅选出两张表中互相匚w的记录.因此Q这会导致有时我们需要的记录没有包含q来?<br /> 为更好的理解q个概念Q我们介l两个表作演C。苏格兰议会中的政党?party)和议员表(msp)?<br /> <br /> party(Code,Name,Leader) <br /> Code: 政党代码 <br /> Name: 政党名称 <br /> Leader: 政党领袖 <br /> <br /> msp(Name,Party,Constituency) <br /> Name: 议员?<br /> Party: 议员所在政党代?<br /> Constituency: 选区 <br /> <br /> <span style="color: red"><strong>六、SELECT语句中的左连接、右q接和全q接</strong></span><br /> 在介l左q接、右q接和全q接前,有一个数据库中重要的概念要介l一下,即空?NULL)?<br /> <br /> 有时表中Q更切的说是某些字D|可能会出现空? q是因ؓq个数据不知道是什么值或Ҏ׃存在?<br /> Ig{同于字W串中的I格Q也不是数字cd?。因此,判断某个字段值是否ؓI值时不能使用=,<>q些 <br /> 判断W。必需有专用的短语QIS NULL 来选出有空值字D늚记录Q同理,可用 IS NOT NULL 选出不包含空值的记录?<br /> <br /> 例如Q下面的语句选出了没有领D的政党。(不要奇怪,苏格兰议会中实存在q样的政党) <br /> <br /> SELECT code, name FROM party <br /> WHERE leader IS NULL <br /> <br /> 又如Q一个议员被开除出党,看看他是谁?卌议员的政党ؓI? <br /> <br /> SELECT name FROM msp <br /> WHERE party IS NULL <br /> <br /> 好了Q让我们a归正传,看看什么叫左连接、右q接和全q接?<br /> <br /> A left joinQ左q接Q包含所有的左边表中的记录甚x双表中没有和它匚w的记录?<br /> 同理Q也存在着相同道理?right joinQ右q接Q,卛_含所有的双表中的记录甚x左边表中没有和它匚w的记录。而full join(全连?֐思义Q左双中所有记录都会选出来?<br /> <br /> 讲到q里Q有人可能要问,到底什么叫Q包含所有的左边表中的记录甚x双表中没有和它匚w的记录?<br /> Ok,我们来看一个实例: <br /> <br /> SELECT msp.name, party.name FROM msp JOIN party ON party=code <br /> <br /> q个是我们上一节所学的Join(注意Q也叫inner join)Q这个语句的本意是列出所有议员的名字和他所属政党?<br /> 你可以在 http://sqlzoo.cn/4.htm 亲自执行一下该语句Q看看结果是什么?<br /> <br /> 很遗憾,我们发现该查询的l果了两个议员QCanavan MSP, Dennis。ؓ什么,因ؓq两个议员不属于d政党Q即他们的政党字D?Party)为空倹{那么ؓ什么不属于M政党查不出来了Q这是因为空值在作怪。因员表中政党字D?Party)的空值在政党表中找不到对应的记录作匹配,即FROM msp JOIN party ON party=code 没有把该记录q接hQ而是qo出去了。在该短语中Qmsp在Join的左边,所有称为左表。party在Join的右边,所有称为右表?<br /> <br /> Ok,现在再看看这句话Q?#8220;包含所有的左边表中的记录甚x双表中没有和它匚w的记?#8221;Q意思应该很明白了吧。执行下面这个语句,那两个没有政党的议员漏不了了?<br /> <br /> SELECT msp.name, party.name FROM msp LEFT JOIN party ON party=code <br /> <br /> 关于双?看看q个查询明白了Q?<br /> <br /> SELECT msp.name, party.name FROM msp RIGHT JOIN party ON msp.party=party.code <br /> <br /> q个查询的结果列出所有的议员和政党,包含没有议员的政党,但不包含没有政党的议员?<br /> <br /> 那么既要包含没有议员的政党,又要包含没有政党的议员该怎么办呢Q对了,全连?full join)?<br /> <br /> SELECT msp.name, party.name FROM msp FULL JOIN party ON msp.party=party.code<br /> <br /> <span style="color: red"><strong>七、SELECT语句中的自连?br /> </strong></span>到目前ؓ止,我们q接的都是两张不同的表,那么能不能对一张表q行自我q接呢?{案是肯定的。有没有必要对一张表q行自我q接呢?{案也是肯定的?<br /> <br /> 表的别名Q?<br /> 一张表可以自我q接。进行自q接时我们需要一个机制来区分一个表的两个实例?<br /> 在FROM clauseQ子句)中我们可以给q个表取不同的别名, 然后在语句的其它需要用到该别名的地方 <br /> 用dotQ点Q来q接该别名和字段名?<br /> <br /> 我们在这里同LZ个表来对自连接进行解释?<br /> ׃堡公交线路, <br /> <br /> 车站表: <br /> stops(id, name) <br /> <br /> 公交U\表: <br /> route(num, company, pos, stop) <br /> <br /> 1、对公交U\表routeq行自连接?<br /> <br /> SELECT * FROM route R1, route R2 <br /> WHERE R1.num=R2.num AND R1.company=R2.company <br /> <br /> 我们route表用字段(num, company)来进行自q接Q?l果是什么意思呢Q你可以知道每条公交U\的Q意两个可联通的车站?<br /> <br /> 2、用stop字段来对routeQ公交线路表Q进行自q接?<br /> <br /> SELECT * FROM route R1, route R2 <br /> WHERE R1.stop=R2.stop; <br /> <br /> 查询的结果就是共用同一车站的所有公交线。这个结果对换乘是不是很有意义呢?<br /> <br /> 从这两个例子我们可以看出Q自q接的语法结构很单,但语意结果往往不是那么Ҏ理解。就我们q里所列出的两个表Q如果运用得当,能解军_多实际问题, <br /> 例如QQ意两个站点之间如何换乘?<br /> <br /> SELECT R1.company, R1.num <br /> FROM route R1, route R2, stops S1, stops S2 <br /> WHERE R1.num=R2.num AND R1.company=R2.company <br /> AND R1.stop=S1.id AND R2.stop=S2.id <br /> AND S1.name='Craiglockhart' <br /> AND S2.name='Tollcross'<img src ="http://www.tkk7.com/hhhaaawwwkkk/aggbug/240040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hhhaaawwwkkk/" target="_blank">生命的熾?/a> 2008-11-12 11:22 <a href="http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/12/240040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库技术【Link?/title><link>http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/12/239997.html</link><dc:creator>生命的熾?/dc:creator><author>生命的熾?/author><pubDate>Wed, 12 Nov 2008 01:50:00 GMT</pubDate><guid>http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/12/239997.html</guid><wfw:comment>http://www.tkk7.com/hhhaaawwwkkk/comments/239997.html</wfw:comment><comments>http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/12/239997.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/239997.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/239997.html</trackback:ping><description><![CDATA[SQL语句大全Q?br /> <a >http://www.pgsqldb.org/pgsqldoc-7.1c/sql-language.html</a><br /> <br /> SQL Server优化Q?br /> <a >http://msdn2.microsoft.com/zh-cn/library/ms172984.aspx</a><br /> <br /> 数据库技术:<br /> <a >http://kwklover.cnblogs.com/favorite/6741.html</a> <img src ="http://www.tkk7.com/hhhaaawwwkkk/aggbug/239997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hhhaaawwwkkk/" target="_blank">生命的熾?/a> 2008-11-12 09:50 <a href="http://www.tkk7.com/hhhaaawwwkkk/archive/2008/11/12/239997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL语句整理[W三章]Q学习笔讎ͼhttp://www.tkk7.com/hhhaaawwwkkk/archive/2008/09/27/231249.html生命的熾?/dc:creator>生命的熾?/author>Sat, 27 Sep 2008 02:43:00 GMThttp://www.tkk7.com/hhhaaawwwkkk/archive/2008/09/27/231249.htmlhttp://www.tkk7.com/hhhaaawwwkkk/comments/231249.htmlhttp://www.tkk7.com/hhhaaawwwkkk/archive/2008/09/27/231249.html#Feedback0http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/231249.htmlhttp://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/231249.html一、表q接
cross     q回q接cd左右两侧的表中的所有行的所有组合?br /> inner      q回q接cd左侧表和右侧表有相同值的所有行?br /> left         q回左侧表中的所有行Q以及与左侧表相匚w的右侧表中的|如没有匹配的q回NULL?br /> right       q回右侧表中的所有行Q以及与右侧表相匚w的左侧表中的|如没有匹配的q回NULL?br /> full         q回左右两侧表的所有行?br />
1.下例是内q接的例子。该实例q回PUBS数据库的出版商及作者均在同一城市的出版商及作者信息?br /> USE pubs
Ҏ一(内连?Q?br /> SELECT p.pub_id,p.pub_name,p.state,p.city,(a.au_fname+' '+a.au_lname) AS authorName
FROM publishers p      INNER JOIN authors a ON p.city = a.city

Ҏ?where子句)Q?br /> SELECT p.pub_id,p.pub_name,p.state,p.city,(a.au_fname+' '+a.au_lname) AS authorName
FROM publishers p, authors a  WHERE  p.city = a.city

l果Q?br /> p.pub_id       p.pub_name                   p.state       p.city           authorName
1389            Algodata Infosystems      CA            Berkeley       Cheryl Carson 
1389            Algodata Infosystems      CA            Berkeley       Abraham Bennet 

2.下例是左联接的事?br /> USE pubs
SELECT p.pub_id,p.pub_name,p.state,p.city,(a.au_fname+' '+a.au_lname)
AS authorName FROM publishers p   LEFT JOIN authors a ON p.city = a.city

l果Q?br /> p.pub_id     p.pub_name                   p.state         p.city                 authorName
0736           New Moon Books             MA             Boston               NULL
0877           Binnet & Hardley             DC              Washington        NULL
1389           Algodata Infosystems      CA              Berkeley            Cheryl Carson
1389           Algodata Infosystems      CA              Berkeley            Abraham Bennet
1622           Five Lakes Publishing       IL                Chicago             NULL
1756           Ramona Publishers         TX               Dallas                NULL
9901           GGG&G NULL                 M?nbsp;            chen                  NULL
9952           Scootney Books              NY               New York          NULL
9999           Lucerne Publishing           NULL           Paris                 NULL

3.下例是右联接的事?br /> USE pubs
SELECT p.pub_id,p.pub_name,p.state,p.city,(a.au_fname+' '+a.au_lname)
AS authorName FROM publishers p   RIGHT JOIN authors a ON p.city = a.city

4.一下查询ؓ外联?br /> USE pubs
SELECT (a.au_fname+' '+a.au_lname) AS authorName ,p.pub_name
FROM  authors a  FULL OUTER JOIN publishers p ON p.city = a.city
ORDER  BY p.pub_name ASC,a.au_lname,a.au_fname ASC

二、向表中插入数据
USE northwind
INSERT INTO Shippers (CompanyName,phone )
Values (N'Snowflake Shpping' , N'(523)333-4443')

三、修改表中的数据
USE PUBS
UPDATE titles SET price = price*2 WHERE pub_id IN
(SELECT pub_id FROM publishers WHERE pub_name = 'New Moon Books')

四、删除表中的数据
DELETE salesWHERE title_id IN (SELECT title_id FROM titles WHERE type = 'business')

五、创?br /> USE pubs
IF EXISTS (SELECT TABLE_NAME  FROM INFORMATION_SCHEMA. VIEWS
WHERE TABLE_NAME Q?CA_VIEW')DROP VIEW CA View GO
CREATE VIEW CA_VIEW  AS 
SLECTE au_lname,au_fname,city,state FROM authors
WHERE state = 'CA' WITH CHECK OPTION




]]>SQL语句整理[W二章]Q学习笔讎ͼhttp://www.tkk7.com/hhhaaawwwkkk/archive/2008/09/25/231109.html生命的熾?/dc:creator>生命的熾?/author>Thu, 25 Sep 2008 07:31:00 GMThttp://www.tkk7.com/hhhaaawwwkkk/archive/2008/09/25/231109.htmlhttp://www.tkk7.com/hhhaaawwwkkk/comments/231109.htmlhttp://www.tkk7.com/hhhaaawwwkkk/archive/2008/09/25/231109.html#Feedback0http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/231109.htmlhttp://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/231109.html 废话说用例子来说话?/span>
1.create database sqltest    //创徏数据库;

2.create table students (sno numeric(6,0)not null,sname varchar(8)not null,age numeric(3,0),
sex char(2),bplace varchar(20),primary key(sno))  
 //创徏表studentsQ?br />
3.create table courses (cno char(4)not null,cname varchar(10)not null,credit int)
//创徏表coursesQ?br />
4.alter table courses add primary key (cno)  
//为courses表的cno字段d主键U束Q?br />
5.create table enrools(sno numeric(6,0)not null,cno char(4)not null,grade int,primary key(sno,cno),
foreign key(sno)references students(sno),foreign key(cno) references courses(cno))   
//创徏表enroolsQƈdd键约束;

6.select sno,sname,age into girl from students where sex='?   
//ҎStudent表创建gril表,字段?个;

7.create view faculty as select sno,age,sname from students   
//ҎStudent表创图;

8.create view grade_table as select sname,cname,grade from students,enrools,courses where students.sno=enrools.sno and courses.cno=enrools.cno   
//从Student、enrools、courses 表中产生一视图Q包括sname、cname、gradeQ?br />
9.drop view grade_table    
//删除视图Q?br />
10.select cno,cname from courses where credit=3  
//在表courses中找?个学分的cno,cnameQ?br />
11.select * from students where age >22    
//在Student表中扑ևage大于22的学生状况;

12.select sname,age from students where sex='? and bplace='北京'  
//在Student表中扑և北京c男生的snameQageQ?/em>

13.select sno,sname,age from students age between 20 and 23 order by age   
 //扑ևq龄?0~23之间的学生的sno,sname,ageQ?br />
14.select sname,sex from students where age<23 and bplace in('北京','上v')   
 //扑ևq龄与23北京上v的学生的snameQsexQ?br />
15.select * from students where sname like '?'   
 //扑և姓张同学的状况;

16.select sname from students where  sno=(select sno from enrools where  grade=95)   
 //扑և学分?5分的同学姓名Q只限查找一条记录(子查询)Q?br />
17.select sname from students where sno=any(select sno from enrools where grade>90)
或者select sname from students where sno in(select sno from enrools where grade>90)    
//扑և学分?0分的同学姓名Q查扑֤条记录(子查询)Q?br />
18.select sname,cno,grade from students,enrools where students.sno=enrools.sno   
//查找全部学生的姓名,评P成WQ(q接查询Q;


19.select sname,bplace,grade from student,enrools where bplace in ('北京','上v') and grade>90 and students.sno=enrools.sno
//扑ևc诏是北京或上vQ成l在90分以上的学生snameQbpalceQgradeQ?br />
20.select min(age) from students    
//扑ևq龄最的学生Q?br />
21.select count(*) from students where age<=22   
 //扑ևq龄于{于22的学生h敎ͼ

22.select avg(grade),courses=count(*) from enrools group by son   
 //扑և学生的^均成l和评门数Q?br />
23.select sname from students where age>(select avg(age) from students)    
//扑ևq龄大于q_q龄的学生名?/em>Q?br />
24.select con, avg(grade), students=count(*)  from enrools group by con ,having count(*)>=3    
//扑և个课E的q_成WQ按评号分l,且只选择评可q?个的成WQ(GROUP BY子句把一个表按某一指定列(或一些列Q上的值相{的原则分组Q然后再Ҏl?span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">GROUP BY 子句L跟在 Where 子句后面Q当 Where 子句~省Ӟ它跟?nbsp;FROM 子句后面?span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">HAVING 子句常用于在计算集之后对行的查询q行控制?/span>
Q?br />
25.select sname,sno from students where not exists (select * from enrools where students.sno=enrools.sno)    
//查询没有M评学生的学号和姓名Q?/span>当一个子查询涉及C个来自外部查?span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">的列ӞUCؓ相关子查询correlated Subquery 。相兛_查询要用到存在测试谓?span style="background: #ffffff; color: #000000; font-family: '宋体'; mso-spacerun: 'yes'">EXISTS ?nbsp;NOT EXISTS ?nbsp;ALL ?nbsp;ANY Q?nbsp;SOME Q等?/span>Q?

26.select * from students where bplace='北京' natural join (select * from enrools where grade>=80) 
//查询c诏是北京,成W?0分以上的学生信息Q?br />
27.inster into students values (009901,'张三',23,'?,'北京')    
//插入学生信息Q?br />
28.inster into teachers (tno,tname) select distinct sno,sname from students,enrools where students.sno=enrools .sno and grade>90   
 // 把成l大?0的同学加入到教师的表中,留校?br />
29.update students set age=age+1  
//所有学生年龄加1Q?br />
30.update enrolls set grade=0 where con='c1' and '张三'=(select sname from students where students.sno=enrools.sno)   
 //把张三的成W改ؓ0Q?br />
31.delete from students where age>30   
 //删除q龄大于30的学生资料;







 



]]>
SQL语句整理[W一章]Q学习笔讎ͼhttp://www.tkk7.com/hhhaaawwwkkk/archive/2008/09/23/230666.html生命的熾?/dc:creator>生命的熾?/author>Tue, 23 Sep 2008 06:58:00 GMThttp://www.tkk7.com/hhhaaawwwkkk/archive/2008/09/23/230666.htmlhttp://www.tkk7.com/hhhaaawwwkkk/comments/230666.htmlhttp://www.tkk7.com/hhhaaawwwkkk/archive/2008/09/23/230666.html#Feedback1http://www.tkk7.com/hhhaaawwwkkk/comments/commentRss/230666.htmlhttp://www.tkk7.com/hhhaaawwwkkk/services/trackbacks/230666.html一、对数据库的基本操作

1.创徏数据库:create database database-nameQ?br /> 例:create database sales 
        ON
        (NAME=sales_dat,FILENAME="c:\mssql\data\saledat.mdf",
            SIZE=10,MAXSIZE=50,FIELGROWTH=5)
        LOG ON     
       (NAME=sales_log,FILENAME="c:\mssql\data\salelog.ldf",
            SIZE=10mb,MAXSIZE=50MB,FIELGROWTH=5MB)

2.修改数据库:alter database database-nameQ?br /> 例:alter database sales
        add file(name=sales_dat_2,filename='c:\mssql\data\salesdat1.ndf',
                    size=5mb,maxsize=100mb,filegrowth=5mb)
        modify file(name=sales_dat,size=5mb) 【注Qadd file是向数据库添加文Ӟmodify是扩展空间大?br />
3.压羃数据库:dbcc shrinkdatabase(database-name,target-percent)Q?br /> 例:sp_dboption sales,'single user',true【注Q压~前必须把用戯|ؓ单用戗?/span>
        dbcc shrinkdatabase(sales,25)        【注Q减数据库大小到原来的25%?/span>
        sp_dboption sales,'single user',fales    【注Q将数据库再讄为多用户模式?br />
4.删除数据库:drop database database-nameQ?br /> 例:drop database sales


二、对数据库表基本操作

1.创数据库Qcreate table table-name(col_name1 column_properties,
                                col_name2 column_properties,...)
例:create table orders(OrderNo char(4) not null,OrderDate datetime not null, 
        SalesExecCode char(4) not null)

2.d和删除列Qalter table table_name(add column_name column_porperties)|(drop column column_name)
例:alter table employee add department char(20) null
        alter table employee drop column department【注Q增加删除时不能加(Q否则错误?br />
3.删除数据库表Qdrop table table_name
例:drop table orders

4.使用U束强制执行数据完整性:
    U束cdQ?1)primary keyU束Q指定表中哪一列将充当主键?br />                         例:create table student(studID identity(100,5) primary key,
                                name varchar(20) not null, telNo varchar(20))

                        (2)foreing keyU束Q定义列g另一个表的primary key相匹配的列?br />                         例:create table studmark(examlID int not null,marks int not null,studID int not null,
                                primary key(examlID),foreign key(studID) references student)

                        (3)uniqueU束Q以保列中不输入重复倹{?br />                         例:alter table student add constraint unq_telNo unique(TelNo)

                        (4)checkU束Q根据指定值测试列中的输入倹{每ơ在更新数据旉要测试?br />                         例:alter table student add check(sex in ('m','f'))
                                alter table student add check(age like('[0-9][0-9]'))

                        (5)defaultU束Q用于用户在没有提供列值时Q提供一个自动添加的列倹{?br />                         例:alter table studmarks add constraint df_examid default(101) for examid
                        【注Q不能在timestamp和有identity属性列中定义defaultU束?br />
                        (6)去除U束
                           例:alter table studmarks drop constraint df_examid
                                    alter table table_name(表名)drop PRIMARY KEY CASCADE
                                    alter table table_name(表名)drop constraint pk_name(主键?CASCADE

]]>
վ֩ģ壺 ޾Ʒɫ| Ƶ߹ۿַ| ĻƬ| ޹| Ƭѿ| aëƬѸƵ| þþùƷһ| һ| Ļ߳ѿ| ޹av| ۺ޹һҳ| ƵƬ߹ۿ| þþƷavƷ| 91޹˾þþƷվ| | 88avѹۿ| ɫwwwƵ߹ۿ| ޻ɫ߹ۿ| 91鶹ƷԲ߹ۿ| þҹƵ| aaaëƬƵѹۿ| պƷר| ޹ۺרӰ| a߹ۿ| ŷaվ| 99Ƶ| ҹAëƬƵ| ۺϼ¶| ˳߲վ| ˳߹ۿŹ| ҹƬ߲| ھƷ99Ѹ| ŮƵaƵȫվһ| ޹Ƶһ| ޵һ㽶_a| av| avƬ߲| 99reѾƷƵۿ| ߹ۿƵԴ| AƬѹۿ| ߾Ʒһ㽶|