SQL语句集锦
--语 句 功 能 / N9 ^! o; D4 e3 b( Q7 X--数据操作 * [* G% T% f5 T
SELECT --从数据库表中检索数据行和列 ( q' N. e" W& ^3 i# E6 {
INSERT --向数据库表添加新数据行 6 D5 `6 Y6 o* R& {
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创建一个数据库表 3 u V9 N1 w, J
DROP TABLE --从数据库中删除表 & z/ E: a, I9 }$ g' u0 `
ALTER TABLE --修改数据库表结构
CREATE VIEW --创建一个视图
DROP VIEW --从数据库中删除视图
CREATE INDEX --为数据库表创建一个索引 7 ?! A$ E7 }/ g9 /# T, B) o) t! L
DROP INDEX --从数据库中删除索引
CREATE PROCEDURE --创建一个存储过程
DROP PROCEDURE --从数据库中删除存储过程
CREATE TRIGGER --创建一个触发器 : f p% s. H. E) K
DROP TRIGGER --从数据库中删除触发器 ?* k0 ~2 z8 K6 E9 Y- Q. i) A
CREATE SCHEMA --向数据库添加一个新模式 8 `' {- O% Q. Q9 ^# z& M) l! O# O
DROP SCHEMA --从数据库中删除一个模式 7 L0 v- V1 c1 o; o# R
CREATE DOMAIN --创建一个数据值域
ALTER DOMAIN --改变域定义
DROP DOMAIN --从数据库中删除一个域 # V( J4 w/ g y7 p$ Q, N# @
--数据控制
GRANT --授予用户访问权限 3 ?! d7 A+ ?5 `$ ]1 Z( x
DENY --拒绝用户访问 6 I1 D6 C1 P, x1 Y
REVOKE --解除用户访问权限
--事务控制
COMMIT --结束当前事务 ! v) p9 ]$ c% c8 [: c; F0 J0 w
ROLLBACK --中止当前事务 + U7 G5 L( v x/ m
SET TRANSACTION --定义当前事务数据访问特征 % i/ F9 x/ M2 E5 s
--程序化SQL - e6 e5 a& j9 V( g& F- M
DECLARE --为查询设定游标
EXPLAN --为查询描述数据访问计划 ' x6 }/ g2 g5 G0 K) ^% ~( H3 /' _9 l
OPEN --检索查询结果打开一个游标 5 S6 d8 p( a3 K% ~2 /# p) G" G0 m- J
FETCH --检索一行查询结果 . Z. |: N0 T# y/ x& ?! x9 z( P
CLOSE --关闭游标 - k) L6 v: e$ r
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句 ; r( S; y. A& Z8 x/ ]" N
DESCRIBE --描述准备好的查询
0 E" `3 O: w3 h3 {) G8 K
---局部变量
declare @id char(10) , A5 U+ v8 M0 l/ l. x6 [
--set @id = '10010001'
select @id = '10010001' 4 ~; i6 B1 |, s) r* X
* b4 T; R* [ ?9 ^3 L+ s
8 J0 Z+ b% h5 W7 D9 B
---全局变量
---必须以@@开头
# H s. U" z5 J
( j* i" [% O U% S K
--IF ELSE - U A, Y2 _! l* u# x
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符串'x > y' ! Y& q' X' N" m; ^: |, o
else if @y > @z
print 'y > z'
else print 'z > y' * w9 p, h# L% [+ N5 M
8 w, d9 ^0 I, l3 }0 |
--CASE
use pangu
update employee 3 k C8 P2 h& s& r8 ?+ H- x5 _
set e_wage =
case 4 X( ]5 h0 ^. e* W
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 " d+ n P7 r6 N0 m5 p) J+ C
else e_wage*1.05
end 6 `8 |- ?6 w' u
8 d2 H1 v0 p& o
- g: e) I3 w* @; Z
--WHILE CONTINUE BREAK
declare @x int @y int @c int 9 U' q+ {, U( ]# a' V$ k/ t1 C
select @x = 1 @y=1 6 d S: b1 }; I4 i) n
while @x < 3
begin
print @x --打印变量x 的值
while @y < 3 7 r. R$ N0 r2 Z
begin
select @c = 100*@x + @y
print @c --打印变量c 的值 % [) s4 /1 t! @& F8 b0 h2 L
select @y = @y + 1 9 F; L2 y. S: `+ u4 ?( a
end
select @x = @x + 1
select @y = 1 + {% d! }7 j7 S
end
--WAITFOR
--例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay ’01:02:03’ 4 b: a) [; }8 w- Q. s7 ~
select * from employee 4 ~- D( S7 }0 @, h
--例 等到晚上11 点零8 分后才执行SELECT 语句 o- O+ ~2 N2 |8 /+ K# N1 W
waitfor time ’23:08:00’
select * from employee
7 L, q! H: u) D* h
' V8 h& k& I8 I' Z8 D
% T5 ^9 p6 K. i3 l4 c
***SELECT*** . U' v3 x. W% d$ R+ H. n! u
* M5 Q- v( V+ k R9 P! c
k6 g4 u0 X$ b' ~* C; C; I
- z$ u2 [0 {7 p s8 {
/ Q# `( _7 o. j# E v. f
select *(列名) from table_name(表名) where column_name operator value
ex 宿主) 3 ]: Z: G7 i3 p+ J0 _
select * from stock_information where stockid = str(nid) " {5 M; s" t. K9 {) F" T4 x1 u
stockname = 'str_name' 0 n j c4 _+ Z2 B
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范围) % ]* g5 v2 o8 M
stockname like '[^F-M]%' --------- (^排除指定范围)
--------- 只能在使用like关键字的where子句中使用通配符) - |& a- H) b2 f( J( j
or stockpath = 'stock_path' - f3 J1 k G/ E) s6 H! ~3 X0 l
or stocknumber < 1000 * D) A+ J6 M4 }" e" Z% ~1 A4 O& z
and stockindex = 24 6 Z. S/ i, z8 z$ e# X7 S+ F. i
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序 6 Q3 X6 ?( s0 _# R3 N& R" J( t4 k# R! i. c
order by 1,2 --------- by列号 ! w3 ~" i4 U _8 E
stockname = (select stockname from stock_information where stockid = 4) % a* N2 |9 `( g' X# _ V
--------- 子查询 0 |% C, `* L7 T l* P
--------- 除非能确保内层select只返回一个行的值, & N8 m7 U4 F- G" H
--------- 否则应在外层where子句中用一个in限定符
select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name 0 _" Y+ n( h$ {7 W
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 将表按行分组,指定列中有相同的值
having count(*) = 2 --------- having选定指定的组
4 d9 W: |5 a- O( N$ y
select * " F2 v% |% W$ N4 x0 K$ p& e0 C
from table1, table2 / Q c8 {& ~3 N3 y: e2 Y
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
table1.id =* table2.id -------- 右外部连接 ! }2 D7 q2 Z: d1 B5 L$ T
select stockname from table1 ( i2 [ R# A/ b2 R3 Q
union [all] ----- union合并查询结果集,all-保留重复行
select stockname from table2 5 j# I/ D2 r7 l0 c/ Q
6 u. ]% M) s2 s0 /
0 i5 U0 v" A+ s: N9 L
***insert*** + o4 ]5 B- A+ `5 h8 T/ G
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx") ) W, o8 e) i; `% `3 D
value (select Stockname , Stocknumber from Stock_table2)---value为select语句
1 C1 X' K. O$ f* A) I6 a% ]
+ K3 F# e* _$ {6 }/ k3 H/ ]! Y" z3 j
; c# x0 A' z4 O* Y8 @; l- c* t
***update***
/ B. k, Y M. b# O" q& P
$ r1 e4 B% X( i0 L' |% _
! {, t2 H3 U# l& m7 p
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4 ) I/ l3 a3 T4 ]; N9 k
: t$ _" ^& y1 L/ d ~; s$ u
***delete*** ! t* a; L' {3 d% ~& /( y4 l
) P3 x5 I8 A# m+ Y! C: g
: N* l0 j) Q) _2 A' w( h! B7 G+ C7 X
; R* n9 W* v' j* t$ f+ o& @. Z
delete from table_name where Stockid = 3 ) w: _$ J, v+ V" }$ p
truncate table_name ----------- 删除表中所有行,仍保持表的完整性 & ~3 G. s' I* x' |. J9 O$ C
drop table table_name --------------- 完全删除表
3 M( C4 ~+ t( o0 G
***alter table*** --- 修改数据库表结构 6 ?0 C- Y- E+ {6 A
alter table database.owner.table_name add column_name char(2) null ..... 2 h. P4 x7 C; Z' h% V% ?
sp_help table_name ---- 显示表已有特征
create table table_name (name char(20), age smallint, lname varchar(30)) $ Y9 |3 h1 m( |
insert into table_name select ......... ----- 实现删除列的方法(创建新表) ) g. K2 L3 {5 i
alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束 0 s- ]& [4 ^. ^4 J
***function(/*常用函数*/)*** ! |9 r7 Q% K9 N1 X+ r8 K: x
% /$ O- D5 r1 E% V2 c: |/ P
t3 F a4 s5 p4 _( F0 X: K) ^
----统计函数----
AVG --求平均值 ; D8 f: h* @5 D R
COUNT --统计数目
MAX --求最大值
MIN --求最小值
SUM --求和 , S% G$ W; W9 c' g. N+ I
" a/ c( J9 @: ?8 K. a$ _ O+ O4 P
1 c7 ^) Y& o6 F% O$ T. @1 v
--AVG ! O3 p2 z0 Z) @1 n
use pangu
select avg(e_wage) as dept_avgWage 3 Y& M6 @; y7 y8 G! z
from employee + f* i4 v: V$ [, x+ A
group by dept_id
( ~4 [" E" }' /5 q
+ /1 f+ Y. {7 h
) S u! U. ~" `7 s! k8 p/ j! _
* }1 {$ I+ C9 p& @. A2 |
--MAX - l* B" {' i/ {3 M
--求工资最高的员工姓名
use pangu
select e_name
from employee $ }" w: j2 m# ]$ ?- a
where e_wage =
(select max(e_wage) 2 ?. j! h% _8 r' X( P
from employee) # k# E% k* a7 o v
9 X- ? r; b4 w
1 X& _ h. X. w. b$ J ?1 j
--STDEV() ! Q- o3 I3 u1 m9 j, A
--STDEV()函数返回表达式中所有数据的标准差
3 {( I0 G. R! M1 Z
4 i5 N8 E- i2 @2 d. Z
--STDEVP()
--STDEVP()函数返回总体标准差 6 [! n* ~" Y7 m6 f/ D
' I5 J$ w( c" M+ ?9 b
) L- w; i% /: `
--VAR() ; s4 [' {( {# S) f2 }# S, `) ~
--VAR()函数返回表达式中所有值的统计变异数
4 K% }0 l2 i$ Q, `
8 B! r$ T& m( F/ D, ~
--VARP()
--VARP()函数返回总体变异数 9 D) ]2 `' ~: h8 G1 J$ g2 q
, j$ S: d& u; O9 /$ w: w
, H4 B% }' x* `9 Y) G) M- N+ Q: d
; Z- j9 O9 h4 c
----算术函数----
3 M- `: D# Y. I9 e2 H$ v7 w H, T
' l+ r* o& _8 [3 d, l2 J9 s* r2 m
/***三角函数***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦 4 G8 E0 ]) v5 M. p
TAN(float_expression) --返回以弧度表示的角的正切 6 W6 b! /9 I1 [: c4 T- z1 |
COT(float_expression) --返回以弧度表示的角的余切 - C( J2 v+ o' p5 Q5 v
/***反三角函数***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2) 7 e# n$ a$ ?! g6 H+ ]8 @/ O% o2 K) W& W
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度转换为角度返回与表达式相同的数据类型可为 8 a) /: c6 H" ^' N& G0 R
--INTEGER/MONEY/REAL/FLOAT 类型
RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为
--INTEGER/MONEY/REAL/FLOAT 类型 ( o/ I) ^1 M, B0 t9 s6 z- h
EXP(float_expression) --返回表达式的指数值
LOG(float_expression) --返回表达式的自然对数值 5 {+ j2 Z. r Z' c0 }/ ]1 K2 {
LOG10(float_expression)--返回表达式的以10 为底的对数值
SQRT(float_expression) --返回表达式的平方根 ) W+ C" y% A" y# ~
/***取近似值函数***/
CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为
--INTEGER/MONEY/REAL/FLOAT 类型 ! o1 o# K1 b" A; l* H/ E
FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为
--INTEGER/MONEY/REAL/FLOAT 类型
ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据 ! x5 C. M8 b. [# B; s
--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为
--INTEGER/MONEY/REAL/FLOAT 类型
SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型 8 v; y( W* ]" X% h! X' J
PI() --返回值为π 即3.1415926535897936 8 B+ x$ B9 /( s3 n; D: X
RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数
4 I1 c% T6 q8 q3 G3 r: X$ e: M
; v, P/ [# q, W$ Q; O* f8 |
7 A1 [: a* U* J" ?3 d4 ~' y* s# G S
----字符串函数---- - z3 f6 F3 g0 k e3 b
ASCII() --函数返回字符表达式最左端字符的ASCII 码值
CHAR() --函数用于将ASCII 码转换为字符
--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值
LOWER() --函数把字符串全部转换为小写 $ C E- y- g" a
UPPER() --函数把字符串全部转换为大写 6 D% C2 h' ^0 I' j) p6 E
STR() --函数把数值型数据转换为字符型数据
LTRIM() --函数把字符串头部的空格去掉
RTRIM() --函数把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串
CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置 ! o+ }/ d0 J5 |. K: n7 g3 D
SOUNDEX() --函数返回一个四位字符码 9 D9 i+ X, p* D, z
--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值
DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异 & `7 @7 ~7 V" N4 J
--0 两个SOUNDEX 函数返回值的第一个字符不同
--1 两个SOUNDEX 函数返回值的第一个字符相同
--2 两个SOUNDEX 函数返回值的第一二个字符相同
--3 两个SOUNDEX 函数返回值的第一二三个字符相同
--4 两个SOUNDEX 函数返回值完全相同
1 |3 L! q" D1 O4 u0 [
" e# U& }8 s1 v9 v7 j
! T+ l; a- } q7 X! F! R$ m% k
QUOTENAME() --函数返回被特定字符括起来的字符串 : Y4 e* l% u- }1 `- H- j7 }
/*select quotename('abc', '{') quotename('abc')
运行结果如下 ; z$ A8 z: L: W! h* }% w
----------------------------------{ & x m6 |' l8 M4 O1 S1 B) u9 P
{abc} [abc]*/ / f# Q1 |0 V/ q9 q1 d1 d9 h) Y" j
1 m8 m( f, e! Y7 k) s0 [
" j5 B& |4 M, ^' n0 U/ g
REPLICATE() --函数返回一个重复character_expression 指定次数的字符串 , l4 g* }1 w _8 w
/*select replicate('abc', 3) replicate( 'abc', -2) `: |* C$ _& N# M
运行结果如下 9 x7 {9 g! V5 E6 q9 M
----------- -----------
abcabcabc NULL*/
: }. M2 |/ R1 ~$ S, [
! E& F" H- R& e
3 o3 [) {4 w9 L4 _+ A3 A4 m- A
REVERSE() --函数将指定的字符串的字符排列顺序颠倒
REPLACE() --函数返回被替换了指定子串的字符串 ) e8 z1 p' T( X/ @( l! }! x' {
/*select replace('abc123g', '123', 'def')
运行结果如下 J: t8 g- x+ {! X* U; o
----------- -----------
abcdefg*/ 0 N* ?% m! I; u ?+ U
@0 k) U& s( /
6 H% Y+ a8 q( F5 F5 ~
6 X4 H- y; m& u `/ l
SPACE() --函数返回一个有指定长度的空白字符串
STUFF() --函数用另一子串替换字符串指定位置长度的子串 8 e1 C4 m( i$ ^% /4 O, U
0 j/ G* ?* ]1 U. |9 x# i
----数据类型转换函数----
CAST() 函数语法如下 ( @1 H; m5 U$ L7 ^8 s% |
CAST() (<expression> AS <data_ type>[ length ]) 6 D' s% T* t# l: U8 I6 L- u
CONVERT() 函数语法如下 ; I: X( F) u, F( a, x
CONVERT() (<data_ type>[ length ], <expression> [, style])
/ e" t8 T, b; c' f
: _( L- Q9 {1 [% Z! i. X+ R; [
1 |$ N4 n2 H& Q' g+ v! g
select cast(100+99 as char) convert(varchar(12), getdate()) 7 B$ V, `, a$ k0 e, I0 ~6 {
运行结果如下 $ a' U+ D0 E7 B T" Z
------------------------------ ------------ ! D; q$ _ t5 y& d- R
199 Jan 15 2000 ! A9 y" c' j% [3 G" K2 m
h; t" c" D* b+ w" w9 t
& f( v, R& g5 P2 J. H4 n4 [
----日期函数---- % E$ f+ T/ [, S6 [
DAY() --函数返回date_expression 中的日期值
MONTH() --函数返回date_expression 中的月份值
YEAR() --函数返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期 9 A, z; G2 E" U4 y$ o
DATEDIFF(<datepart> ,<number> ,<date>) ; g5 r0 H6 @9 k0 E: {
--函数返回两个指定日期在datepart 方面的不同之处 8 ]0 B6 B7 u! `: @
DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分 - d9 g/ I* E; a) ^
DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分 8 A% n9 k' ?: g A
GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间 2 U& ?% v4 r, X
' J! }+ G/ w, w' w# b
8 ~6 E, d8 q n2 O
5 K- X8 n; a/ t" x+ F9 {: }7 E
----系统函数----
APP_NAME() --函数返回当前执行的应用程序的名称 2 a" x+ I* F0 w+ v V5 G9 r1 q' ^
COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值
COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名
DATALENGTH() --函数返回数据表达式的数据的实际长度
DB_ID(['database_name']) --函数返回数据库的编号 " w% Y5 A- Z! W$ p- _2 E
DB_NAME(database_id) --函数返回数据库的名称 2 Y& t$ S! P# o1 H( C4 B
HOST_ID() --函数返回服务器端计算机的名称
HOST_NAME() --函数返回服务器端计算机的名称 $ _6 W/ I$ C% S, Z" k
IDENTITY(<data_type>[, seed increment]) [AS column_name]) ! e; C" S9 A1 K1 c- t& p
--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable $ c9 n4 }2 F) W$ c+ K$ D
from oldtable*/
ISDATE() --函数判断所给定的表达式是否为合理日期 5 g0 d8 }0 i B V' O* `
ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换 8 O; A3 h; t; E/ O4 [
ISNUMERIC() --函数判断所给定的表达式是否为合理的数值
NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值
NULLIF(<expression1>, <expression2>)
--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值 n" b- t8 V/ S( n) I
精妙SQL语句
说明:复制表(只复制结构,源表名:a 新表名:b)
SQL: select * into b from a where 1<>1 0 p0 @3 y! x8 f6 d
说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
SQL: insert into b(a, b, c) select d,e,f from b;
说明:显示文章、提交人和最后回复时间 . O" o1 V: q6 B$ t" y! |
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b ' K( K. m, e0 U6 U# ~, ?$ G4 ]
说明:外连接查询(表名1:a 表名2:b) " L: c, p, Z, B! y- }+ S% c {, m
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 ) z# j8 z% O1 v7 j3 g: z8 n
说明:两张关联表,删除主表中已经在副表中没有的信息 ' C. `( g' /& q! f: W9 Y# G
SQL: & p! n* h4 I7 j) j) P
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )
说明:--
SQL: + g& `( t( ~+ f8 w( h
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE ! I- o+ X& h$ n9 /( M% r6 R
FROM TABLE1, 6 N* H+ a8 Y# Q' d6 /1 v7 f5 n
(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND $ f) o5 U9 _! K5 u0 ~4 y- o7 U0 S
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X, [2 I8 /! `) o2 ~1 H" r/ e( c
(SELECT NUM, UPD_DATE, STOCK_ONHAND ; T% A* {# E' N
FROM TABLE2 : |9 n& ?8 n: h/ F& j6 Q" S. ^5 v2 F
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 ' o! C7 A: l& g
WHERE A.NUM = B.NUM 3 O- d7 g, C# s3 m
说明:-- ! {! { M) x# m+ ]
SQL:
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩 : M) a: x' }. A! d: b0 W3 m0 B
说明:
从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)
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, ' c" Y$ b) m' c5 E6 q( U
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR, ' G9 R5 L! t, `# X
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR, ; Q1 l! /' P; ^+ `" O5 i
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE, * d9 o$ ~$ ?5 r& T8 M
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, 4 a' b$ x9 L& G
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT, / j5 l7 B' [9 ?0 q% b. `
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV, 4 k( y4 }: F( ?6 g" S* @
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 / t1 ?1 I1 y- } M9 J O9 U
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') ' k, D% ~; K4 O7 D( _6 J; E
说明:四表联查问题:
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 ..... 3 j$ {- |4 M1 a a& q: d
说明:得到表中最小的未使用的ID号 ; O% r2 O7 Z" n/ o* M
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) . @% b2 R0 @2 F; m( S$ A6 p
: 我在ms sql中建了一个表,可由于种种原因有些记录重复了 4 G( o% P4 B) r) k1 C# H
: 记录完全的一模一样。 8 i* G- D2 r3 i$ C! s
: 现在我想把重复的都删掉,只保留重复记录中的第一条。
: 我在database好象看到有介绍oracle的, . a) F: {! X2 b0 ~2 _5 w/ I
# C6 I! Y5 |1 O% h8 h* q
select distinct * into #table_name from table_name 5 D- E1 s, X5 B% U
delete from table_name
select * into table_name from #table_name ' W6 _: ]0 t- Z. C2 Z
drop table #table_name
与此相关的是“select into”选项,可以在数据库属性
对话框中,勾起来此项,或者在Query Analyzer中执行
execute sp_dboption 'db_name','select into','true' 0 N" S% A6 }* w1 ~+ I' J. q
开启。默认值是关闭的。