transact-sql语句总汇(转载)

科技网编2023-03-08 12:092410

  --语 句????????????????????????????????功 能

  --数据操作

  SELECT??????--从数据库表中检索数据行和列

  INSERT??????--向数据库表添加新数据行

  DELETE??????--从数据库表中删除数据行

  UPDATE??????--更新数据库表中的数据

  --数据定义

  CREATE TABLE????--创建一个数据库表

  DROP TABLE???? --从数据库中删除表

  ALTER TABLE???? --修改数据库表结构

  CREATE VIEW???? --创建一个视图

  DROP VIEW???? --从数据库中删除视图

  CREATE INDEX????--为数据库表创建一个索引

  DROP INDEX???? --从数据库中删除索引

  CREATE PROCEDURE?? --创建一个存储过程

  DROP PROCEDURE????--从数据库中删除存储过程

  CREATE TRIGGER????--创建一个触发器

  DROP TRIGGER????--从数据库中删除触发器

  CREATE SCHEMA????--向数据库添加一个新模式

  DROP SCHEMA???? --从数据库中删除一个模式

  CREATE DOMAIN????--创建一个数据值域

  ALTER DOMAIN????--改变域定义

  DROP DOMAIN???? --从数据库中删除一个域

  --数据控制

  GRANT??????--授予用户访问权限

  DENY??????--拒绝用户访问

  REVOKE??????--解除用户访问权限

  --事务控制

  COMMIT??????--结束当前事务

  ROLLBACK???? --中止当前事务

  SET TRANSACTION????--定义当前事务数据访问特征

  --程序化SQL

  DECLARE??????--为查询设定游标

  EXPLAN??????--为查询描述数据访问计划

  OPEN??????--检索查询结果打开一个游标

  FETCH??????--检索一行查询结果

  CLOSE??????--关闭游标

  PREPARE??????--为动态执行准备SQL 语句

  EXECUTE??????--动态地执行SQL 语句

  DESCRIBE???? --描述准备好的查询

  ---局部变量

  declare @id char(10)

  --set @id = '10010001'

  select @id = '10010001'

  ---全局变量

  ---必须以@@开头

  --IF ELSE

  declare @x int @y int @z int

  select @x = 1 @y = 2 @z=3

  if @x > @y

  print 'x > y' --打印字符串'x > y'

  else if @y > @z

  print 'y > z'

  else print 'z > y'

  --CASE

  use pangu

  update employee

  set e_wage =

  case

  when job_level = ’1’ then e_wage*1.08

  when job_level = ’2’ then e_wage*1.07

  when job_level = ’3’ then e_wage*1.06

  else e_wage*1.05

  end

  --WHILE CONTINUE BREAK

  declare @x int @y int @c int

  select @x = 1 @y=1

  while @x < 3

  begin

  print @x --打印变量x 的值

  while @y < 3

  ??begin

  ?? select @c = 100*@x + @y

  ?? print @c --打印变量c 的值

  ?? select @y = @y + 1

  ??end

  select @x = @x + 1

  select @y = 1

  end

  --WAITFOR

  --例 等待1 小时2 分零3 秒后才执行SELECT 语句

  waitfor delay ’01:02:03’

  select * from employee

  --例 等到晚上11 点零8 分后才执行SELECT 语句

  waitfor time ’23:08:00’

  select * from employee

  ***SELECT***

  ??select *(列名) from table_name(表名) where column_name operator value

  ??ex:(宿主)

  select * from stock_information where stockid?? = str(nid)

  ????stockname = 'str_name'

  ????stockname like '% find this %'

  ????stockname like '[a-zA-Z]%' --------- ([]指定值的范围)

  ????stockname like '[^F-M]%'?? --------- (^排除指定范围)

  ????--------- 只能在使用like关键字的where子句中使用通配符)

  ????or stockpath = 'stock_path'

  ????or stocknumber < 1000

  ????and stockindex = 24

  ????not stocksex = 'man'

  ????stocknumber between 20 and 100

  ????stocknumber in(10,20,30)

  ????order by stockid desc(asc) --------- 排序,desc-降序,asc-升序

  ????order by 1,2 --------- by列号

  ????stockname = (select stockname from stock_information??where stockid??= 4)

  ????--------- 子查询

  ????--------- 除非能确保内层select只返回一个行的值,

  ????--------- 否则应在外层where子句中用一个in限定符

  select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复

  select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name

  select stockname , "stocknumber" = count(*) from table_name group by stockname

  ???????????????????????????????????? --------- group by 将表按行分组,指定列中有相同的值

  ???????? having count(*) = 2??---------??having选定指定的组

  select *

  from table1, table2??????????????????

  where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示

  ????table1.id =* table2.id -------- 右外部连接

  select stockname from table1

  union [all]??-----??union合并查询结果集,all-保留重复行

  select stockname from table2

  ***insert***

评论区