SQL环境的一些查询指令
作者:cmscn 日期:2008-01-09
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) 允许丢失记录
评论: 0 | 引用: 0 | 查看次数: 591
发表评论