您的位置:首页 > 数据库

SQL语句集锦

2009-03-19 10:31 141 查看
--语 句                                功 能
[/b]--数据操作
[/b]SELECT[/b]      --从数据库表中检索数据行和列
[/b]INSERT[/b]      --向数据库表添加新数据行
[/b]DELETE[/b]      --从数据库表中删除数据行
[/b]UPDATE[/b]      --更新数据库表中的数据
[/b]--数据定义
[/b]CREATE[/b] TABLE[/b]    --创建一个数据库表
[/b]DROP[/b] TABLE[/b]     --从数据库中删除表
[/b]ALTER[/b] TABLE[/b]     --修改数据库表结构
[/b]CREATE[/b] VIEW[/b]     --创建一个视图
[/b]DROP[/b] VIEW[/b]     --从数据库中删除视图
[/b]CREATE[/b] INDEX[/b]    --为数据库表创建一个索引
[/b]DROP[/b] INDEX[/b]     --从数据库中删除索引
[/b]CREATE[/b] PROCEDURE[/b]   --创建一个存储过程
[/b]DROP[/b] PROCEDURE[/b]    --从数据库中删除存储过程
[/b]CREATE[/b] TRIGGER[/b]    --创建一个触发器
[/b]DROP[/b] TRIGGER[/b]    --从数据库中删除触发器
[/b]CREATE[/b] SCHEMA[/b]    --向数据库添加一个新模式
[/b]DROP[/b] SCHEMA[/b]     --从数据库中删除一个模式
[/b]CREATE[/b] DOMAIN    --创建一个数据值域
[/b]ALTER[/b] DOMAIN    --改变域定义
[/b]DROP[/b] DOMAIN     --从数据库中删除一个域
[/b]--数据控制
[/b]GRANT[/b]      --授予用户访问权限
[/b]DENY[/b]      --拒绝用户访问
[/b]REVOKE[/b]      --解除用户访问权限
[/b]--事务控制
[/b]COMMIT[/b]      --结束当前事务
[/b]ROLLBACK[/b]     --中止当前事务
[/b]SET[/b] TRANSACTION[/b]    --定义当前事务数据访问特征
[/b]--程序化SQL
[/b]DECLARE[/b]      --为查询设定游标
[/b]EXPLAN      --为查询描述数据访问计划
[/b]OPEN[/b]      --检索查询结果打开一个游标
[/b]FETCH[/b]      --检索一行查询结果
[/b]CLOSE[/b]      --关闭游标
[/b]PREPARE      --为动态执行准备SQL 语句
[/b]EXECUTE[/b]      --动态地执行SQL 语句
[/b]DESCRIBE     --描述准备好的查询
[/b]

---局部变量
[/b]declare[/b] @id[/b] char[/b](10)
--set @id = '10010001'
[/b]select[/b] @id[/b] = '10010001'[/b]

---全局变量
[/b]---必须以@@开头
[/b]

--IF ELSE
[/b]declare[/b] @x[/b] int[/b] @y[/b] int[/b] @z[/b] int[/b]
select[/b] @x[/b] = 1 @y[/b] = 2 @z[/b]=3
if[/b] @x[/b] > @y[/b]
print[/b] 'x > y'[/b] --打印字符串'x > y'
[/b]else[/b] if[/b] @y[/b] > @z[/b]
print[/b] 'y > z'[/b]
else[/b] print[/b] 'z > y'[/b]

--CASE
[/b]use[/b] pangu
update[/b] employee
set[/b] e_wage =
case[/b]
when[/b] job_level = ’1’ then[/b] e_wage*1.08
when[/b] job_level = ’2’ then[/b] e_wage*1.07
when[/b] job_level = ’3’ then[/b] e_wage*1.06
else[/b] e_wage*1.05
end[/b]

--WHILE CONTINUE BREAK
[/b]declare[/b] @x[/b] int[/b] @y[/b] int[/b] @c[/b] int[/b]
select[/b] @x[/b] = 1 @y[/b]=1
while[/b] @x[/b] < 3
begin[/b]
print[/b] @x[/b] --打印变量x 的值
[/b]  while[/b] @y[/b] < 3
begin[/b]
select[/b] @c[/b] = 100*@x[/b] + @y[/b]
print[/b] @c[/b] --打印变量c 的值
[/b]    select[/b] @y[/b] = @y[/b] + 1
end[/b]
select[/b] @x[/b] = @x[/b] + 1
select[/b] @y[/b] = 1
end[/b]

--WAITFOR
[/b]--例 等待1 小时2 分零3 秒后才执行SELECT 语句
[/b]waitfor[/b] delay ’01:02:03’
select[/b] * from[/b] employee
--例 等到晚上11 点零8 分后才执行SELECT 语句
[/b]waitfor[/b] time ’23:08:00’
select[/b] * from[/b] employee

***SELECT[/b]***

select[/b] *(列名) from[/b] table_name(表名) where[/b] column_name operator value
ex:(宿主)
select[/b] * from[/b] stock_information where[/b] stockid   = str[/b](nid)
stockname = 'str_name'[/b]
stockname like[/b] '% find this %'[/b]
stockname like[/b] '[a-zA-Z]%'[/b] --------- ([]指定值的范围)
[/b]     stockname like[/b] '[^F-M]%'[/b]   --------- (^排除指定范围)
[/b]     --------- 只能在使用like关键字的where子句中使用通配符)
[/b]     or[/b] stockpath = 'stock_path'[/b]
or[/b] stocknumber < 1000
and[/b] stockindex = 24
not[/b] stock*** = 'man'[/b]
stocknumber between[/b] 20 and[/b] 100
stocknumber in[/b](10,20,30)
order[/b] by[/b] stockid desc[/b](asc[/b]) --------- 排序,desc-降序,asc-升序
[/b]     order[/b] by[/b] 1,2 --------- by列号
[/b]     stockname = (select[/b] stockname from[/b] stock_information  where[/b] stockid  = 4)
--------- 子查询
[/b]     --------- 除非能确保内层select只返回一个行的值,
[/b]     --------- 否则应在外层where子句中用一个in限定符
[/b]  select[/b] distinct[/b] column_name form table_name --------- distinct指定检索独有的列值,不重复
[/b]  select[/b] stocknumber ,"stocknumber + 10" = stocknumber + 10 from[/b] table_name
select[/b] stockname , "stocknumber" = count[/b](*) from[/b] table_name group[/b] by[/b] stockname
--------- group by 将表按行分组,指定列中有相同的值
[/b]          having[/b] count[/b](*) = 2  ---------  having选定指定的组
[/b]
select[/b] *
from[/b] table1, table2
where[/b] table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
[/b]     table1.id =* table2.id -------- 右外部连接
[/b]

select[/b] stockname from[/b] table1
union[/b] [all[/b]]  -----  union合并查询结果集,all-保留重复行
[/b]  select[/b] stockname from[/b] table2

***insert[/b]***

insert[/b] into[/b] table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select[/b] Stockname , Stocknumber from[/b] Stock_table2)---value为select语句
[/b]

***update[/b]***

update[/b] table_name set[/b] Stockname = "xxx" [where[/b] Stockid = 3]
Stockname = default[/b]
Stockname = null[/b]
Stocknumber = Stockname + 4

***delete[/b]***

delete[/b] from[/b] table_name where[/b] Stockid = 3
truncate[/b] table_name ----------- 删除表中所有行,仍保持表的完整性
[/b]  drop[/b] table[/b] table_name --------------- 完全删除表
[/b]

***alter[/b] table[/b]*** --- 修改数据库表结构
[/b]

alter[/b] table[/b] database[/b].owner.table_name add[/b] column_name char[/b](2) null[/b] .....
sp_help table_name ---- 显示表已有特征
[/b]  create[/b] table[/b] table_name (name char[/b](20), age smallint[/b], lname varchar[/b](30))
insert[/b] into[/b] table_name select[/b] ......... ----- 实现删除列的方法(创建新表)
[/b]  alter[/b] table[/b] table_name drop[/b] constraint[/b] Stockname_default ---- 删除Stockname的default约束
[/b]
***function[/b](/*常用函数*/[/b])***

----统计函数----
[/b]AVG    --求平均值
[/b]COUNT   --统计数目
[/b]MAX    --求最大值
[/b]MIN    --求最小值
[/b]SUM    --求和
[/b]

--AVG
[/b]use[/b] pangu
select[/b] avg[/b](e_wage) as[/b] dept_avgWage
from[/b] employee
group[/b] by[/b] dept_id

--MAX
[/b]--求工资最高的员工姓名
[/b]use[/b] pangu
select[/b] e_name
from[/b] employee
where[/b] e_wage =
(select[/b] max[/b](e_wage)
from[/b] employee)

--STDEV()
[/b]--STDEV()函数返回表达式中所有数据的标准差
[/b]

--STDEVP()
[/b]--STDEVP()函数返回总体标准差
[/b]

--VAR()
[/b]--VAR()函数返回表达式中所有值的统计变异数
[/b]

--VARP()
[/b]--VARP()函数返回总体变异数
[/b]

----算术函数----
[/b]

/***三角函数***/[/b]
SIN[/b](float_expression) --返回以弧度表示的角的正弦
[/b]COS[/b](float_expression) --返回以弧度表示的角的余弦
[/b]TAN[/b](float_expression) --返回以弧度表示的角的正切
[/b]COT[/b](float_expression) --返回以弧度表示的角的余切
[/b]/***反三角函数***/[/b]
ASIN[/b](float_expression) --返回正弦是FLOAT 值的以弧度表示的角
[/b]ACOS[/b](float_expression) --返回余弦是FLOAT 值的以弧度表示的角
[/b]ATAN[/b](float_expression) --返回正切是FLOAT 值的以弧度表示的角
[/b]ATAN2[/b](float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
[/b]DEGREES[/b](numeric_expression)
--把弧度转换为角度返回与表达式相同的数据类型可为
[/b]        --INTEGER/MONEY/REAL/FLOAT 类型
[/b]RADIANS[/b](numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为
[/b]        --INTEGER/MONEY/REAL/FLOAT 类型
[/b]EXP[/b](float_expression)  --返回表达式的指数值
[/b]LOG[/b](float_expression)  --返回表达式的自然对数值
[/b]LOG10[/b](float_expression)--返回表达式的以10 为底的对数值
[/b]SQRT[/b](float_expression) --返回表达式的平方根
[/b]/***取近似值函数***/[/b]
CEILING[/b](numeric_expression)  --返回>=表达式的最小整数返回的数据类型与表达式相同可为
[/b]        --INTEGER/MONEY/REAL/FLOAT 类型
[/b]FLOOR[/b](numeric_expression)    --返回<=表达式的最小整数返回的数据类型与表达式相同可为
[/b]        --INTEGER/MONEY/REAL/FLOAT 类型
[/b]ROUND[/b](numeric_expression)    --返回以integer_expression 为精度的四舍五入值返回的数据
[/b]        --类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
[/b]ABS[/b](numeric_expression)      --返回表达式的绝对值返回的数据类型与表达式相同可为
[/b]        --INTEGER/MONEY/REAL/FLOAT 类型
[/b]SIGN[/b](numeric_expression)     --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
[/b]        --与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
[/b]PI[/b]()       --返回值为π 即3.1415926535897936
[/b]RAND[/b]([integer_expression])   --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数
[/b]

----字符串函数----
[/b]ASCII[/b]()         --函数返回字符表达式最左端字符的ASCII 码值
[/b]CHAR[/b]()   --函数用于将ASCII 码转换为字符
[/b]    --如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值
[/b]LOWER[/b]()   --函数把字符串全部转换为小写
[/b]UPPER[/b]()   --函数把字符串全部转换为大写
[/b]STR[/b]()   --函数把数值型数据转换为字符型数据
[/b]LTRIM[/b]()   --函数把字符串头部的空格去掉
[/b]RTRIM[/b]()   --函数把字符串尾部的空格去掉
[/b]LEFT[/b](),RIGHT[/b](),SUBSTRING[/b]()  --函数返回部分字符串
[/b]CHARINDEX[/b](),PATINDEX[/b]()  --函数返回字符串中某个指定的子串出现的开始位置
[/b]SOUNDEX[/b]()  --函数返回一个四位字符码
[/b]    --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值
[/b]DIFFERENCE[/b]()    --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异
[/b]    --0 两个SOUNDEX 函数返回值的第一个字符不同
[/b]    --1 两个SOUNDEX 函数返回值的第一个字符相同
[/b]    --2 两个SOUNDEX 函数返回值的第一二个字符相同
[/b]    --3 两个SOUNDEX 函数返回值的第一二三个字符相同
[/b]    --4 两个SOUNDEX 函数返回值完全相同
[/b]

QUOTENAME[/b]()  --函数返回被特定字符括起来的字符串
[/b]/*select quotename('abc', '{') quotename('abc')
运行结果如下
----------------------------------{
{abc} [abc]*/[/b]

REPLICATE[/b]()     --函数返回一个重复character_expression 指定次数的字符串
[/b]/*select replicate('abc', 3) replicate( 'abc', -2)
运行结果如下
----------- -----------
abcabcabc NULL*/[/b]

REVERSE[/b]()       --函数将指定的字符串的字符排列顺序颠倒
[/b]REPLACE[/b]()       --函数返回被替换了指定子串的字符串
[/b]/*select replace('abc123g', '123', 'def')
运行结果如下
----------- -----------
abcdefg*/[/b]

SPACE[/b]()   --函数返回一个有指定长度的空白字符串
[/b]STUFF[/b]()   --函数用另一子串替换字符串指定位置长度的子串
[/b]

----数据类型转换函数----
[/b]CAST[/b]() 函数语法如下
CAST[/b]() (<expression> AS[/b] <data_ type>[ length ])
CONVERT[/b]() 函数语法如下
CONVERT[/b]() (<data_ type>[ length ], <expression> [, style])

select[/b] cast[/b](100+99 as[/b] char[/b]) convert[/b](varchar[/b](12), getdate[/b]())
运行结果如下
------------------------------ ------------
[/b]199   Jan 15 2000

----日期函数----
[/b]DAY[/b]()   --函数返回date_expression 中的日期值
[/b]MONTH[/b]()   --函数返回date_expression 中的月份值
[/b]YEAR[/b]()   --函数返回date_expression 中的年份值
[/b]DATEADD[/b](<datepart> ,<number> ,<date>)
--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期
[/b]DATEDIFF[/b](<datepart> ,<number> ,<date>)
--函数返回两个指定日期在datepart 方面的不同之处
[/b]DATENAME[/b](<datepart> , <date>)  --函数以字符串的形式返回日期的指定部分
[/b]DATEPART[/b](<datepart> , <date>)  --函数以整数值的形式返回日期的指定部分
[/b]GETDATE[/b]()  --函数以DATETIME 的缺省格式返回系统当前的日期和时间
[/b]

----系统函数----
[/b]APP_NAME()      --函数返回当前执行的应用程序的名称
[/b]COALESCE[/b]()  --函数返回众多表达式中第一个非NULL 表达式的值
[/b]COL_LENGTH(<'table_name'[/b]>, <'column_name'[/b]>) --函数返回表中指定字段的长度值
[/b]COL_NAME(<table_id>, <column_id>)   --函数返回表中指定字段的名称即列名
[/b]DATALENGTH[/b]() --函数返回数据表达式的数据的实际长度
[/b]DB_ID(['database_name'[/b]]) --函数返回数据库的编号
[/b]DB_NAME(database_id)  --函数返回数据库的名称
[/b]HOST_ID()     --函数返回服务器端计算机的名称
[/b]HOST_NAME()     --函数返回服务器端计算机的名称
[/b]IDENTITY[/b](<data_type>[, seed increment]) [AS[/b] column_name])
--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
[/b]/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/[/b]
ISDATE[/b]()  --函数判断所给定的表达式是否为合理日期
[/b]ISNULL[/b](<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换
[/b]ISNUMERIC[/b]()  --函数判断所给定的表达式是否为合理的数值
[/b]NEWID[/b]()   --函数返回一个UNIQUEIDENTIFIER 类型的数值
[/b]NULLIF[/b](<expression1>, <expression2>)
--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值
[/b]精妙SQL语句
说明:复制表(只复制结构,源表名:a 新表名:b)
SQL: select[/b] * into[/b] b from[/b] a where[/b] 1<>1
说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
SQL: insert[/b] into[/b] b(a, b, c) select[/b] d,e,f from[/b] b;
说明:显示文章、提交人和最后回复时间
SQL: select[/b] a.title,a.username,b.adddate from[/b] table[/b] a,(select[/b] max[/b](adddate) adddate from[/b] table[/b] where[/b] table[/b].title=a.title) b
说明:外连接查询(表名1:a 表名2:b)
SQL: select[/b] a.a, a.b, a.c, b.c, b.d, b.f from[/b] a LEFT[/b] OUT JOIN[/b] b ON[/b] a.a = b.c
说明:日程安排提前五分钟提醒
SQL: select[/b] * from[/b] 日程安排 where[/b] datediff[/b]('minute'[/b],f开始时间,getdate[/b]())>5

说明:两张关联表,删除主表中已经在副表中没有的信息
SQL:
delete[/b] from[/b] info where[/b] not[/b] exists[/b] ( select[/b] * from[/b] infobz where[/b] info.infid=infobz.infid )
说明:--
[/b]SQL:
SELECT[/b] A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM[/b] TABLE1,
(SELECT[/b] X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM[/b] (SELECT[/b] NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
FROM[/b] TABLE2
WHERE[/b] TO_CHAR[/b](UPD_DATE,'YYYY/MM'[/b]) = TO_CHAR[/b](SYSDATE, 'YYYY/MM'[/b])) X,
(SELECT[/b] NUM, UPD_DATE, STOCK_ONHAND
FROM[/b] TABLE2
WHERE[/b] TO_CHAR[/b](UPD_DATE,'YYYY/MM'[/b]) =
TO_CHAR[/b](TO_DATE(TO_CHAR[/b](SYSDATE, 'YYYY/MM'[/b]) || '/01'[/b],'YYYY/MM/DD'[/b]) - 1, 'YYYY/MM'[/b]) ) Y,
WHERE[/b] X.NUM = Y.NUM (+)
AND[/b] X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE[/b] A.NUM = B.NUM
说明:--
[/b]SQL:
select[/b] * from[/b] studentinfo where[/b] not[/b] exists[/b](select[/b] * from[/b] student where[/b] studentinfo.id=student.id) and[/b] 系名称='"&strdepartmentname&"'[/b] and[/b] 专业名称='"&strprofessionname&"'[/b] order[/b] by[/b] 性别,生源地,高考总成绩
说明:
从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)
SQL:
SELECT[/b] a.userper, a.tel, a.standfee, TO_CHAR[/b](a.telfeedate, 'yyyy'[/b]) AS[/b] telyear,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '01'[/b], a.factration)) AS[/b] JAN,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '02'[/b], a.factration)) AS[/b] FRI,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '03'[/b], a.factration)) AS[/b] MAR,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '04'[/b], a.factration)) AS[/b] APR,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '05'[/b], a.factration)) AS[/b] MAY,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '06'[/b], a.factration)) AS[/b] JUE,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '07'[/b], a.factration)) AS[/b] JUL,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '08'[/b], a.factration)) AS[/b] AGU,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '09'[/b], a.factration)) AS[/b] SEP,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '10'[/b], a.factration)) AS[/b] OCT,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '11'[/b], a.factration)) AS[/b] NOV,
SUM[/b](decode(TO_CHAR[/b](a.telfeedate, 'mm'[/b]), '12'[/b], a.factration)) AS[/b] DEC
FROM[/b] (SELECT[/b] a.userper, a.tel, a.standfee, b.telfeedate, b.factration
FROM[/b] TELFEESTAND a, TELFEE b
WHERE[/b] a.tel = b.telfax) a
GROUP[/b] BY[/b] a.userper, a.tel, a.standfee, TO_CHAR[/b](a.telfeedate, 'yyyy'[/b])
说明:四表联查问题:
SQL: select[/b] * from[/b] a left[/b] inner[/b] join[/b] b on[/b] a.a=b.b right[/b] inner[/b] join[/b] c on[/b] a.a=c.c inner[/b] join[/b] d on[/b] a.a=d.d where[/b] .....
说明:得到表中最小的未使用的ID号
SQL:
SELECT[/b] (CASE[/b] WHEN[/b] EXISTS[/b](SELECT[/b] * FROM[/b] Handle b WHERE[/b] b.HandleID = 1) THEN[/b] MIN[/b](HandleID) + 1 ELSE[/b] 1 END[/b]) as[/b] HandleID
FROM[/b] Handle
WHERE[/b] NOT[/b] HandleID IN[/b] (SELECT[/b] a.HandleID - 1 FROM[/b] Handle a)

: 我在ms sql中建了一个表,可由于种种原因有些记录重复了
: 记录完全的一模一样。
: 现在我想把重复的都删掉,只保留重复记录中的第一条。
: 我在database好象看到有介绍oracle的,

select[/b] distinct[/b] * into[/b] #table_name from[/b] table_name
delete[/b] from[/b] table_name
select[/b] * into[/b] table_name from[/b] #table_name
drop[/b] table[/b] #table_name

与此相关的是“select[/b] into[/b]”选项,可以在数据库属性
对话框中,勾起来此项,或者在Query Analyzer中执行
execute[/b] sp_dboption 'db_name'[/b],'select into'[/b],'true'[/b]
开启。默认值是关闭的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: