SQL语法 操作

   SQL语法
 
1.基本语法
(1)插入
  INSERT mytable (first_column,second_column,third_column)
  VALUES (‘some data’,’some more data’,’yet more data’)
  (2)修改
  UPDATE mytable  SET  first_column=’Updated!’
                       Second_column=’Updated!’
                       Third_column=’Updated!’
  WHERE first_column=’Update Me1’
(3)一次插入多条语句
  INSERT mytable (first_column,second_column)
  SELECT another_first,another_second
  FROM anothertable
  WHERE another_first=’Copy Me!’
 
  SELECT * INTO newtable FROM mytable

  SELECT first_column INTO newtable
  FROM mytable
  WHERE second_column=’Copy Me!’
(4)求平均数
  SELECT AVG(vote) ‘the_average’ FROM opinion
(5)distinct(唯一性,不重复)
  SELECT COUNT(DISTINCT au_lname) FROM authors(不同名字的作者的数目)
(6)求和
  SELECT SUM(purchase_amount) FROM orders
(7)最大值
  SELECT MAX(vote) FROM opinion
(8)最小值
  SELECT MIN(vote) FROM opinion(所有值中的最小值)
(9)其它例子 
  SELECT username FROM opinion WHERE vote>6  and  vote<11

  SELECT username FROM opinion WHERE vote BETWEEN 7 AND 10

  SELECT username FROM opinion WHERE vote=1 or vote

  SELECT username FROM opinion WHERE vote IN (1,10)

  SELECT vote FROM opinion  WHERE  username IN (‘Bill Gates’,’President Clinton’)

  SELECT vote FROM opinion   WHERE username NOT IN (‘Bill Gates’,’President Clinton’)

  SELECT username FROM opinion WHERE vote NOT BETWEEN 7 and 10
(10)convert()格式转化
  SELECT CONVERT(CHAR(8),price)+’US Dollars’ FROM orders

  SELECT ‘The vote is’+CONVERT(CHAR(1),vote) FROM opinion

(11)通配符((%代表0个或多个字符)):
  SELECT SITE_name FROM site_directory   WHERE site_desc LIKE ‘%trading cark%’
(12)[]用来匹配处在指定范围内的单个字符
  SELECT site_name FROM site_directory WHERE site_name LIKE ‘[A-M]%’

(13)以A,B或C开头
  SELECT site_name FROM site_directory WHERE site_name LIKE  ‘[ABC]%’
  取出那些首字母在C到F之间,或者以字母Y开头的站点:
  SELECT site_name FROM site_directory WHERE site_name LIKE ‘[C-FY]%’

(14)脱字符(^)来排除特定的字符。例如,要得到那些名字不以Y开头的站点
  SELECT site_name FROM site_directory WHERE site_name LIKE ‘[^Y]%’

(15)下划线字符(_)只代表单个字符
  SELECT site_name FROM site_directory WHERE site_name LIKE ‘M_crosoft’

  注意:
  如果你想匹配百分号或下划线字符本身,你需要把它们括在方括号中。如果你想匹配连字符(-),应把它指定为方括号中的第一个字符。如果你想匹配方括号,应把它们也括在方括号中。例如,下面的语句返回所有其描述中包含百分号的站点:
  SELECT site_name FROM site_directory WHERE site_desc LIKE ‘%[%]%’

(16)删除空格
  有两个函数,TTRIM()和LTRIM(),可以用来从字符串中剪掉空格。函数LTRIM()去除应该字符串前面的所有空格;函数RTRIM()去除一个字符串尾部的所有空格。这里有一个任何使用函数RTRIM()的例子:

  SELECT RTRIM(site_name) FROM site_directory
(17)操作日期
  通过函数GETDATE(),你可以获得当前的日期和时间。返回当前日期和时间 返回如下的结果:
  SELECT GETDATE()
 
  显然,如果你将来使用这个函数,你得到的日期将比这个时间晚,或者梗早。
  函数GETDATE()可以用来作为DATEDIME()型字段的缺省值。这对插入记录时保存当时的时间是有用的。例如,假设有一个表用来保存你站点上的活动日志。每当有一个访问者访问到你的站点时,就在表中添加一条新记录,记下访问者的名字,活动,和进行访问的时间。要建立一个表,其中的记录包含有当前的日期和时间,可以添加一个DATETIME型字段,指定其缺省值为函数GETDATE()的返回值,就象这样:
  CREATE TABLE site_log (
       username VARCHAR(40),
       useractivity VARCHAR(100),
       entrydate DATETIME DEFAULT GETDATE())
 

  函数GETDATE()的返回值在显示时只显示到秒。实际上,SQL Sever内部时间可以精确到毫秒级(确切地说,可以精确到3.33毫秒)
  得到不同格式的日期和时间,你需要使用函数CONVERT()
  SELECT CONVERT(VARCHAR(30),GETDATE(),9)
  注意例子中数字9的使用。这个数字指明了在显示日期和时间时使用哪种日期和时间格式。当这个语句执行时,将显示如下的日期和时间
  表11.1  日期和时间的类型
  类型值            标准             输出
   0                 Default           mon dd yyyy hh:miAM
   1                 USA               mm/dd/yy
   2                 ANSI              yy.mm.dd
   3                 British/French    dd/mm/yy
   4                 German            dd.mm.yy
   5                 Italian           dd-mm-yy
   6                 -                 dd mon yy
   7                 -                 mon dd,yy
   8                 -                 hh:mi:ss
   9                     Default + milliseconds--mon dd yyyy
  hh:mi:ss:mmmAM(or )
   10                USA              mm-dd-yy
   11                JAPAN            yy/mm/dd
   12                ISO              yymmdd
   13                Europe           Default + milliseconds--dd mon yyyy
                                       hh:mi:ss:mmm(24h)
   14                 -                hh:mi:ss:mmm(24h)

  类型0,9,和13总是返回四位的年。对其它类型,要显示世纪,把style值加上100。类型13和14返回24小时时钟的时间。类型0,7,和13返回的月份用三位字符表示(用Nov代表November).

  对表11.1中所列的每一种格式,你可以把类型值加上100来显示有世纪的年(例如,00年将显示为2000年)。例如,要按日本标准显示日期,包括世纪,你应使用如下的语句:

  SELECT CONVERT(VARCHAR(30),GETDATE(),111)
  在这个例子中,函数CONVERT()把日期格式进行转换,显示为1997/11/30

  抽取日期和时间
  SELECT site_name ‘Site Name’,
  DATEPART(mm,site_entrydate) ‘Month Posted’ FROM site_directory
  函数DATEPART()的参数是两个变量。第一个变量指定要抽取日期的哪一部分;第二个变量是实际的数据。在这个例子中,函数DATEPART()抽取月份,因为mm代表月份。下面是这个SELECT 语句的输出结果:

  函数DATEPART()的返回值是一个整数。你可以用这个函数抽取日期的各个不同部分
  表11.2  日期的各部分及其简写
  日期部分           简写               值
  year                yy                1753--9999
  quarter             qq                1--4
  month               mm                1--12
  day of year         dy                1--366
  day                 dd                1--31
  week                wk                1--53
函数DATENAME()和函数DATEPART()接收同样的参数。但是,它的返回值是一个字符串,而不是一个整数。

主键:primary key

sql 循环插入

declare @i int
set @i=1

while @i<=(select count(distinct(userid)) from sys_UserRight)
begin
insert sys_UserRight(UserID,RightID,bBrowse,bAppend,bEdit,bDelete,bPrint,bImport,bExport)
values ( @i,'608','1','1','1','1','1','1','1')
set @i = @i+1
end

 

declare @i int
set @i=200
while @i>=200 and @i<700
begin
update sys_rightdata set parentid=-
(
select ParentID from sys_rightdata where ParentID=@i and ParentID>=200 and ParentID<700

in (select ParentID from sys_rightdata where ParentID=@i and ParentID>=200 and ParentID<700)
where ParentID>=200 and ParentID<700
set @i=@i+1
end

层别视图
create view vset_VerifyType
as
SELECT  typekey,typeno,typename,parentkey,typelevel,typenote ,
      (select typeno  from set_VerifyType
       where typekey=a.parentkey) as Parentno,
       (select typename from set_verifytype
       where typekey=a.parentkey) as parentname
FROM  set_VerifyType as a
go


 3.取字符
  substring(logo, 1, 10)  substring('abcdef', 2, 3)  (bcd)
  substring(字段,第1个位置,共几个位置)

  if  @MeasValue>@maxXbar begin set @maxXbar=@MeasValue  end


  Page.ClientScript.RegisterClientScriptBlock()

 2.修改主键
      ALTER TABLE dbo.table1 ADD CONSTRAINT
 PK_table1 PRIMARY KEY CLUSTERED
 (
 col1,
 col2
 )

 

 1.sql 分页
  declare @pageIndex int,@pageSize int--pageIndex 最小值为0 ,Pos小值为1  ,sys_RightData 数据库名字
 
  set @pageIndex=0;
  set @pageSize=10;
  
   select RightName ,Pos
   from (
     select RightName, ROW_NUMBER() OVER (order by RightID) as Pos from sys_RightData
 ) as T
   where T.Pos >= @pageIndex*@pageSize+1 and T.Pos <(@pageIndex+1)*@pageSize+1

 2.嵌套循环
 --本脚本任意执行
 declare @UserID int,@Max int,@RightID int--@UserID,@RightID变量,@Max 为@UserID的最大值

 set @UserID=(select top 1 UserID  from [sys_UserRight] order by userid asc)
 set @Max=(select top 1 UserID  from [sys_UserRight] order by userid desc)

 while @UserID<=@Max
 begin
          set @RightID=1551
   while @RightID >1550 and @RightID<1556
    begin
     INSERT INTO [sys_UserRight]([UserID],[RightID],[bBrowse],[bAppend],[bEdit],[bDelete],[bPrint],[bImport],[bExport])
     VALUES(@UserID,@RightID,'True','True','True','True','True','True','True')

     set @RightID=@RightID+1
     end
    set @UserID=@UserID+1
       
    while  @UserID not in (select distinct(UserID) from [sys_UserRight]) and @UserID<@Max+1
     begin  set  @UserID=@UserID+1 end
  end

 3.取得服务器上的所有数据库(单层循环)
 declare @dbid int,@max int,@name nvarchar(20)--@name为数据库名

 set @dbid=1
 set @max=(select max(dbid) from sysdatabases)
 while @dbid<=@max
 begin
  set @name=(select name from master.dbo.sysdatabases where dbid=@dbid)
  set @dbid=@dbid+1
  
  if @name in ('Customer','ReportServer','ReportServerTempDB','master','model','msdb','tempdb')
  begin   continue end--排除的数据库
  select @name
 end
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值