<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    SQL語句大全

    基礎

    創建數據庫

      創建之前判斷該數據庫是否存在
      if exists (select * from sysdatabases where name='databaseName')
      drop database databaseName
      go
      Create DATABASE database-name

    刪除數據庫

      drop database dbname

    備份sql server

      --- 創建備份數據的 device
      USE master
      EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
      --- 開始備份
      BACKUP DATABASE pubs TO testBack

    創建新表

      create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
      根據已有的表創建新表:
      A:go
      use 原數據庫名
      go
      select * into 目的數據庫名.dbo.目的表名 from 原表名(使用舊表創建新表)
      B:create table tab_new as select col1,col2… from tab_old definition only

    創建序列

      create sequence SIMON_SEQUENCE
      minvalue 1 -- 最小值
      maxvalue 999999999999999999999999999 -- 最大值
      start with 1 -- 開始值
      increment by 1 -- 每次加幾
      cache 20;

    刪除新表

      drop table tabname

    增加一個列

      Alter table tabname add colname coltype

    刪除一個列

      Alter table tabname drop column colname

    添加主鍵

      Alter table tabname add primary key(col)
      說明:刪除主鍵:Alter table tabname drop primary key(col)

    創建索引

      create [unique] index idxname on tabname(col…。)
      刪除索引:drop index idxname on tabname
      注:索引是不可更改的,想更改必須刪除重新建。

    創建視圖

      create view viewname as select statement
      刪除視圖:drop view viewname

    簡單基本的sql語句

      (1) 數據記錄篩選:
      sql="select * from 數據表 where 字段名=字段值 order by 字段名 [desc]"
      sql="select * from 數據表 where 字段名 like '%字段值%' order by 字段名 [desc]"
      sql="select top 10 * from 數據表 where 字段名=字段值 order by 字段名 [desc]"
      sql="select top 10 * from 數據表 order by 字段名 [desc]"
      sql="select * from 數據表 where 字段名 in ('值1','值2','值3')"
      sql="select * from 數據表 where 字段名 between 值1 and 值2"
      (2) 更新數據記錄:
      sql="update 數據表 set 字段名=字段值 where 條件表達式"
      sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式"
      (3) 刪除數據記錄:
      sql="delete from 數據表 where 條件表達式"
      sql="delete from 數據表" (將數據表所有記錄刪除)
      (4) 添加數據記錄:
      sql="insert into 數據表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"
      sql="insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表)
      (5) 數據記錄統計函數:
      AVG(字段名) 得出一個表格欄平均值
      COUNT(*;字段名) 對數據行數的統計或對某一欄有值的數據行數統計
      MAX(字段名) 取得一個表格欄最大的值
      MIN(字段名) 取得一個表格欄最小的值
      SUM(字段名) 把數據欄的值相加
      引用以上函數的方法:
      sql="select sum(字段名) as 別名 from 數據表 where 條件表達式"
      set rs=conn.excute(sql)
      用 rs("別名") 獲取統計的值,其它函數運用同上。
      查詢去除重復值:select distinct * from table1
      (5) 數據表的建立和刪除:
      CREATE TABLE 數據表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )

    幾個高級查詢運算詞

      A:UNION 運算符
      UNION 運算符通過組合其他兩個結果表(例如TABLE1 和TABLE2)并消去表中任何重復行而派生出一個結果表。當 ALL 隨UNION 一起使用時(即UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自TABLE1 就是來自TABLE2。
      B: EXCEPT 運算符
      EXCEPT 運算符通過包括所有在TABLE1 中但不在TABLE2 中的行并消除所有重復行而派生出一個結果表。當ALL 隨EXCEPT 一起使用時(EXCEPT ALL),不消除重復行。
      C:INTERSECT 運算符
      INTERSECT 運算符通過只包括TABLE1 和TABLE2 中都有的行并消除所有重復行而派生出一個結果表。當ALL 隨INTERSECT 一起使用時(INTERSECT ALL),不消除重復行。
      注:使用運算詞的幾個查詢結果行必須是一致的。

    使用外連接

      A、left outer join:
      左外連接(左連接):結果集既包括連接表的匹配行,也包括左連接表的所有行。
      SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
      B:right outer join:
      右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
      C:full outer join:
      全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。

    判斷對象是否存在

    判斷數據庫是否存在

      if exists (select* from sysdatabases wherename= '數據庫名')
      dropdatabase[數據庫名]

    判斷表是否存在

      if not exists (select * from sysobjects where [name] = '表名' and xtype='U')
      begin
      --這里創建表
      end

    判斷存儲過程是否存在

      if exists (select* from sysobjects whereid = object_id(N'[存儲過程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
      dropprocedure[存儲過程名]

    判斷臨時表是否存在

      if object_id('tempdb..#臨時表名') isnot null
      droptable#臨時表名

    判斷視圖是否存在

      --SQL Server 2000
      IF EXISTS (SELECT* FROM sysviews WHEREobject_id = '[dbo].[視圖名]'
      --SQL Server 2005
      IF EXISTS (SELECT* FROM sys.views WHEREobject_id = '[dbo].[視圖名]'

    判斷函數是否存在

      if exists (select* from dbo.sysobjects whereid = object_id(N'[dbo].[函數名]') and xtype in (N'FN', N'IF', N'TF'))
      dropfunction[dbo].[函數名]

    獲取創建信息

      SELECT[name],[id],crdate FROM sysobjects where xtype='U'
      /*
      xtype 的表示參數類型,通常包括如下這些 C = CHECK約束 D = 默認值或DEFAULT約束 F = FOREIGNKEY約束 L = 日志 FN = 標量函數 IF = 內嵌表函數 P = 存儲過程 PK = PRIMARYKEY約束(類型是K) RF = 復制篩選存儲過程 S = 系統表 TF = 表函數 TR = 觸發器U = 用戶表 UQ = UNIQUE約束(類型是K) V = 視圖 X = 擴展存儲過程 */

    判斷列是否存在

      if exists(select* from syscolumns whereid=object_id('表名') and name='列名')
      altertable表名dropcolumn列名

    判斷列是否自增列

      if columnproperty(object_id('table'),'col','IsIdentity')=1
      print '自增列'
      else
      print '不是自增列'
      SELECT* FROM sys.columns WHEREobject_id=OBJECT_ID('表名')
      AND is_identity=1

    判斷表中是否存在索引

      if exists(select* from sysindexes whereid=object_id('表名') and name='索引名')
      print '存在'
      else
      print '不存在

    查看數據庫中對象

      SELECT* FROM sysobjects WHEREname='對象名'
      select * from table(所要查詢的表名) where coloum(條件)

    提升

    復制表

      (只復制結構,源表名:a 新表名:b) (Access可用)
      法一:select * into b from a where 1<>1
      法二:select top 0 * into b from a

    拷貝表

      (拷貝數據,源表名:a 目標表名:b) (Access可用)
      insert into b(x, y, z) select d,e,f from a;

    跨數據庫之間表的拷貝

      (具體數據使用絕對路徑) (Access可用)
      insert into b(x, y, z) select d,e,f from a in ‘具體數據庫’ where 條件
      例子:。.from b in '"&Server.MapPath("."&"\data.mdb" &"' where..

    子查詢

      (表名1:a 表名2:b)
      select a,b,c from a where a IN (select d from b 或者: select a,b,c from a where a IN (1,2,3)

    顯示文章最后時間

      select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

    外連接查詢

      (表名1:a 表名2:b)
      select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

    在線視圖查詢

      (表名1:a
      select * from (Select a,b,c FROM a) T where t.a > 1;

    between的用法

      between限制查詢數據范圍時包括了邊界值,not between不包括
      select * from table1 where time between time1 and time2
      select a,b,c, from table1 where a not between 數值1 and 數值2

    in 的使用方法

      select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

    刪除主表沒有的信息

      兩張關聯表delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1

    四表聯查問題

      select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

    日程安排提前五分鐘

      SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5

    一條sql 搞定數據庫頁

      select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段= a.主鍵字段 order by a.排序字段

    前10條記錄

      select top 10 * from table1 where 范圍

    選擇排名

      選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等。)
      select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

    派生結果表

      包括所有在TableA 中但不在TableB和TableC 中的行并消除所有重復行而派生出一個結果表
      (select a from tableA except (select a from tableB) except (select a from tableC)

    隨機取出10條數據

      select top 10 * from tablename order by newid()

    隨機選擇記錄

      select newid()

    刪除重復記錄

      Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

    列出數據庫里的表名

      select name from sysobjects where type='U'

    列出表里的所有的

      select name from syscolumns where id=object_id('TableName')

    列示排列

      列示type、vender、pcs字段,以type字段排列,case可以方便地實現多重選擇,類似select 中的case。
      select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
      顯示結果:
      type vender pcs
      電腦A 1
      電腦A 1
      光盤B 2
      光盤A 2
      手機B 3
      手機C 3

    初始化表table1

      TRUNCATE TABLE table1

    選擇從10到15的記錄

      select top 5 * from (select top10 * from (select top 15 * from table order by id asc) table_別名 order by id desc) table_2 order by id

    數據類型轉換

      declare @numid int
      declare @id varchar(50)
      set @numid=2005
      set @id=convert(varchar,@numid)
      通過上述語句完成數據類型Int轉換成varchar,其他轉換類似,可參看convert函數

    技巧

    1=1,1=2的使用

      在SQL語句組合時用的較多
      “where 1=1”是表示選擇全部 “where 1=2”全部不選,
      如:
      if @strWhere !='
      begin
      set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
      end
      else
      begin
      set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
      end
      我們可以直接寫成
      set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 and '+ @strWhere

    收縮數據庫

      --重建索引
      DBCC REINDEX
      DBCC INDEXDEFRAG
      --收縮數據和日志
      DBCC SHRINKDB
      DBCC SHRINKFILE

    壓縮數據庫

      dbcc shrinkdatabase(dbname)
      轉移數據庫給新用戶以已存在用戶權限
      exec sp_change_users_login 'update_one','newname','oldname'
      go

    檢查備份集

      RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

    修復數據庫

      Alter DATABASE [dvbbs] SET SINGLE_USER
      GO
      DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
      GO
      Alter DATABASE [dvbbs] SET MULTI_USER
      GO

    日志清除

      SET NOCOUNT ON
      DECLARE @LogicalFileName sysname,
      @MaxMinutes INT,
      @NewSize INT
      USE tablename -- 要操作的數據庫名
      Select @LogicalFileName = 'tablename_log', -- 日志文件
      @MaxMinutes = 10, -- Limit on time allowed to wrap log.
      @NewSize = 1 -- 你想設定的日志文件的大小(M)
      -- Setup / initialize
      DECLARE @OriginalSize int
      Select @OriginalSize = size
      FROM sysfiles
      Where name = @LogicalFileName
      Select 'Original Size of ' + db_name() + ' LOG is ' +
      CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
      CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
      FROM sysfiles
      Where name = @LogicalFileName
      Create TABLE DummyTrans
      (DummyColumn char (8000) not null)
      DECLARE @Counter INT,
      @StartTime DATETIME,
      @TruncLog VARCHAR(255)
      Select @StartTime = GETDATE(),
      @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
      DBCC SHRINKFILE (@LogicalFileName, @NewSize)
      EXEC (@TruncLog)
      -- Wrap the log if necessary.
      WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
      AND @OriginalSize = (Select size FROM sysfiles Where name = @LogicalFileName)
      AND (@OriginalSize * 8 /1024) > @NewSize
      BEGIN -- Outer loop.
      Select @Counter = 0
      WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
      BEGIN -- update
      Insert DummyTrans VALUES ('Fill Log')
      Delete DummyTrans
      Select @Counter = @Counter + 1
      END
      EXEC (@TruncLog)
      END
      Select 'Final Size of ' + db_name() + ' LOG is ' +
      CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
      CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
      FROM sysfiles
      Where name = @LogicalFileName
      Drop TABLE DummyTrans
      SET NOCOUNT OFF

    更改某個表

      exec sp_changeobjectowner 'tablename','dbo'

    存儲更改全部表

      Create PROCEDURE dbo.User_ChangeObjectOwnerBatch
      @OldOwner as NVARCHAR(128),
      @NewOwner as NVARCHAR(128)
      AS
      DECLARE @Name as NVARCHAR(128)
      DECLARE @Owner as NVARCHAR(128)
      DECLARE @OwnerName as NVARCHAR(128)
      DECLARE curObject CURSOR FOR
      select 'Name' = name,
      'Owner' = user_name(uid)
      from sysobjects
      where user_name(uid)=@OldOwner
      order by name
      OPEN curObject
      FETCH NEXT FROM curObject INTO @Name, @Owner
      WHILE(@@FETCH_STATUS=0)
      BEGIN
      if @Owner=@OldOwner
      begin
      set @OwnerName = @OldOwner + '.' + rtrim(@Name)
      exec sp_changeobjectowner @OwnerName, @NewOwner
      end
      -- select @name,@NewOwner,@OldOwner
      FETCH NEXT FROM curObject INTO @Name, @Owner
      END
      close curObject
      deallocate curObject
      GO

    SERVER中循環寫入數據

      declare @i int
      set @i=1
      while @i<30
      begin
      insert into test (userid) values(@i)
      set @i=@i+1
      end

    posted on 2012-04-17 10:54 SkyDream 閱讀(1147) 評論(0)  編輯  收藏 所屬分類: SQL語句

    <2012年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導航

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产日韩在线观频| 亚洲高清视频免费| 国产免费久久精品| 亚洲精品无播放器在线播放| 香蕉97超级碰碰碰免费公| 亚洲成a人片在线网站| 成人免费黄色网址| 亚洲免费在线观看视频| 国产成人yy免费视频| 亚洲娇小性色xxxx| 国产jizzjizz免费视频| 黄色a三级免费看| 国产亚洲精品自在线观看| 成人自慰女黄网站免费大全 | 久久影视国产亚洲| 中国一级特黄高清免费的大片中国一级黄色片 | 亚洲精品天堂在线观看| 好男人视频社区精品免费| 精品国产亚洲一区二区三区在线观看| 国产成人免费ā片在线观看| 直接进入免费看黄的网站| 亚洲精品成人片在线观看| 黄网站色视频免费在线观看的a站最新| 亚洲AV无码乱码在线观看裸奔| 最近免费2019中文字幕大全| 亚洲sss综合天堂久久久| 精品国产免费观看久久久| 一级毛片免费在线观看网站| 亚洲国产成人精品无码区在线观看 | 亚洲av网址在线观看| 又粗又大又黑又长的免费视频| 亚洲国产精品网站在线播放| 国产午夜亚洲精品午夜鲁丝片| 人人玩人人添人人澡免费| 亚洲第一男人天堂| 国产偷窥女洗浴在线观看亚洲| **俄罗斯毛片免费| 新最免费影视大全在线播放| 亚洲视频免费在线看| 亚洲AⅤ永久无码精品AA| 午夜理伦剧场免费|