常用 SQL 语句大全

上一篇 / 下一篇  2007-12-01 14:40:53

--语 句 功 能
,v2^q4o6r153092--数据操作51Testing软件测试网(w-z]'t3r5Yvr%R
SELECT --从数据库表中检索数据行和列51Testing软件测试网*iO;M EV X
INSERT --向数据库表添加新数据行51Testing软件测试网a.].tU1}
DELETE --从数据库表中删除数据行
4||y6lK.Ocs p [153092UPDATE --更新数据库表中的数据51Testing软件测试网6CsbMTy
--数据定义51Testing软件测试网 Vb?,HV |+yRai
CREATE TABLE --创建一个数据库表51Testing软件测试网&eMCT!]G!@@
DROP TABLE --从数据库中删除表
r1DC,s/RD W153092ALTER TABLE --修改数据库表结构51Testing软件测试网_K CGy*Vdl$wv
CREATE VIEW --创建一个视图51Testing软件测试网8L mI1i4@(iznj
DROP VIEW --从数据库中删除视图
`A JI7y$ihf153092CREATE INDEX --为数据库表创建一个索引
q9nqWQ,Bh B153092DROP INDEX --从数据库中删除索引
F'Z%Q[2vT&]153092CREATE PROCEDURE --创建一个存储过程

 


y_ b(L_C8| R153092DROP PROCEDURE --从数据库中删除存储过程
cqF^D-K6t2C#Fd,a(u153092CREATE TRIGGER --创建一个触发器51Testing软件测试网b"A}:B k(I$P7U4t1|
DROP TRIGGER --从数据库中删除触发器51Testing软件测试网N8}3O@ LgJ
CREATE SCHEMA --向数据库添加一个新模式51Testing软件测试网 KlB9w2E
DROP SCHEMA --从数据库中删除一个模式51Testing软件测试网$h[|/e*zF:})@
CREATE DOMAIN --创建一个数据值域51Testing软件测试网 XY6l/S|(xuD5V
ALTER DOMAIN --改变域定义51Testing软件测试网 SS+w8J#@ [WB,H2P
DROP DOMAIN --从数据库中删除一个域51Testing软件测试网v/kC8Yg
--数据控制
m$?zMGP-v153092GRANT --授予用户访问权限51Testing软件测试网hS}4G;E2D
DENY --拒绝用户访问
Qgb9en,WZ153092REVOKE --解除用户访问权限51Testing软件测试网1j+K`,UMKv'LX)K
--事务控制51Testing软件测试网Q9os'{V.S1Vp(TB5c
COMMIT --结束当前事务
Ccj}|%k:~uF153092ROLLBACK --中止当前事务51Testing软件测试网(\:j@a \1S#L*H
SET TRANSACTION --定义当前事务数据访问特征
ry1U(n_O153092--程序化SQL51Testing软件测试网Q'~.B*]MP%O^`T
DECLARE --为查询设定游标
ho.kNz`nD153092EXPLAN --为查询描述数据访问计划51Testing软件测试网'Xp&lr rJ
OPEN --检索查询结果打开一个游标51Testing软件测试网l.iL$i4N
FETCH --检索一行查询结果
$q9s@Io?n w$A153092CLOSE --关闭游标
(w/vt'h{V153092PREPARE --为动态执行准备SQL 语句51Testing软件测试网;x?X-^ Hd6o
EXECUTE --动态地执行SQL 语句51Testing软件测试网G7T)So'gB o
DESCRIBE --描述准备好的查询
:w&lUm#{+p/k;D153092---局部变量
1K2CQ| zBp F153092declare @id char(10)
;L O#a'Wrc153092--set @id = '10010001'
g7Gw W4u mhl153092select @id = '10010001'51Testing软件测试网 D7PK^V/k1G

b_D1M&i X4j'w(BW153092---全局变量51Testing软件测试网3c/|.{TUsd Y Xx
---必须以@@开头51Testing软件测试网1| t&gr1a"uj3H#e;^

7e?i)Nq$Fw6\h}153092
7_ Yp$o]7_153092
/} w^6J"|y1e'T153092--IF ELSE51Testing软件测试网#m&Hvo:I+m5a
declare @x int @y int @z int51Testing软件测试网A'U+Zy+G#A9~$C
select @x = 1 @y = 2 @z=3
]xDD#LK!\'^:w153092if @x > @y
b+Y.Fm&S([|#}153092print 'x > y' --打印字符串'x > y'
+r1L3nF8M4dJQ*g$h:n:m153092else if @y > @z51Testing软件测试网)ceaSN1Q,i*AY$t
print 'y > z'51Testing软件测试网 fK+Bn8kX0_
else print 'z > y'
#Uzf]h/{.WU Q+m15309251Testing软件测试网-aD)e;NeC{z

0h8?K|4IW.fWl b153092
i#NS}w'~.x+lJg0G153092--CASE51Testing软件测试网$`/^/HU[ Us sv
use pangu
"a9F\[2A `153092update employee
NE7F @V+R153092set e_wage =
*{4d(A"V']F S+\z{ o153092case51Testing软件测试网#t6N|\ ?B E CW3] `f
when job_level = ’1’ then e_wage*1.0851Testing软件测试网.Ogi1YX~7A!R
when job_level = ’2’ then e_wage*1.0751Testing软件测试网9jI8tkU
when job_level = ’3’ then e_wage*1.06
[.Y6D9dN\153092else e_wage*1.0551Testing软件测试网,L H3RJv*T3\"h)x"P
end
(_2nT9Q/o ?15309251Testing软件测试网rk:eY2W,A2Q

:E#Pa Ad2y{153092
3WY&|4cR ds153092--WHILE CONTINUE BREAK51Testing软件测试网 D(?2i{b8f.d~H
declare @x int @y int @c int
&e3l @'{VR153092select @x = 1 @y=151Testing软件测试网`/A5Q:Q^$`fJ;m.S
while @x < 3
3hi3Gvl0e T153092begin
A6\9| W\^5\c$S153092print @x --打印变量x 的值51Testing软件测试网8ul4dC{*n[kn0oo
while @y < 351Testing软件测试网3E[iiI:hPU
begin
z@L,G(x*HS6t153092select @c = 100*@x + @y51Testing软件测试网k'w#v"p-G P7y.q.E
print @c --打印变量c 的值
%Kz%]k'o153092select @y = @y + 151Testing软件测试网G%_#dg;GpGJ
end
U)G6p]$^&d!P153092select @x = @x + 151Testing软件测试网"GmM.~4s1PiZY0e!X
select @y = 151Testing软件测试网 uok7{.x"lA
end
(W4}Ufo15309251Testing软件测试网'w2l f~ pne

,J4gdJA3ME*y%x+B153092
8j^1a C2?G(d+J2uV153092--WAITFOR
1|.R%|5Qu+we:}%}X153092--例 等待1 小时2 分零3 秒后才执行SELECT 语句
!D)E)pq0n*V u4J$f153092waitfor delay ’01:02:03’51Testing软件测试网Fo8e4kR,ZO
select * from employee
+jQV'BQ153092--例 等到晚上11 点零8 分后才执行SELECT 语句
Dy!_K)V ub0l153092waitfor time ’23:08:00’
gm]iH153092select * from employee
8r&g2GmJ pPe@&p15309251Testing软件测试网H cd}"P'm J
51Testing软件测试网,lCE5G7[o.[[0BS

*QY l c8g,ggC15309251Testing软件测试网R"n3D,xi/X
***SELECT***51Testing软件测试网#f+l0R#]8RH5P

!lI FOj pu'},T3S153092
J7F.t6V$~-Jtk4Sd153092
1bM"}mx-bq!zSL9w153092select *(列名) from table_name(表名) where column_name operator value51Testing软件测试网9Qlf(gD4wK*o
ex:(宿主)51Testing软件测试网!Y\+[#SF]oQO _J
select * from stock_information where stockid = str(nid)51Testing软件测试网#Hb9~M*B+S
stockname = 'str_name'
8fr8o H+v;i,|J153092stockname like '% find this %'51Testing软件测试网NyO u#?n;\[
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
#IQb!G+lK_153092stockname like '[^F-M]%' --------- (^排除指定范围)51Testing软件测试网2c2Mj g*J.Q
--------- 只能在使用like关键字的where子句中使用通配符)51Testing软件测试网*i5n a)m2a s#p+v6`
or stockpath = 'stock_path'51Testing软件测试网)R M5bN;b r
or stocknumber < 1000
S6m y ?(}qDR+bh}153092and stockindex = 2451Testing软件测试网-}})H,[&u#?W
not stock*** = 'man'51Testing软件测试网8ONHE}C/B K%D
stocknumber between 20 and 100
iUAS-U8z7]&K5I"tF153092stocknumber in(10,20,30)
)WLlo?tA^aF&Op153092order by stockid desc(asc) --------- 排序,desc-降序,asc-升序51Testing软件测试网 Qxm#s ^w
order by 1,2 --------- by列号
s0@.Hq5R)?h153092stockname = (select stockname from stock_information where stockid = 4)51Testing软件测试网*I'ha&D5IE
--------- 子查询51Testing软件测试网?B%GY{9X h5n
--------- 除非能确保内层select只返回一个行的值,
%v*wV3z sE8J;] q_153092--------- 否则应在外层where子句中用一个in限定符
pz_i#k#a153092select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复51Testing软件测试网R)kR d k
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
:A^ BK z:Mb}:[/g153092select stockname , "stocknumber" = count(*) from table_name group by stockname51Testing软件测试网C+tX y]N AA;xO
--------- group by 将表按行分组,指定列中有相同的值
Zf9C oH!Ss#^v nD153092having count(*) = 2 --------- having选定指定的组51Testing软件测试网`}L6xS!A#}%Xs ^

Y1|f,X9S;BS"A~*an153092
B tIcn$R153092
t~]2O A153092select *51Testing软件测试网9b1q1aF!GE
from table1, table251Testing软件测试网:[a+U|E#E6` ZBe
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
%@k2GL{@c153092table1.id =* table2.id -------- 右外部连接
F!}Cj P/R$H!C^153092
X-g)z"b+R:R_153092
O6QLE8[d&R1C15309251Testing软件测试网%r iH1lR8aJ
select stockname from table151Testing软件测试网k]Jo6Rfh
union [all] ----- union合并查询结果集,all-保留重复行
*vDP$^+Y5C153092select stockname from table251Testing软件测试网 BSv J-`
51Testing软件测试网{@2?`H WC v
51Testing软件测试网m6b VTq&u j!D_ MI

C-o ?R0im153092***insert***51Testing软件测试网+W|;A%rrLNq

@6}-m2FLi/J2c153092
"pV&tQ{+hW15309251Testing软件测试网}[SF$^X*KO b `-D
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")51Testing软件测试网-r*_9|?[;^r l
value (select Stockname , Stocknumber from Stock_table2)---value为select语句51Testing软件测试网oW"K"[ ks6}
51Testing软件测试网q N'b l"Hh
51Testing软件测试网T{"B:x L:xGnT
51Testing软件测试网/T5PvH w[%u ~
***update***
,SO%w.?/fz1N153092
]h})AY$D7b e(_%N15309251Testing软件测试网4zv/O,u A4]3no
51Testing软件测试网syr+BM+k O,JX
update table_name set Stockname = "xxx" [where Stockid = 3]
Ys#\ J&Av6D t153092Stockname = default
&xkG$?1_}153092Stockname = null
D:T"b!S ~:N*k153092Stocknumber = Stockname + 4
p c]1]Z-w153092
-DZ:Y8uD5d7Lm153092
/psd-@0JY153092
0U1@:K8y:Mg153092***delete***51Testing软件测试网f+^ i2ZTx C

5E$z{%oG&K@6_jT153092
7@xj5D r9w)a;L15309251Testing软件测试网4b B0wt-ww*`
delete from table_name where Stockid = 3
2]k3Nh!~+P+K8tY153092truncate table_name ----------- 删除表中所有行,仍保持表的完整性51Testing软件测试网 H G,G0To m.t
drop table table_name --------------- 完全删除表51Testing软件测试网 oh#^/^ ?~*w|R0I
51Testing软件测试网bL] \ |8B
51Testing软件测试网 N0eT.s%PeD

z?Z SIF153092***alter table*** --- 修改数据库表结构
3n0?/x | ]nF|15309251Testing软件测试网(B)N&XA*yJ$}O

W1z&MBZ`1D15309251Testing软件测试网J:\/E0y&g\(?1V~*_
alter table database.owner.table_name add column_name char(2) null .....
KjG h{c^ WlW3{153092sp_help table_name ---- 显示表已有特征51Testing软件测试网~+nvtz1es4S
create table table_name (name char(20), age smallint, lname varchar(30))
;Hk~ZiSG3y153092insert into table_name select ......... ----- 实现删除列的方法(创建新表)51Testing软件测试网Mmo:hsI%V#W `%w
alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束
rG"d8f'zvr15309251Testing软件测试网,Dy*o:}3p7@%x
51Testing软件测试网/n-N/|&]9G3H$En
51Testing软件测试网V a z&k7n
***function(/*常用函数*/)***
*@o,`D@-weo!I15309251Testing软件测试网Q2EBBjB.Bc

Hs.Ko s-Q%T'z!n+M153092
b$d D4h;Ui153092----统计函数----
5`Q(ng Ih X153092AVG --求平均值
;Q?%t'B%E&D&SX|J(k153092COUNT --统计数目
4?9w$L,l+T8K s153092MAX --求最大值51Testing软件测试网Q&R:?_,P p L IC7y
MIN --求最小值
Nl6f;g{q5m153092SUM --求和
IY.v8Wb~ m"A,X [(X15309251Testing软件测试网*|H2?!K;m

,StN qL x X[M153092
MBA;DQ/X1V153092--AVG51Testing软件测试网-?^:ed{X
use pangu51Testing软件测试网V6SJ-dt ?&t3o
select avg(e_wage) as dept_avgWage51Testing软件测试网P }0[CEn
from employee51Testing软件测试网Q!D5@y(|OO
group by dept_id51Testing软件测试网"hz6P`JC|7l
--MAX51Testing软件测试网?4Lp*Y%vw#c
--求工资最高的员工姓名
]1?|$t0O Sp}153092use pangu
:vCM0k$huj153092select e_name
0lAj&F%ub4CNO153092from employee51Testing软件测试网E)p}]*L
where e_wage =51Testing软件测试网T L"xlA7s8Y9n-[
(select max(e_wage)
'^4hcY+{gw#r153092from employee)51Testing软件测试网rz r'rAL
51Testing软件测试网Mw1YJ*D

J3h$u/tb$j153092
3Z*^H5l r5M3[B153092--STDEV()51Testing软件测试网0`/h$`rs$ht!s
--STDEV()函数返回表达式中所有数据的标准差51Testing软件测试网0S7ah0C&zM j&[

3|tKhL-H$n&~153092
&P8i&PVc7|15309251Testing软件测试网,G-Y@2p f
--STDEVP()
Jy)q/sn8FEv153092--STDEVP()函数返回总体标准差51Testing软件测试网gps p5Z0[
51Testing软件测试网:IhWB7Hs DX*A

F(vO,U4t!v}`K15309251Testing软件测试网 ^?S({*K x L"G#Q
--VAR()51Testing软件测试网:I#x[ vzS @O
--VAR()函数返回表达式中所有值的统计变异数
Wl ji$D Ch ` a153092
)e9Q;C~g$J/w15309251Testing软件测试网Pp|4j g
51Testing软件测试网4TrLd/Zh ^6^
--VARP()
/@!y K8rq@K7`153092--VARP()函数返回总体变异数
*~ ~E9j|a,]15309251Testing软件测试网9G8]e[I
51Testing软件测试网0kv8VA ]:_#C$D4BG4n
51Testing软件测试网SMm3KY2GW
----算术函数----51Testing软件测试网/ZbXE W

vgsnpd$a3t153092
0m*G V'a+h(N T.m#qC#m15309251Testing软件测试网$z7Y+^/hQ\
/***三角函数***/51Testing软件测试网NFI#j%w[0f$A
SIN(float_expression) --返回以弧度表示的角的正弦51Testing软件测试网}}"z.E6C R%Tm g
COS(float_expression) --返回以弧度表示的角的余弦
{*Ky8^c[153092TAN(float_expression) --返回以弧度表示的角的正切51Testing软件测试网g3U&i,D ]};K#uJ
COT(float_expression) --返回以弧度表示的角的余切51Testing软件测试网3g1prU4i6k
/***反三角函数***/
(p`-o$o?9}153092ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
*ub-Q8|%MK%GE153092ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角51Testing软件测试网jf7{"Y+R4W+c
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角51Testing软件测试网;X.?{8SHK9m2q
ATAN2(float_expression1,float_expression2)51Testing软件测试网+FfZ$R!b/]o2n#^
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角51Testing软件测试网/m%|/Ieoj"[ l
DEGREES(numeric_expression)51Testing软件测试网-Vfz g,T Z
--把弧度转换为角度返回与表达式相同的数据类型可为
JF Z tx8N153092--INTEGER/MONEY/REAL/FLOAT 类型
t-wxKvTj:]tbr153092RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为
jb6a7G+sAI'n153092--INTEGER/MONEY/REAL/FLOAT 类型51Testing软件测试网 j!Cl7@ o ]{+c(L
EXP(float_expression) --返回表达式的指数值
:UXHc,D153092LOG(float_expression) --返回表达式的自然对数值51Testing软件测试网"bz,pT1Y#g"rB
LOG10(float_expression)--返回表达式的以10 为底的对数值51Testing软件测试网;z IC~Gqw cRJb
SQRT(float_expression) --返回表达式的平方根
3gdtfD%k#KAbS153092/***取近似值函数***/51Testing软件测试网l z`_-mS
CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为
%W1JeXq@M153092--INTEGER/MONEY/REAL/FLOAT 类型
Y"~ \!ex@ N153092FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为51Testing软件测试网x r%f8r8geeQ%_E
--INTEGER/MONEY/REAL/FLOAT 类型51Testing软件测试网U O+mIX,f^
ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据51Testing软件测试网rRG&V{ k l ~E#]
--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
-T Ak| ^:qQ!Ja$V R153092ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为
k7jJ s!wgz153092--INTEGER/MONEY/REAL/FLOAT 类型51Testing软件测试网!~ ^i3\a
SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
5]l%n9fB#c$|~'U153092--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型51Testing软件测试网TP;F*Q!@G+g
PI() --返回值为π 即3.1415926535897936
}C0F#ygsnw$V153092RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数
1\*UgI:QU,DjRB9R T w153092
;] x1ck!}0sH!H Nx15309251Testing软件测试网S2A HX4b_1}

[$xB9aF T(}?L153092
g,V!I[%kJY/pP `153092----字符串函数----
'\6Df1wq%xZ153092ASCII() --函数返回字符表达式最左端字符的ASCII 码值
g|.w+rRnhd+bE153092CHAR() --函数用于将ASCII 码转换为字符
v9e6d#|%T153092--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值51Testing软件测试网w5\Z3`C T;Z$^M
LOWER() --函数把字符串全部转换为小写
1w1a*RF5A!S3[U6M153092UPPER() --函数把字符串全部转换为大写51Testing软件测试网N J@h.w8FK]3~1B
STR() --函数把数值型数据转换为字符型数据51Testing软件测试网n(F8b W uD8PH
LTRIM() --函数把字符串头部的空格去掉51Testing软件测试网3q%q6xZIV;og
RTRIM() --函数把字符串尾部的空格去掉51Testing软件测试网-rF)t*J&}AB
LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串51Testing软件测试网 U"Nz.C(I(F!xu
CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置
#pB S$Z!c3Oh153092SOUNDEX() --函数返回一个四位字符码51Testing软件测试网 eS&h+p e
--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值
v0_WPnDXd153092DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异51Testing软件测试网k9N&\Wj(M!~
--0 两个SOUNDEX 函数返回值的第一个字符不同
[^9`]`153092--1 两个SOUNDEX 函数返回值的第一个字符相同51Testing软件测试网,P%W,zJlA4a
--2 两个SOUNDEX 函数返回值的第一二个字符相同
kMw\0uEL153092--3 两个SOUNDEX 函数返回值的第一二三个字符相同
9f'n9Ve!V153092--4 两个SOUNDEX 函数返回值完全相同51Testing软件测试网B t$PBqSl_^
51Testing软件测试网:e0Eb?o7]'_

Hpj;l&W(Z(z15309251Testing软件测试网 PZ FBpHGQ

^NU}YhO153092QUOTENAME() --函数返回被特定字符括起来的字符串
!npLZ4jG|153092/*select quotename('abc', '{') quotename('abc')
)]wv UTp QR4z KW153092运行结果如下
2~#z F8V&@153092----------------------------------{
%Qn2\9Q/iX3lm J153092{abc} [abc]*/51Testing软件测试网y$ig,z3qsPv
51Testing软件测试网7WZ4FR_8M T.p%P

9T;h`B [5hB2f"R^153092
Nfd b&ZE*u%b AV153092REPLICATE() --函数返回一个重复character_expression 指定次数的字符串51Testing软件测试网 ?1@'A9t%j9E"a}8?!P
/*select replicate('abc', 3) replicate( 'abc', -2)
!R5AN#[ pW9?D153092运行结果如下
TtvK$wMXNz153092----------- -----------
1tj T!]7p![5] ~tA?153092abcabcabc NULL*/51Testing软件测试网)R g4g+tBK

pO7Q V\ p153092
"fN V;b/k1]cTs153092
X Ry#N1cu{Jn"|5{[3T153092REVERSE() --函数将指定的字符串的字符排列顺序颠倒
`Z ctz:VhEn153092REPLACE() --函数返回被替换了指定子串的字符串
$J!?`)|u@9Uj153092/*select replace('abc123g', '123', 'def')51Testing软件测试网/L1yz4I v
运行结果如下51Testing软件测试网zrxF&O J
----------- -----------51Testing软件测试网+u,B*GfSQK
abcdefg*/
iMM(Gtu G O [&fjn15309251Testing软件测试网.t b {,c%eCMs @

qn$X`!]7^$t-@'f153092
{bz(}[In#O153092SPACE() --函数返回一个有指定长度的空白字符串
jbI@"e6@153092STUFF() --函数用另一子串替换字符串指定位置长度的子串
w&Cxn kxu-gEAE#~(e15309251Testing软件测试网 cZ"?sL$l__
51Testing软件测试网$k(mY9[;hF

u2jZXkx#B15309251Testing软件测试网]'}2tc+sx RQ
----数据类型转换函数----51Testing软件测试网/L RM#Q&JV
CAST() 函数语法如下
0x1Oe1y"@q0}-r153092CAST() (<expression> AS <data_ type>[ length ])
5w6g l(PS-f*t8^cZt6C153092CONVERT() 函数语法如下
HEEMW7Il@V153092CONVERT() (<data_ type>[ length ], <expression> [, style])51Testing软件测试网_}mM#R*|
51Testing软件测试网K5F V4w\

3@?"[4n!N9~4?(N15309251Testing软件测试网xk ZPf\:B;ctc
select cast(100+99 as char) convert(varchar(12), getdate())
"m+I2xG0Q153092运行结果如下51Testing软件测试网(^w y+{)p[;~ N1f"^q
------------------------------ ------------51Testing软件测试网+j1I kh _\
199 Jan 15 2000
p l[6_3Tx V9O153092
;Q&Fo#T n}fj153092
6VOA9gR3e&u |3M3K153092
,|gDu@mt153092----日期函数----
'c0{ [N,FzU#RL XX153092DAY() --函数返回date_expression 中的日期值
}B+{S:AP153092MONTH() --函数返回date_expression 中的月份值51Testing软件测试网d\`[:X L)@
YEAR() --函数返回date_expression 中的年份值
%F6{5jW'\h)aVV@153092DATEADD(<datepart> ,<number> ,<date>)
[3C5r.M*N~ g153092--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期
p a4w-j|153092DATEDIFF(<datepart> ,<number> ,<date>)
:MM,Uw)LB6B153092--函数返回两个指定日期在datepart 方面的不同之处
e.Y-EO GjF153092DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分
Cg4K3Z{)t n153092DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分
6I~ r`cXTa8^153092GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间
7iy-sn b15309251Testing软件测试网S7G6D%MM` M6T
51Testing软件测试网qL.X(g'I { ~
51Testing软件测试网_U%\'aT4M
----系统函数----51Testing软件测试网ni9O ^ KqV
APP_NAME() --函数返回当前执行的应用程序的名称51Testing软件测试网C6G:{$kF2l
COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值
2C ~ KGW5tB7^S153092COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值51Testing软件测试网SwVFW/bD
COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名51Testing软件测试网[ YSc1x
DATALENGTH() --函数返回数据表达式的数据的实际长度51Testing软件测试网jj*SjR9{2E i
DB_ID(['database_name']) --函数返回数据库的编号
@O9R9l-|G$~ V+MX ^153092DB_NAME(database_id) --函数返回数据库的名称
"j3^:J&f,r/P2@/B153092HOST_ID() --函数返回服务器端计算机的名称
*Q]6EuP,PPPv1J153092HOST_NAME() --函数返回服务器端计算机的名称51Testing软件测试网g q ka[,tp!cM
IDENTITY(<data_type>[, seed increment]) [AS column_name])51Testing软件测试网Q0gN:n)t[4{P
--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中51Testing软件测试网yj?]6iK:s
/*select identity(int, 1, 1) as column_name
#s'yUF E-m8kFS153092into newtable51Testing软件测试网L7vf+Ae%B$v
from oldtable*/
2SR*S6g r{v6I153092ISDATE() --函数判断所给定的表达式是否为合理日期51Testing软件测试网2u3d'jsU`i
ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换
w\ W"^I/D{153092ISNUMERIC() --函数判断所给定的表达式是否为合理的数值
6U!n8`jolQ153092NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值
P1cT'f`G[\153092NULLIF(<expression1>, <expression2>)51Testing软件测试网t}`,kq&F
--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值51Testing软件测试网3o-[+jH t5Kmp
51Testing软件测试网 bH'g h&O ?f,p6wn

HaFJGw15309251Testing软件测试网:Fb-As8}4MA!F

:@2V#e~~]15309251Testing软件测试网,V~Fu/sQIP

M@_H9B15309251Testing软件测试网%s"vq~z/l_)L&v
sql中的保留字51Testing软件测试网7p Xvrr1S

|;k rl%Bo153092
8uE8[gh~?Ai153092
6lnh6l8_|Mq153092action add aggregate all51Testing软件测试网IS/p7K{{%NUJB
alter after and as
[R[xl153092asc avg avg_row_length auto_increment
.gl1ON0c'RL,_'L153092between bigint bit binary51Testing软件测试网e{ ]9k|f+Bk{4yF
blob bool both by
d T8?])O\%N[#Iq153092cascade case char character
:z;E9A1I,mYRDT2D153092change check checksum column51Testing软件测试网:t ZxgZ
columns comment constraint create51Testing软件测试网/hM mP$q5t
cross current_date current_time current_timestamp
jO.Tep6]153092data database databases date
%Yo"i*I!?153092datetime day day_hour day_minute51Testing软件测试网E-gP*@2v L&o
day_second dayofmonth dayofweek dayofyear
YTPmg E$@$O&[153092dec decimal default delayed
Xo;x1Exn3?153092delay_key_write delete desc describe
1X'[x*~6Ws%w153092distinct distinctrow double drop51Testing软件测试网l/q6W5}'kj-D~/H\
end else escape escaped
Iw;LHJo%UkI153092enclosed enum explain exists51Testing软件测试网{/t%X~/B/TJgB
fields file first float51Testing软件测试网qA*W.r.kIU L
float4 float8 flush foreign51Testing软件测试网3kLQ8N$]w W
from for full function51Testing软件测试网h},J5i(X [.~Y
global grant grants group
nc?"r8L153092having heap high_priority hour51Testing软件测试网*\7RK8g2q9BFFr
hour_minute hour_second hosts identified
.x`6ucoL153092ignore in index infile51Testing软件测试网1zk&BdeL0MJ%uMx d
inner insert insert_id int
q%fcDM/s.p` \.c153092integer interval int1 int251Testing软件测试网e&J!U(j@c3_.D E'z]
int3 int4 int8 into51Testing软件测试网X*l bt]3h
if is isam join51Testing软件测试网 KdB.qV9Qy
key keys kill last_insert_id51Testing软件测试网0mT"E4YG
leading left length like
^"Uot*{ g153092lines limit load local51Testing软件测试网Ezq5P y/Y
lock logs long longblob51Testing软件测试网Z9U;d6l!ma8K
longtext low_priority max max_rows
,}"xb)W a9Y153092match mediumblob mediumtext mediumint51Testing软件测试网q$_5H7kIt
middleint min_rows minute minute_second51Testing软件测试网 woZA]3X:N+NI8e
modify month monthname myisam
F~R&Q(BB4J153092natural numeric no not
V9?{'ea.H153092null on optimize option51Testing软件测试网9K ]w\W:Qv4Q*N
optionally or order outer51Testing软件测试网cdEK4u
outfile pack_keys partial password51Testing软件测试网b#_&TG&I*N
precision primary procedure process51Testing软件测试网7m/p a%Y r1L%OP
processlist privileges read real
f z3B;A!S6\aB153092references reload regexp rename51Testing软件测试网C^ \9I wHA
replace restrict returns revoke
0jF/KF$HS)V.jr(BQ153092rlike row rows second
3p.Bj/X%mgU153092select set show shutdown51Testing软件测试网N+QeqvJ [&W
smallint soname sql_big_tables sql_big_selects51Testing软件测试网o"q)o4@#f)l5c2H
sql_low_priority_updates sql_log_off sql_log_update sql_select_limit
1n6GNz1d153092sql_small_result sql_big_result sql_warnings straight_join
TzcQ,M%r+z153092starting status string table
~-C|YT Y$C153092tables temporary terminated text51Testing软件测试网 ~9T+ysa,a5v {k wb
then time timestamp tinyblob
5RbL;pgA|153092tinytext tinyint trailing to51Testing软件测试网T#r&Q,t#WR x+`b~
type use using unique51Testing软件测试网,ol `,U2f)?6e{Q
unlock unsigned update usage
:k,}k[5cHL;EY9N5S153092values varchar variables varying
k1Wl mB2nT153092varbinary with write when
x$] t-}&ET?6J153092where year year_month zerofill


]7p}@4T0l FrD153092SQL语句导入导出大全

/******* 导出到excel51Testing软件测试网0Y/@x q\O
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'51Testing软件测试网3\vtDe6pL? d
/*********** 导入Excel
w)_ Cm:z6lgD Mj153092SELECT *51Testing软件测试网 Zx U&Sd5{ h
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
(i hOF`153092'Data Source="c:test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions51Testing软件测试网2S~"^KP3i t

W j)}.Kx9t;gV5v8i153092/*动态文件名
-H4k1[ O Q!?"U153092declare @fn varchar(20),@s varchar(1000)51Testing软件测试网"GH$x.[^ }mA
set @fn = 'c:test.xls'
}Eejz!v|I153092set @s ='''Microsoft.Jet.OLEDB.4.0'',
O"beY)ZB)~f1O)}7x,D153092''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
2Dz;ve3N"Qh153092set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
gp w!@o153092exec(@s)
Rb$TV9O/|g153092*/

 

/*************导出到Access********************/
/cw |dS9}153092insert into openrowset('Microsoft.Jet.OLEDB.4.0',51Testing软件测试网 D&SoA+yLD;W
'x:A.mdb';'admin';'',A表) select * from 数据库名..B表
YI@b FO.t153092
sjt KP!u153092/*************导入Access********************/
0f4R^?mW\t153092insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0',51Testing软件测试网6E H^T7V0ud.K%r#ju
'x:A.mdb';'admin';'',A表)
-kO}7?u Xl[~153092
*_Fy@ j/}~'o153092文件名为参数51Testing软件测试网]6G5`Xp,D@4}
declare @fname varchar(20)51Testing软件测试网6i1hq&aB$nT
set @fname = 'd:test.mdb'
M%o(@)age/|153092exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',51Testing软件测试网$C*]8s;SiswE0Z8~
'''+@fname+''';''admin'';'''', topics) as a ')51Testing软件测试网2a+C gj:_"e1yF]

y+uqM3Wd153092SELECT *51Testing软件测试网;gVQ h7i ?t b
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
{"}1]"Jr153092'Data Source="f:northwind.mdb";Jet OLEDB database Password=123;User ID=Admin;Password=;')...产品51Testing软件测试网C0D.FWMnG

HP i%UYt153092********************* 导入 xml 文件
n(S&II8gFm9_15309251Testing软件测试网7t@$yL l9BI[:P
DECLARE @idoc int51Testing软件测试网#omT&Pb"pL9]
DECLARE @doc varchar(1000)51Testing软件测试网*n$?_%lj8vx/~X
--sample XML document
'jNB.[/l153092SET @doc ='
,m$A:mm'K153092
-mQ7e F:I.Jn15309251Testing软件测试网 B4uli F:DK
51Testing软件测试网SD7KkGM
Customer was very satisfied
0v;mX1kCY u15309251Testing软件测试网 } e0CV-b(t2Z

aV#I[.k j,{153092
Gugy+A0G1[ Zd w15309251Testing软件测试网n%Y Z0zin
Important
E]3~uz(VZky153092Happy Customer.51Testing软件测试网8VHS8Y4EwTJ`

&ZJ/S QI)L$Hl153092
M2fS6j!W0\gK{15309251Testing软件测试网,{-\4x"l.MuE
51Testing软件测试网 |*uLD f`0C
'
(C`#gF[153092-- Create an internal representation of the XML document.
-ZiZVX ]f6HB"R(Yy153092EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
!\#fF[9s2p153092
[s aMd153092-- Execute a SELECT statement using OPENXML rowset provider.
O2qXUVL I153092SELECT *51Testing软件测试网!i-u}E@ h-FY5Q
FROM OPENXML (@idoc, '/root/Customer/Order', 1)51Testing软件测试网Q1X^$` gW
WITH (oid char(5),51Testing软件测试网 X1b5cK/I0B&nK1UP{
amount float,
$g/|3M+Zd9lt-E9w;O)a1v153092comment ntext 'text()')51Testing软件测试网.[s5sK]Lp0I
EXEC sp_xml_removedocument @idoc51Testing软件测试网;G _ }LhK({2k?

q.R5bc+VT,P15309251Testing软件测试网pgi]8kGV
51Testing软件测试网Q g(_`0H9zl8O
???????51Testing软件测试网 {0^ g9u#A ej bn

x;k U2oA153092/**********************Excel导到Txt****************************************/
3ov8V4IX7q153092想用
s!r\:_ K153092select * into opendatasource(...) from opendatasource(...)51Testing软件测试网+Ar1v5{4k4h%F*?p
实现将一个Excel文件内容导入到一个文本文件51Testing软件测试网0o`S0S k2t

'|-V0]h$Bt7`153092假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)
,h"RC.ieq153092且银行帐号导出到文本文件后分两部分,前8位和后8位分开。51Testing软件测试网A,SP[7D7gq

"gC#Ij)rlrpa15309251Testing软件测试网B8H bxl-}~N
邹健:
5rL^|[E P153092如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号251Testing软件测试网w},sj({+u&T)Y
然后就可以用下面的语句进行插入
.c/mIF!C!k n]1t153092注意文件名和目录根据你的实际情况进行修改.51Testing软件测试网IJ ~/Y/R0Y3T/f jO?
51Testing软件测试网'N8i.n~R&Z%sy*s
insert into
$z6E&H]O*On153092opendatasource('MICROSOFT.JET.OLEDB.4.0'
:J$N:NJ!`aT153092,'Text;HDR=Yes;DATABASE=C:'
o!b*Ua/sL*w4}+P153092)...[aa#txt]51Testing软件测试网'a a ^V)gd8dJy%A
--,aa#txt)51Testing软件测试网 HGZ&w8P]
--*/
@F^*\ZWh153092select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
)K,K2V+k1iO7Zr153092from
+^)ak5YZF CX153092opendatasource('MICROSOFT.JET.OLEDB.4.0'
"nu[Ko}_2K153092,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls'
L'D Q uY2w153092--,Sheet1$)
IAF"J {Po1V153092)...[Sheet1$]51Testing软件测试网~:iD5c1X

4EpF$g+W8m*Q {153092
YE.J2J|7p#]153092
@ Z!S1zeE153092如果你想直接插入并生成文本文件,就要用bcp
/Yh-M.M4I153092
Y.C9u8W H/Pf0\l153092declare @sql varchar(8000),@tbname varchar(50)
mlh:VRH2zf15309251Testing软件测试网.sT0`iG}/f3\
--首先将excel表内容导入到一个全局临时表51Testing软件测试网~ K$iv5Ue$\e
select @tbname='[##temp'+cast(newid() as varchar(40))+']'
,}$o8R.MDS$S153092,@sql='select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
^apK?(s153092into '+@tbname+' from
$svDO4x*]153092opendatasource(''MICROSOFT.JET.OLEDB.4.0''51Testing软件测试网a Pn0Q!^K$^
,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls''51Testing软件测试网;iVqrO4s4G^
)...[Sheet1$]'51Testing软件测试网F2Z,T8HK,O(cs$p:U
exec(@sql)
e+xxD7Qh{1M15309251Testing软件测试网r?n,BK"d;A
--然后用bcp从全局临时表导出到文本文件
f6~)B0?|.JB_X153092set @sql='bcp "'+@tbname+'" out "c:aa.txt" /S"(local)" /P"" /c'51Testing软件测试网5wwTz"br`*O^\
exec master..xp_cmdshell @sql
*VE$}JMf15309251Testing软件测试网y/I@1i Y0z
--删除临时表51Testing软件测试网,A/T,j}r
exec('drop table '+@tbname)

/*************导出到Access********************/51Testing软件测试网$AC-RFF8bI`!g
insert into openrowset('Microsoft.Jet.OLEDB.4.0',
(F%A&G2R/[0oW h153092'x:A.mdb';'admin';'',A表) select * from 数据库名..B表
v @T(B%V!r.fN153092
.Q?+U7^w153092/*************导入Access********************/
"] i)vi @)i153092insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0',
nu*a})U P153092'x:A.mdb';'admin';'',A表)
K/Q#T!vSY+o15309251Testing软件测试网8`{ vPr Zf
文件名为参数51Testing软件测试网+lQ esE dC
declare @fname varchar(20)
B6nT)vR7}UAP[^153092set @fname = 'd:test.mdb'
:\Zdn'u(sb;O153092exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
)| d{ m.A.~#I0hI5E ?153092'''+@fname+''';''admin'';'''', topics) as a ')51Testing软件测试网:?sS~;K6U4qS6PGP1zh

UunS'g-Xb7cU153092SELECT *
3}jDt x$Q#Q~,D8FRu'F153092FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
(nt&`IO!U;_)B~T153092'Data Source="f:northwind.mdb";Jet OLEDB database Password=123;User ID=Admin;Password=;')...产品51Testing软件测试网"BMF,}:p0x x
51Testing软件测试网y1L&O ur1r)}4N
********************* 导入 xml 文件
.c`4qu F@-S6ACd153092
){ L)m"\8tm3[9_h153092DECLARE @idoc int
6O)XIc/xr6f%Z S153092DECLARE @doc varchar(1000)51Testing软件测试网!C3h&p)D.U'P,H
--sample XML document
)h,E K6o d| zOE*e153092SET @doc ='
2y L.]o ^s$crq15309251Testing软件测试网 x,SoW;A4fD%[7~nJ
51Testing软件测试网C9T)zUF"R"u JL
51Testing软件测试网&@mF iX
Customer was very satisfied51Testing软件测试网PM1f-Ak`

Q}&m^o.o @b#H153092
}e*OQE'][15309251Testing软件测试网2Hw;cT(vio
51Testing软件测试网(W v(t4G*N!g&i*Q
Important51Testing软件测试网8?6@3V4GTe!A
Happy Customer.51Testing软件测试网%PV5g rLQ!s
51Testing软件测试网P1P:Cb%xT#Q
51Testing软件测试网F1XBCNVsY
51Testing软件测试网^+T.{"t p.s

ab\l{'WO0x&r153092'
5C UnbX5D153092-- Create an internal representation of the XML document.
k.Rk;H]0AO153092EXEC sp_xml_preparedocument @idoc OUTPUT, @doc51Testing软件测试网R wKPq
51Testing软件测试网S XFa&p#Z'k
-- Execute a SELECT statement using OPENXML rowset provider.
;]E8p(kmg8J N153092SELECT *
B8NN(Q.UoP/Pj153092FROM OPENXML (@idoc, '/root/Customer/Order', 1)
i9@O6]JL#Rq"r153092WITH (oid char(5),51Testing软件测试网.Snk$_ u
amount float,
/xZm5yw@153092comment ntext 'text()')
7hORx%Q8V153092EXEC sp_xml_removedocument @idoc51Testing软件测试网BT$f-AT8GY^
51Testing软件测试网#jz6mR#IiK)Y s
51Testing软件测试网1d|r-{.U+x e|9p
51Testing软件测试网.{c$wEIJ%[ n Z
???????51Testing软件测试网/~mx%].D
51Testing软件测试网J?"~-\B]w
/**********************Excel导到Txt****************************************/
8Pcc;R x[}153092想用51Testing软件测试网*n1@4?D#Y BX tKQ
select * into opendatasource(...) from opendatasource(...)
+D'}%~ H5uVU153092实现将一个Excel文件内容导入到一个文本文件51Testing软件测试网j;}0iq I

lu4P4Q3oK153092假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)
`[8P@3^4J;q-Z!h+{]153092且银行帐号导出到文本文件后分两部分,前8位和后8位分开。
LE!e.L%`y153092
N%p1ugUN'|r)`LNw153092
TuUe1ZgU153092邹健:51Testing软件测试网F!HKpm+r f`6V2F
如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号251Testing软件测试网(es*e4ZE
然后就可以用下面的语句进行插入
%B/pm8?-d-r\we153092注意文件名和目录根据你的实际情况进行修改.51Testing软件测试网SwT1J7`N'Oe{
51Testing软件测试网+U&pxS?;IxN a
insert into
$c*oVC&jz;b g6M PT153092opendatasource('MICROSOFT.JET.OLEDB.4.0'51Testing软件测试网l#aX-|WD:}w6N
,'Text;HDR=Yes;DATABASE=C:'
Jb_PDW%H$Bc%k153092)...[aa#txt]
'{_ gp8B-^!v153092--,aa#txt)
A(h;Ie#X;d1z153092--*/51Testing软件测试网s l3_c;pl$q
select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
C |4B$et153092from51Testing软件测试网 [w/n'eY*{
opendatasource('MICROSOFT.JET.OLEDB.4.0'51Testing软件测试网u%II'[D/e~K&YF
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls'51Testing软件测试网FH udU
--,Sheet1$)51Testing软件测试网]7A5B|nV3u m_ `#ep
)...[Sheet1$]51Testing软件测试网R [~J4p)O W/t

Zi*Xv4sH15309251Testing软件测试网kt$r%I;\2GSF
51Testing软件测试网 p,n5USb6}
如果你想直接插入并生成文本文件,就要用bcp51Testing软件测试网 U5|bD_7Q
51Testing软件测试网4P@/ii.W
declare @sql varchar(8000),@tbname varchar(50)
/R'i T:I5Ls3H15309251Testing软件测试网B1AU J1`-s@xM NK5HD4Y
--首先将excel表内容导入到一个全局临时表
`f zx;E7hHW153092select @tbname='[##temp'+cast(newid() as varchar(40))+']'51Testing软件测试网V+MIHP?za
,@sql='select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
9|8H;ZL'SI0h.pC+x153092into '+@tbname+' from51Testing软件测试网P3|OM~T `Y%qY7v
opendatasource(''MICROSOFT.JET.OLEDB.4.0''51Testing软件测试网Jz9R'w1D@
,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls''51Testing软件测试网jw_R&r;]D2O
)...[Sheet1$]'51Testing软件测试网Gh%w$x"{9\
exec(@sql)
&h*|0_6L j5T#R[ `15309251Testing软件测试网`}_Avo9ANm
--然后用bcp从全局临时表导出到文本文件
@Oc+r Vo3x153092set @sql='bcp "'+@tbname+'" out "c:aa.txt" /S"(local)" /P"" /c'51Testing软件测试网)n,biVo%y5`(Fy
exec master..xp_cmdshell @sql
9x+B:I9rWq\V153092
]DO0DrV+^153092--删除临时表51Testing软件测试网]{@#t-m*ynsdy
exec('drop table '+@tbname)


TAG:

 

评分:0

我来说两句

日历

« 2024-03-04  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 12289
  • 日志数: 11
  • 图片数: 1
  • 建立时间: 2007-09-08
  • 更新时间: 2008-01-13

RSS订阅

Open Toolbar