语句功能
数据操作
SELECT从数据库表中检索数据行和列
INSERT向数据库表添加新数据行
DELETE从数据库表中删除数据行
UPDATE更新数据库表中的数据
数据定义
CREATETABLE 创建一个数据库表
DROPTABLE 从数据库中删除表
ALTERTABLE 修改数据库表结构
CREATEVIEW 创建一个视图
DROPVIEW 从数据库中删除视图
CREATEINDEX 为数据库表创建一个索引
DROPINDEX 从数据库中删除索引
CREATEPROCEDURE 创建一个存储过程
DROPPROCEDURE 从数据库中删除存储过程
CREATETRIGGER 创建一个触发器
DROPTRIGGER 从数据库中删除触发器
CREATESCHEMA 向数据库添加一个新模式
CREATE DOMAIN 创建一个数据值域ALTERDOMAIN 改变域定义DROP DOMAIN从数据库中删除一个域DROPSCHEMA 从数据库中删除一个模式
REVOKE 解除用户访问权限数据控制
事务控制
COMMIT结束当前事务
ROLLBACK中止当前事务
SETTRANSACTION 定义当前事务数据访问特征
程序化SQL
DECLARE为查询设定游标
EXPLAN为查询描述数据访问计划
OPEN检索查询结果打开一个游标
FETCH检索一行查询结果
CLOSE关闭游标
PREPARE为动态执行准备SQL语句
EXECUTE动态地执行SQL语句
DESCRIBE描述准备好的查询
-局部变量
declare @id char(10)
set@id = '10010001'
select@id = '10010001'
-全局变量
-必须以@@开头
IFELSE
declare@x int @y int @z int
select@x = 1 @y = 2 @z=3
if@x > @y
print'x > y' 打印字符串'x> y'
elseif @y > @z
print'y > z'
elseprint 'z > y'
CASE
update employee set e_wage = case use pangu
else e_wage*1.05 end
WHILECONTINUE 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语句
waitfordelay '01:02:03'
select* from employee
例等到晚上11点零8分后才执行SELECT语句
waitfortime '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 '[a-zA-Z]%' - ([]指定值的范围)stockname like '[^F-M]%' - (^排除指定范围)- 只能在使用like 关键字的where子句中使用通配符) stocknamelike '% find this %'
not stock*** = 'man'
stocknumberbetween 20 and 100
stocknumberin(10,20,30)
orderby stockid desc(asc) - 排序,desc-降序,asc-升序
orderby 1,2 - by列号
stockname= (select stockname from stock_information where stockid = 4)
-子查询
-除非能确保内层select只返回一个行的值,
-否则应在外层where子句中用一个in限定符
selectdistinct column_name form table_name - distinct指定检索独有的列值,不重复selectstocknumber ,"stocknumber + 10" = stocknumber + 10 fromtable_name
selectstockname , "stocknumber" = count(*) from table_name groupby stockname - group by 将表按行分组,指定列中有相同的值
havingcount(*) = 2 - having选定指定的组
select *
from table1, table2
where table1.id *= table2.id 左外部连接,table1 中有的而table2 中没有得以null 表示
table1.id=* table2.id 右外部连接
selectstockname from table1
union[all] - union合并查询结果集,all-保留重复行
selectstockname from table2
***insert***
insertinto table_name (Stock_name,Stock_number) value ("xxx","xxxx")value (select Stockname , Stocknumber from Stock_table2)-value为select语句
***update***
updatetable_name set Stockname = "xxx" [where Stockid = 3]
Stockname = null Stocknumber = Stockname + 4 Stockname = default
***delete***
deletefrom table_name where Stockid = 3
truncatetable_name - 删除表中所有行,仍保持表的完整性droptable table_name - 完全删除表
***altertable*** - 修改数据库表结构
altertable database.owner.table_name add column_name char(2) null .....
sp_helptable_name 显示表已有特征
createtable table_name (name char(20), age smallint, lname varchar(30))
insertinto table_name select ......... - 实现删除列的方法(创建新表)
altertable table_name drop constraint Stockname_default 删除Stockname的default约束
***function(/*常用函数*/)***
统计函数
AVG求平均值
COUNT统计数目
MAX求最大值
MIN求最小值
SUM求和
AVG
usepangu
selectavg(e_wage) as dept_avgWage
fromemployee
groupby dept_id
MAX
求工资最高的员工姓名
usepangu
selecte_name
where e_wage = (select max(e_wage) from employee) from employee
STDEV() STDEV()函数返回表达式中所有数据的标准差
STDEVP()
STDEVP()函数返回总体标准差
VAR()
VAR()函数返回表达式中所有值的统计变异数
VARP()
VARP()函数返回总体变异数
算术函数
/***三角函数***/
SIN(float_expression)返回以弧度表示的角的正弦
COS(float_expression)返回以弧度表示的角的余弦
TAN(float_expression)返回以弧度表示的角的正切
COT(float_expression)返回以弧度表示的角的余切
/***反三角函数***/
ASIN(float_expression)返回正弦是FLOAT值的以弧度表示的角ACOS(float_expression)返回余弦是FLOAT值的以弧度表示的角ATAN(float_expression)返回正切是FLOAT值的以弧度表示的角ATAN2(float_expression1,float_expression2)
返回正切是float_expression1/float_expres-sion2的以弧度表示的角DEGREES(numeric_expression)
把弧度转换为角度返回与表达式相同的数据类型可为
INTEGER/MONEY/REAL/FLOAT类型
RADIANS(numeric_expression)把角度转换为弧度返回与表达式相同的数据类型可为INTEGER/MONEY/REAL/FLOAT类型
EXP(float_expression)返回表达式的指数值
LOG(float_expression)返回表达式的自然对数值
LOG10(float_expression)返回表达式的以10为底的对数值
/***取近似值函数***/CEILING(numeric_expression)返回>=表达式的最小整数返回的数据类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT类型
SQRT(float_expression)返回表达式的平方根
类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT类型 ABS(numeric_expression)返回表达式的绝对值返回的数据类型与表达式相同可为
INTEGER/MONEY/REAL/FLOAT类型
SIGN(numeric_expression)测试参数的正负号返回0 零值1正数或-1负数返回的数据类型
与表达式相同可为INTEGER/MONEY/REAL/FLOAT类型
PI()返回值为π即3.14159265357936
RAND([integer_expression]) 用任选的[integer_expression]做种子值得出0-1间的随机浮点数
字符串函数
ASCII()函数返回字符表达式最左端字符的ASCII码值
CHAR()函数用于将ASCII码转换为字符
如果没有输入0~ 255 之间的ASCII码值CHAR函数会返回一个NULL值LOWER()函数把字符串全部转换为小写
UPPER()函数把字符串全部转换为大写
STR() 函数把数值型数据转换为字符型数据LTRIM() 函数把字符串头部的空格去掉
RTRIM() 函数把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING()函数返回部分字符串
CHARINDEX(),PATINDEX()函数返回字符串中某个指定的子串出现的开始位置
SOUNDEX()函数返回一个四位字符码
SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0值DIFFERENCE()函数返回由SOUNDEX函数返回的两个字符表达式的值的差异
0两个SOUNDEX函数返回值的第一个字符不同
1两个SOUNDEX函数返回值的第一个字符相同
2两个SOUNDEX函数返回值的第一二个字符相同
3两个SOUNDEX函数返回值的第一二三个字符相同
4两个SOUNDEX函数返回值完全相同
QUOTENAME()函数返回被特定字符括起来的字符串
/*selectquotename('abc', '{') quotename('abc')
运行结果如下
{
{abc}[abc]*/
/*selectreplicate('abc', 3) replicate( 'abc', -2)
运行结果如下
- - REPLICATE() 函数返回一个重复character_expression指定次数的字符串
REVERSE() 函数将指定的字符串的字符排列顺序颠倒REPLACE() 函数返回被替换了指定子串的字符串
/*selectreplace('abc123g', '123', 'def')
运行结果如下
--
abcdefg*/
SPACE()函数返回一个有指定长度的空白字符串
STUFF()函数用另一子串替换字符串指定位置长度的子串
数据类型转换函数
CAST()函数语法如下
CAST()(<expression> AS <data_ type>[ length ])
CONVERT() 函数语法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
selectcast(100+99 as char) convert(varchar(12), getdate()) 运行结果如下
199Jan 15 2000
日期函数
DAY()函数返回date_expression中的日期值
MONTH()函数返回date_expression中的月份值
YEAR()函数返回date_expression中的年份值
DATEADD(<datepart>,<number> ,<date>)
函数返回指定日期date加上指定的额外日期间隔number产生的新日期DATEDIFF(<datepart>,<number> ,<date>)
函数返回两个指定日期在datepart方面的不同之处
DATENAME(<datepart>, <date>) 函数以字符串的形式返回日期的指定部分DATEPART(<datepart>, <date>) 函数以整数值的形式返回日期的指定部分GETDATE()函数以DATETIME的缺省格式返回系统当前的日期和时间
APP_NAME() 函数返回当前执行的应用程序的名称COALESCE()函数返回众多表达式中第一个非NULL表达式的值系统函数
DB_ID(['database_name']) 函数返回数据库的编号DB_NAME(database_id) 函数返回数据库的名称
HOST_ID()函数返回服务器端计算机的名称
HOST_NAME()函数返回服务器端计算机的名称
IDENTITY(<data_type>[,seed increment]) [AS column_name])
IDENTITY() 函数只在SELECTINTO 语句中使用用于插入一个identitycolumn 列到新表中
/*selectidentity(int, 1, 1) as column_name
intonewtable
fromoldtable*/
ISDATE()函数判断所给定的表达式是否为合理日期
ISNULL(<check_expression>,<replacement_value>) 函数将表达式中的NULL值用指定值替换ISNUMERIC()函数判断所给定的表达式是否为合理的数值
NEWID()函数返回一个UNIQUEIDENTIFIER类型的数值
NULLIF(<expression1>,<expression2>)
NULLIF函数在expression1与expression2相等时返回NULL值若不相等时则返回
expression1 的值
精妙SQL 语句
说明:复制表(只复制结构,源表名:a 新表名:b)
SQL:select * into b from a where 1<>1
说明:拷贝表(拷贝数据,源表名:a目标表名:b)
SQL:insert into b(a, b, c) select d,e,f from b;
说明:显示文章、提交人和最后回复时间
SQL: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)
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
说明:日程安排提前五分钟提醒
SQL:select * from 日程安排wheredatediff('minute',f开始时间,getdate())>5
说明:两张关联表,删除主表中已经在副表中没有的信息
SQL:
deletefrom info where not exists ( select * from infobz whereinfo.infid=infobz.infid ) 说明:
SQL:
SELECTA.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROMTABLE1,
(SELECTX.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM TABLE2 WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE,'YYYY/MM')) X, (SELECT NUM, UPD_DATE, STOCK_ONHAND FROM (SELECT NUM,UPD_DATE, INBOUND_QTY, STOCK_ONHAND
WHERE X.NUM = Y.NUM (+)FROM TABLE2
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE A.NUM = B.NUM
说明:
SQL:
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and
系名称='"&strdepartmentname&"'and 专业名称='"&strprofessionname&"'order by 性别,生源地,高考总成绩
说明:
从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)
SQL:
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate,'yyyy') AS telyear,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'),'01', a.factration)) AS JAN,
SUM(decode(TO_CHAR(a.telfeedate,'mm'), '02', a.factration)) AS FRI,
SUM(decode(TO_CHAR(a.telfeedate,'mm'), '03', a.factration)) AS MAR,
SUM(decode(TO_CHAR(a.telfeedate,'mm'), '04', a.factration)) AS APR, SUM(decode(TO_CHAR(a.telfeedate,'mm'), '05', a.factration)) AS MAY,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
SUM(decode(TO_CHAR(a.telfeedate,'mm'), '07', a.factration)) AS JUL,
SUM(decode(TO_CHAR(a.telfeedate,'mm'), '08', a.factration)) AS AGU,
SUM(decode(TO_CHAR(a.telfeedate,'mm'), '09', a.factration)) AS SEP,
SUM(decode(TO_CHAR(a.telfeedate,'mm'), '10', a.factration)) AS OCT,
SUM(decode(TO_CHAR(a.telfeedate,'mm'), '11', a.factration)) AS NOV,
SUM(decode(TO_CHAR(a.telfeedate,'mm'), '12', a.factration)) AS DEC
FROM(SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
FROMTELFEESTAND a, TELFEE b
WHEREa.tel = b.telfax) a
GROUPBY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
说明:四表联查问题:
SQL:select * from a left inner join b on a.a=b.b right inner join c ona.a=c.c inner join d on a.a=d.d where .....
说明:得到表中最小的未使用的ID号
SQL:
SELECT(CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THENMIN(HandleID) + 1 ELSE 1 END) as HandleID
FROMHandle
WHERENOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)
: 我在ms sql中建了一个表,可由于种种原因有些记录重复了:记录完全的一模一样。:现在我想把重复的都删掉,只保留重复记录中的第一条。
delete from table_name select * into table_name from #table_name
drop table #table_name
与此相关的是“selectinto”选项,可以在数据库属性对话框中,勾起来此项,或者在QueryAnalyzer中执行executesp_dboption 'db_name','select into','true'
开启。默认值是关闭的。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务