标题: [SQLServer] SQL语法教育训练 (查看:1792 回复:13)
cckjzb
学徒网管




UID 504891
精华 0
积分 10
帖子 5
MST币 34 点    
BST币 10 点    赚取
阅读权限 60
注册 2007-3-25
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-21 14:22  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
爱琴思邮件系统iGENUS V5.0
SQL语法教育训练
本帖发表在我是网管论坛,帖子地址:http://bbs.54master.com/160055,1,1

SQL语法教育训练

SQL环境的一些查询指令
1.
Sp_help

/ 列出目前的Database所有的Table
2.
Sp_columns authors

/ 列出authors这个Table所有栏位的资讯
3.
Sp_Server_Info

/ SQL Server的设定讯息
4.
Sp_Who

/ 查出SQL Server有谁在上面正在做什么事
5.
Sp_HelpSort

/ 查出SQL Server的Sort Order
6.
Sp_HelpServer

/ 查SQL Server Name

单一Table的Select
1.
Select* from Accn

/ 列出Accn这个Table所有的资料

2.Select Acc_No, Name, Acc_No_Up, DC, Eng_Name from Accn

/
 列出Accn这个Table内的Acc_No, Name,Acc_No_Up,DC,Eng_Name五个栏位的所有资料


3.Select Acc_No, Name+’’+Eng_Name Frme Accn

/
 列出Accn这个Table内的Acc_No及Name,Eng_Name两个栏位字串相加后的资料


4.Select Acc_No, Name+’’+Eng_Name as “Full Name” From Accn
/ 同上,并替Name+’’+Eng_Name两个栏位字串相加后的栏位加上表头名称“Full Name”

5.Select * From Accn Where Acc_No=’1111’

/
 由Accn这个Table,找出Acc_No这个栏位为’1111’的资料。


6.Select * From Accn order by Acc_No

/
 由Accn这个Table,找出Acc_No这个栏位排序由小到大


7.Select Acc_No, count (*) From Accn Group by Acc_No

/
 由Accn这个Table,找出Acc_No栏位个别计算笔数


8.Select * From Accn Where Name like ’应%’

/
 由Accn这个Table,找出Name栏位开头为“应”的资料


9.Select * From Accn Where Name like ‘%款’

/
 由Accn这个Table,找出Name栏位结尾为“款”的资料


10.Select * From AccnWhere Name like ‘%版%’

/
 由Accn这个Table,找出Name栏位资料中有“收”的资料


11.Select Distinct Mak_No from Vhed

/
 由Vhed个Table,找出Mak_No栏位,但相同的资料只列出一笔


12.Select mak_No, Mak_Dat, Voh_Id fromDB_0003..Vhed where Voh_Id=’4’

/
若不在Dn_0003的DataBase内,亦可透过指定的方式抓取Db_0003..Vhed的Table,正确的语法database Name. Owner. Table Name’ Owner若是自己可省略不打。


13. Where可以为+,>,<,>=,<=,<>,in(), not in()

14. Select Mak_No, Mak_Dat, Voh_Id From Vhed Where Voh_Id in (‘3’,’4’)

/
由Vhed这个Table,找出Mak_No, Mak_Dat, Voh_Id栏位,Voh_Id这个栏位为‘3’或‘4’的资料


15. Select * From Salm

/
列出Salm这个Table所有的资料


16. Select Ps_No‘订单号码’,Sum(Qty)‘合计’From Tf_pss Where Ps_No in (‘SA91010001’,’SA97030001’) Group by Ps_No

/
由Tp_Pss这个Table,依Ps_No找出Qty栏位全计,且Ps_No这个栏位为‘SA91010001’,’SA97030001’的资料


17. Select Ps_No “订单号码”,Sum(Qty) “合计” From TF_PSS Where Ps_No in (‘SA91010001’,’SA97030001’) Group by Ps_No Having Sum(Qty) >1

/
由TF_PSS这个Table,依Ps_No找出Qty栏位合计,且PS_No这个栏位为‘SA91010001’,’SA97030001’的资料,且合计需大于1才列出


多个Table的select
1. Select * From Mf_pss

/
列出Mf_Pss这个Table所有的资料


2. Select * From TF_PSS

/
列出TF_PSS这个Table所有的资料


3. Select * From MF_PSS, TF_PSS

/
列出MP_PSS及TF_PSS这两个Table所有的资料,请注意这个资料不是我们所想要的,因为列出来的是指两个Table的笔数相乘之后的结果,没能任何关系性,所以请看下面列子


4. Select * From MF_PSS, TF_PSS Where MF_Pss. Ps_No=TF_Pss. Ps_No

/
列出MF_PSS及TF_PSS这两个table所有的资料,但两个Table的PS_No相同的资料合并成一笔列出


5. Select * From Mf_Pss A, TF_Pss B Where A. PS_Id = b.PS_Id

/
同上例,可将MF_PSS取别名A,TF_Pss取别名B,如此若要使用很多栏位时,只要在栏位前面的tablename改用别名表示即可,省略打字的时间,亦不容易打错

6. Select A. Ps_id, A. Ps_No,A. PS_Dd,B. Ps_Id from TF_Pss B, MF_Pss A where B. PS_id=A. PS_id and B. Qty>100


/
列出MF_Pss及TF_Pss这两个Table的某些栏位,两个Table的Ps_Id相同的资料合并成一笔列出,且TF_Pss的Qty栏位需大于100才列出。


7. Select A. Ps_id,A. PS_NO, A. PS_DD from MF_Pss A, TF_PSS B Where B. PS_id=A. PS_id and B. Qty >100.

/
 列出MF_PSS这个Table的某些栏位,但参考到TF_PSS这个Table的Qty栏位需大于100才列出


8. Select PS_id, Ps_No, PS_DD From DB_0003..MF_PSS Where (PS_Id) in (Select PS_id From TF_PSS Where Qty=100)

/
同上,但请注意第6,7,8三个作法是否类似,但结果不同,在第6,7题会比第8题多出一笔,因为有一个MF_PSS有两笔的TF_Pss,造成第6,7题所列出的资料可能不是我们所要的,若要避免这个情形,就要使用第8题的作法,总结来说:要列出某一Table的资料,却必须参考其它Table的条件,则使用in的语法是最正确的




1. Select * From MF_Pss Where Substring (Ps_No,3,4) = ‘9703’

/ MF_PSS
这个Table,PS_No这个栏位从第三个byte开始四个byte为’9703’的记录列出来,Substring是一个字串函数


2. Select * From MF_Pss Where PS_No Between ‘PC97030001’ and ‘97090003’

/
由MF_PSS这个Table,PS_NO这个栏位为介于‘PC97030001’and ‘97090003’的资料,包含‘PC97030001’及‘97090003’


3. Select PS_No, PS_DD, Qty “订单数量”,Qty * 1.1 “实际出货数量” From TF_PSS

/
由TF_PSS这个Table,列出PS_No,,PS_DD,Qty三个栏位及Qty这个栏位的值乘上1.1之后一起列出


4. Select * Into MPSS from MF_Pss

/
将MF_PSS这个Table所有资料写入MPSS的Table内,注意MPSS为新的Table


5. Select * Into TPSS from TF_Pss

/
将TF_PSS这个Table所有资料写入TPSS的Table内,注意TPSS为新的Table


6. Select * from TPSS

7. Delete TPSS Where PS_No = ‘PC97030001’

/
将TPSS这个Table内PS_No为‘PC97030001’的记录删除

8.Select * From MPSS Where PS_NO Not in (Select PS_No From TPSS)

/
将MPSS这个Table内PS_No在TPSS找不到的记录列出来不,意思可以找出有表头没有表身或是有表身没有表头的资料


9. Insert into TPSS (Ps_Id, Ps_No, Ps_Dd, Qty, Itm, Wh)
Values (‘SA’,’SA00310099’.’2000/3/10’, 5, ‘1’, ‘0000’)

/ Insert into
指令可新增记录到Table内,例如新增资料到TPSS这个Table内,资料值就在Values后面的资料,若Insert全部栏位则TPSS后面的栏位可以省略


10. Update TPSS Set Qty=6 Where PS_No=’PC97030001’

/ update
指令可将栏位值改变,例如将TPSS这个Table内PS_No为‘PC97030001’的记录数量都改为6


11.BEGIN TRANSACTION

Select * From TPSS Where PS_No= ‘PC97030001’


Update TPSS Set Qty=10 Where PS_No=‘PC97030001’


Select * From TPSS Where PS_No=‘PC97030001’


Rollback


Select * From TPSS Where PS_No=‘PC97030001’


/ Rollback
指令可将Update的资料回复成原来的值


12. BEGIN TRANSACTION

Select * From TPSS Where PS_No=‘PC97030001’


Update TPSS Set Qty=20 Where PS_No=‘PC97030001’


Select * From TPSS Where PS_No=‘PC97030001’


Commit


SELECT * From TPSS Where PS_No=‘PC97030001’


BEGIN TRANSACTION


Rollback


Select * From TPSS Where PS_No=‘PC97030001’


/ Commit
指令可将Update的资料真正写入资料库内


13. Truncate Table TPSS

/ Truncate
指令可将Table的所有资料全部删除,但Table架构仍在,意即将Table清空


14. Drop Table TPSS

/ Drop
指令可将Table删除


SQL的效能调整
一、清除LOG文件:
1.
LOG文件的日渐增大会占用海量存储器,降低SQL工作交通,因此要随时清除。

2.
对于刚开始使用SQL时,进入SQL SERVER ENTERPRICE MANAGER (管理器),在指定数据库的PROPERTIES(道具)的OPTIONS(选项)中对AUTO SHRINK及TRUNCATE LOG ON CHECKPOINT两项选项打勾设置即可。

3.
如果没进行以上设置,则在SQL SERVER QUERY ANALYZER (分析器)执行如下词句,之后再进行上条所述的设置:

CREATE TABLE NEWTABLE (A INT)
GO
INSERT INTO NEWTABLE VALUES (10)
INSERT INTO NEWTABLE VALUES (20)
INSERT INTO NEWTABLE VALUES (30)
GO
DECLARE @COUNT=1
SET@COUNT=1
WHILE @COUNT < 100 BEGIN
UPDATE NWETABLE SET A=A+1
BACKUP LOG 数据库名 WITH TRUNCATE)ONLY
DBCC SHRINK DATA BASE (数据库名)
SET @COUNT=@COUNT+1
END
4.
如果硬盘有分区(比如C盘和D盘),SQL安装在C盘。为节省空间,当LOG文件增大到一定程度,希望转增到D盘,可以进入SQL SERVER ENTERPRICE MANAGER (管理器),在指定数据库的PROPERTIES (道具)的TRANSACTION LOG中新增一个LOG在D盘即可。


二、如何做REINDEX
1. 在SQL SERVER QUERY ANALYZER (分析器)执行如下语句:

DBCC DBREINDEX (table)

2.
在指定数据库的ALL TASKS(任务)中建立MAINTENANCE PLAN(维护计划),按指定期间自动执行JOB即可。

3.
在sunlike系统中备份出资料,再新建一帐套,恢复回来,系统就会自动重新索引。


三、更改CODE PAGE
1. 执行SP_HELPSORT查看当前的SQL的CODEPAGE。
2. 停掉SQL SERVER。
3. COPY数据库( SATA\*.MDF*.IDF)到指定路径。
4. 执行REBUILDM.EXE (BINN\).

四、恢复数据库(SUSPECT STATUS)

sp_detach_db‘db_tt’,‘true’


exec sp_attach_db @dbname=N’db_tt’,


@filename1=N’c:\mssql7\data\dat_tt.mdf,


@filename1=N’c:\mssql7\data\log_tt.ldf,


五、修补数据库记录(DBCC CHECKDB)
1.
DBCC
 CHECKDB(‘数据库名’, REPAIR_FAST)
快速修补

2.
DBCC
 CHECKDB(‘数据库名’, REPAIR_REBUILD)
可重新索引

3.
DBCC
 CHECKDB(‘数据库名’, REPAIR_ALLOW_DATA_LOSS) 允许丢失记录


[ 点这里复制网址,推荐给你QQ/MSN上的好友们! ]
本帖最近评分记录
特蓝克斯 2007-4-26 08:48 MST币 +10 我很赞同
特蓝克斯 2007-4-26 08:48 BST币 +1 我很赞同
本站声明:以上内容由网友 cckjzb 提供,与54master立场无关!
[ 顶部 ]
chinavone
学徒网管




UID 461743
精华 0
积分 32
帖子 117
MST币 311 点    
BST币 32 点    赚取
阅读权限 60
注册 2006-11-28
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-22 09:39  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
挺好,总结出来了各种经验

本站声明:以上内容由网友 chinavone 提供,与54master立场无关!
[ 顶部 ]
jink250
衰哥霉女




UID 460133
精华 0
积分 -6
帖子 33
MST币 5 点    
BST币 -6 点    赚取
阅读权限 0
注册 2006-11-23
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-22 13:00  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
jink250
非常好,让我学到很多

本站声明:以上内容由网友 jink250 提供,与54master立场无关!
[ 顶部 ]
Haissen
学徒网管




UID 515455
精华 0
积分 0
帖子 3
MST币 16 点    
BST币 0 点    赚取
阅读权限 60
注册 2007-4-22
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-23 06:41  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友添加 Haissen 为MSN好友 通过MSN和 Haissen 交谈
h
是不错的--------------

本站声明:以上内容由网友 Haissen 提供,与54master立场无关!
[ 顶部 ]
sjlhp
初级网管



UID 459699
精华 0
积分 169
帖子 624
MST币 1999 点    
BST币 169 点    赚取
阅读权限 80
注册 2006-11-22
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-23 07:16  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
支持一下~~~~~~~~~~~~~

本站声明:以上内容由网友 sjlhp 提供,与54master立场无关!
[ 顶部 ]
niliou
学徒网管




UID 512437
精华 0
积分 1
帖子 13
MST币 31 点    
BST币 1 点    赚取
阅读权限 60
注册 2007-4-14
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-23 08:13  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
不错的说~!多谢楼主啦

本站声明:以上内容由网友 niliou 提供,与54master立场无关!
[ 顶部 ]
海盛网络
学徒网管




UID 515628
精华 0
积分 0
帖子 12
MST币 31 点    
BST币 0 点    赚取
阅读权限 60
注册 2007-4-23
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-23 11:04  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
谢谢分享!!!

本站声明:以上内容由网友 海盛网络 提供,与54master立场无关!
[ 顶部 ]
jiehui520
学徒网管




UID 505665
精华 0
积分 5
帖子 31
MST币 43 点    
BST币 5 点    赚取
阅读权限 60
注册 2007-3-27
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-25 16:11  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
顶一下 :lol

本站声明:以上内容由网友 jiehui520 提供,与54master立场无关!
[ 顶部 ]
nokia4321
衰哥霉女




UID 69233
精华 0
积分 -1
帖子 84
MST币 726 点    
BST币 -1 点    赚取
阅读权限 0
注册 2006-4-15
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-26 16:59  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
多谢楼主分享。 。。。。。。。。。。。。。。。。

本站声明:以上内容由网友 nokia4321 提供,与54master立场无关!
[ 顶部 ]
shymlx
学徒网管




UID 387298
精华 0
积分 4
帖子 37
MST币 712 点    
BST币 4 点    赚取
阅读权限 60
注册 2006-6-1
状态 离线
 
[ 使用道具 ]  
发表于 2007-4-27 08:44  [ 资料 ]  [ 博客 ]  [ 短消息 ]  [ 加为好友
感谢楼主,我正在学习SQL语言,这对我非常有帮助!

本站声明:以上内容由网友 shymlx 提供,与54master立场无关!
[ 顶部 ]
  
 



当前时区 GMT+8, 现在时间是 2008-9-7 16:15

Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.126382 second(s), 13 queries , Gzip enabled

清除 Cookies - 关于我是网管 - 联系我是网管 - 广告服务 - 诚聘版主 - 无图版 - WAP -