SQL语句集锦

1 .数据操作
SELECT   -- 从数据库表中检索数据行和列
INSERT   -- 向数据库表添加新数据行
DELETE   -- 从数据库表中删除数据行
UPDATE   -- 更新数据库表中的数据
2 .数据定义
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  -- 从数据库中删除一个域
3 .数据控制
GRANT   -- 授予用户访问权限
DENY   -- 拒绝用户访问
REVOKE   -- 解除用户访问权限
4 .事务控制
COMMIT   -- 结束当前事务
ROLLBACK   -- 中止当前事务
SET   TRANSACTION   -- 定义当前事务数据访问特征
5 .程序化SQL
DECLARE   -- 为查询设定游标
EXPLAN  -- 为查询描述数据访问计划
OPEN   -- 检索查询结果打开一个游标
FETCH   -- 检索一行查询结果
CLOSE   -- 关闭游标
PREPARE   -- 为动态执行准备SQL 语句
EXECUTE   -- 动态地执行SQL 语句
DESCRIBE  -- 描述准备好的查询
6 .局部变量
declare   @id   char ( 10 )
-- set @id = '10010001'
select   @id   =   ' 10010001 '
7 .全局变量
必须以
@@开头
8 . 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 '
9 . 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
10 . 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
11 . WAITFOR
-- 例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor  delay ’ 01 : 02 : 03
select   *   from  employee
-- 例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor  time ’ 23 : 08 : 00
select   *   from  employee
12 . 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  stock ***   =   ' 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
13 . insert
insert   into  table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (
select  Stockname , Stocknumber  from  Stock_table2) -- -value为select语句
14 . update
update  table_name  set  Stockname  =  "xxx"  [ where Stockid = 3 ]
Stockname 
=   default
Stockname 
=   null
Stocknumber 
=  Stockname  +   4
15 . delete
delete   from  table_name  where  Stockid  =   3
truncate  table_name  -- --------- 删除表中所有行,仍保持表的完整性
drop   table  table_name  -- ------------- 完全删除表
16 . alter   table   -- - 修改数据库表结构
alter   table   database .owner.table_name  add  column_name  char ( 2 null  .....
sp_help table_name 
-- -- 显示表已有特征
create   table  table_name (name  char ( 20 ), age  smallint , lname  varchar ( 30 ))
insert   into  table_name  select  .........  -- --- 实现删除列的方法(创建新表)
alter   table  table_name  drop   constraint  Stockname_default  -- -- 删除Stockname的default约束

17 . function ( /*常用函数*/ )
-- --统计函数----
AVG   -- 求平均值
COUNT   -- 统计数目
MAX   -- 求最大值
MIN   -- 求最小值
SUM   -- 求和
--
AVG
use  pangu
select   avg (e_wage)  as  dept_avgWage
from  employee
group   by  dept_id
-- MAX
--
求工资最高的员工姓名
use  pangu
select  e_name
from  employee
where  e_wage  =
(
select   max (e_wage)
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 为底的对数值
SQRT (float_expression)  -- 返回表达式的平方根
/***取近似值函数***/
CEILING (numeric_expression)  -- 返回>=表达式的最小整数返回的数据类型与表达式相同可为
--
INTEGER/MONEY/REAL/FLOAT 类型
FLOOR (numeric_expression)  -- 返回<=表达式的最小整数返回的数据类型与表达式相同可为
--
INTEGER/MONEY/REAL/FLOAT 类型
ROUND (numeric_expression)  -- 返回以integer_expression 为精度的四舍五入值返回的数据
--
类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
ABS (numeric_expression)  -- 返回表达式的绝对值返回的数据类型与表达式相同可为
--
INTEGER/MONEY/REAL/FLOAT 类型
SIGN (numeric_expression)  -- 测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
--
与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
PI ()  -- 返回值为π 即3.1415926535897936

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 ()  -- 函数返回被特定字符括起来的字符串
/*select quotename('abc', '{') quotename('abc')
运行结果如下
----------------------------------{
{abc} [abc]
*/

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

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

SPACE ()  -- 函数返回一个有指定长度的空白字符串
STUFF ()  -- 函数用另一子串替换字符串指定位置长度的子串
--
--数据类型转换函数----
CAST () 函数语法如下
CAST () ( < expression >   AS   < data_ type > [  length  ] )
CONVERT () 函数语法如下
CONVERT () ( < data_ type > [  length  ] < expression >   [ , style ] )
select   cast ( 100 + 99   as   char convert ( varchar ( 12 ),  getdate ())
运行结果如下
-- ---------------------------- ------------
199  Jan  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 表达式的值
COL_LENGTH ( < ' table_name ' > < ' column_name ' > -- 函数返回表中指定字段的长度值
COL_NAME ( < table_id > < column_id > -- 函数返回表中指定字段的名称即列名
DATALENGTH ()  -- 函数返回数据表达式的数据的实际长度
DB_ID ( [ 'database_name' ] -- 函数返回数据库的编号
DB_NAME (database_id)  -- 函数返回数据库的名称
HOST_ID ()  -- 函数返回服务器端计算机的名称
HOST_NAME ()  -- 函数返回服务器端计算机的名称
IDENTITY ( < data_type > [ , seed increment ] [ AS column_name ] )
-- IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable
*/

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  日程安排  where   datediff ( ' minute ' ,f开始时间, getdate ()) > 5
说明:两张关联表,删除主表中已经在副表中没有的信息
SQL: 
delete   from  info  where   not   exists  (  select   *   from  infobz  where  info.infid = infobz.infid ) 
说明:
--
SQL: 
SELECT  A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM  TABLE1, 
(
SELECT  X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM  ( SELECT  NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
FROM  TABLE2
WHERE  TO_CHAR(UPD_DATE, ' YYYY/MM ' =  TO_CHAR(SYSDATE,  ' YYYY/MM ' )) X, 
(
SELECT  NUM, UPD_DATE, STOCK_ONHAND
FROM  TABLE2
WHERE  TO_CHAR(UPD_DATE, ' YYYY/MM ' =  
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 
' YYYY/MM ' ||   ' /01 ' , ' YYYY/MM/DD ' -   1 ' YYYY/MM ' ) ) Y, 
WHERE  X.NUM  =  Y.NUM ( +
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
FROM  TELFEESTAND a, TELFEE b
WHERE  a.tel  =  b.telfax) a
GROUP   BY  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  on  a.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 THEN   MIN (HandleID)  +   1   ELSE   1   END as  HandleID
FROM  Handle
WHERE   NOT  HandleID  IN  ( SELECT  a.HandleID  -   1   FROM  Handle a)
: 我在ms sql中建了一个表,可由于种种原因有些记录重复了
: 记录完全的一模一样。
: 现在我想把重复的都删掉,只保留重复记录中的第一条。
: 我在database好象看到有介绍oracle的,
select   distinct   *   into  #table_name  from  table_name
delete   from  table_name
select   *   into  table_name  from  #table_name
drop   table  #table_name
与此相关的是“
select   into ”选项,可以在数据库属性
对话框中,勾起来此项,或者在Query Analyzer中执行
execute  sp_dboption  ' db_name ' , ' select into ' , ' true '
开启。默认值是关闭的。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值