sql温习笔记.docx
文本预览下载声明
分享自己这近一个月的sql温习笔记--查询所有数据库use masterselect*from sysdatabases where dbid4;--系统自带的数据库分别是master-1,model-3,msdb-4,tempdb-2--查询数据库中所有数据库(存储过程)exec sp_helpdb;--查询指定数据库中的表use masterselect*from sysobjects where xtype=u ;ifobject_id(#test1) isnotnulldroptable #test1gocreatetable #test1( id intnotnullprimarykey, name nvarchardefault(haha))droptable #test1set nocount offselect name from sysobjects where xtype=u--读数据库中表名select name from syscolumns where id=(selectmax(id) from sysobjects where xtype=uand name=表名)--读取某表的列名--exec调用保存在变量中的批处理代码declare@sqlasvarchar(100);set@sql=printthis is a message......;;;exec(@sql)------------------------------------------DDL--数据定义语言--DML--数据操作语言--数据库定期备份ifday(current_timestamp)=9beginprint今天是一个月的第一天,数据库备份print开始完全备份backupdatabase dbtest todisk=E:\backup\backup_dbtest_full.bakwith init;print完全备份成功endelsebeginprint今天是一个月的最后一天,数据库备份print开始差异备份backupdatabase dbtest todisk=E:\backup\backup_dbtest_diff.bakwith differential;print差异备份成功end------------------------------------------------------------use tempdb;ifobject_id(dbo.Orders,u) isnotnulldroptable dbo.Orders;createtable dbo.Orders(orderid intnotnullconstraint pk_order primarykey,orderdate datetimenotnullconstraint def_orderdate default(current_timestamp))----------------子查询----------------------------------------------子查询分为1-独立子查询2-相关子查询--返回结果可以是一个单独的值(标量)或者多个值或者整个表变量declare@maxidasint= (selectmax(orderid) from Sales.Orders);select orderid,orderdate,empid,custidfrom Sales.Orderswhere orderid=@maxid;--sql2005select orderid,orderdate,empid,custidfrom Sales.Orderswhere orderid=(selectmax(orderid) from Sales.Orders);--对于有效的标量子查询,它的返回值不能超过一个,如果标量子查询返回了多个值,在运行时可能会失败。--比如select orderidfrom Sales.Orderswhere empid=(select E.empid from HR.Employees as E where E.lastname like NB%)select E.lastname from HR.Employees as E--因为恰巧该表中只有一个人的名字是以B开头的所以,sql会认为右边子查询是标量值--假如右边表达式没有返回任何值,那么两者比较得出的结果是NULL,而与NULL比较的结果都为UNKNOW,所以不会返回任何值--当然上面的查询还可以用联结查询select O.orderidfrom HR.Employees as Ejoin Sales.Orders as Oon E.em
显示全部