数据定义语言用来定义数据库的各模式。常用关键字有:(x)CreateQ徏立数据表Q、AlterQ更Ҏ(gu)据表Q、DropQ删除数据表Q?br /> 建立数据?br /> CREATE TABLE table_name(
column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
column2 DATATYPE [NOT NULL],
...
)
说明Q上面的DATATYPE 指的是字D늚cdQNUT NULL 指是否ؓ(f)I,PRIMARY KEY 指本表的主键?br /> 建立索引
CREATE INDEX index_name ON table_name (column_name)
说明Qؓ(f)数据表格的某个字D徏立烦引以增加查询时的速度?br /> 更改数据表
ALTER TABLE table_name ADD COLUMN column_name DATATYPE
说明Q增加一个字Dc?br /> ALTER TABLE table_name ADD PRIMARY KEY (column_name)
说明Q将某个字段设ؓ(f)主键?br /> ALTER TABLE table_name DROP PRIMARY KEY (column_name)
说明Q将某个字段的主键定义取消?br /> 删除数据?br /> DROP table_name
DROP index_name
(2) 数据操作语言(DML)
数据操作语言QDMLQ用于操作数据表Q如增加、删除、查询、修改等。常用关键字有:(x)InsertQ插入数据)、DeleteQ删除数据)、SelectQ查询数据)和UpdataQ修Ҏ(gu)据)?br /> 插入数据
INSERT INTO table_name(column1,column2,...) VALUES (value1,value2, ...)
说明Q在插入语句中,若不指明要插入字D则Q按表中的字D顺序依ơ插入。另外,插入数据的类型应和所插入字段的类型相匚w?br /> INSERT INTO table_name (column1,column2,...) SELECT columnx,columny,...
FROM another_table
说明Q通过一个子查询别的表格相应字D늚值插入该表格?br /> 删除数据
DELETE FROM table_name WHERE conditions
说明Q删除符合条件的记录?br /> 查询数据
SELECT column1,columns2,... FROM table_name
说明Q把table_name 的相应字D|询出来?br /> SELECT * FROM table_name WHERE column1 = x AND column2 > y
说明Q这是一个带有条件的查询语句Q?‘表C查询所有的字段QW(xu)HERE 之后是条件表辑ּ?br /> SELECT column1,column2 FROM table_name ORDER BY column2 [DESC]
说明QORDER BY 是指定以某个字段排序Q[DESC]是指从大到小排列Q若没有指明Q则是从到大排列?br /> SELECT * FROM table1,table2 WHERE table1.colum1=table2.column1
说明Q这是一个组合查询,查询两个表格?column1 字段h相同值的记录。作Z个表中徏立关pȝ字段Q其cd必须匚w?br /> SELECT COUNT (*) FROM table_name WHERE column_name = x
说明Q查询符合条件的记录数?br /> SELECT SUM(column1) FROM table_name
说明Q计column1字段的数据d。除了SUM之外Q还可以用AVG()计算q_?、用MAX()计算最大倹{用MIN()计算最倹{?br /> SELECT * FROM table_name1 WHERE EXISTS (SELECT * FROM table_name2 WHERE
conditions)
说明Q这条查询语句用一个子查询语句作ؓ(f)该查询语句的条g。EXISTS指是否存在?br /> SELECT * FROM table_name1 WHERE column1 IN (SELECT column1 FROM
table_name2 WHERE conditions )
说明QIN后面接的是一个集合,表示column1字段的值在集合中的所有记录从table_name1表中选出来?br /> SELECT * FROM table_name1 WHERE column1 LIKE ‘x%?
说明Q该语句为模p查询。这里的?”是一个通配W,表示column1字段中以x开头的所有记录选出来?br /> SELECT * FROM table_name1 WHERE column1 BETWEEN x AND y
说明QBETWEEN 表示 column1 的g?x ?y之间?br /> 更改资料
UPDATE table_name SET column1=‘x?WHERE conditions
说明Q该语句表示在某U条件下column1字段的值改为x。若不加条gQ则默认该字D全部更攏V?br />
说明Q复制表(只复制结?源表名:(x)a 新表名:(x)b)
SQL: select * into b from a where 1<>1
说明Q拷贝表(拯数据,源表名:(x)a 目标表名Qb)
SQL: insert into b(a, b, c) select d,e,f from b;
说明Q显C文章、提交h和最后回复时间
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
说明Q外q接查询(表名1Qa 表名2Qb)
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
说明Q日E安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时?getdate())>5
说明Q两张关联表Q删除主表中已经在副表中没有的信?
SQL:
delete from info where not exists ( select * from infobz where info.infid=infobz.infid
说明Q?-
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 Q?Q?
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND B
WHERE A.NUM = B.NUM
说明Q?-
SQL:
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and pdU?'"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源?高考Ll?
说明Q?
从数据库中去一q的各单位电(sh)话费l计(?sh)话费定额贺电(sh)化肥清单两个表来源Q?
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')
说明Q四表联查问题:(x)
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 .....
说明Q得到表中最的未用的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)
下列语句部分是Mssql语句Q不可以在access中用?br />
SQL分类Q?
DDL—数据定义语a(CREATEQALTERQDROPQDECLARE)
DML—数据操U语a(SELECTQDELETEQUPDATEQINSERT)
DCL—数据控制语a(GRANTQREVOKEQCOMMITQROLLBACK)
首先,要介l基语句Q?br />1、说明:(x)创徏数据?br />CREATE DATABASE database-name
2、说明:(x)删除数据?br />drop database dbname
3、说明:(x)备䆾sql server
--- 创徏 备䆾数据?device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开?备䆾
BACKUP DATABASE pubs TO testBack
4、说明:(x)创徏新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
Ҏ(gu)已有的表创徏新表Q?
AQcreate table tab_new like tab_old (使用旧表创徏新表)
BQcreate table tab_new as select col1,col2?from tab_old definition only
5、说明:(x)删除新表drop table tabname
6、说明:(x)增加一个列
Alter table tabname add column col type
注:(x)列增加后不能删除。DB2中列加上后数据类型也不能改变Q唯一能改变的是增加varcharcd的长度?br />7、说明:(x)d主键Q?Alter table tabname add primary key(col)
说明Q删除主键:(x) Alter table tabname drop primary key(col)
8、说明:(x)创徏索引Qcreate [unique] index idxname on tabname(col?)
删除索引Qdrop index idxname
注:(x)索引是不可更改的Q想更改必须删除重新建?br />9、说明:(x)创徏视图Qcreate view viewname as select statement
删除视图Qdrop view viewname
10、说明:(x)几个单的基本的sql语句
选择Qselect * from table1 where 范围
插入Qinsert into table1(field1,field2) values(value1,value2)
删除Qdelete from table1 where 范围
更新Qupdate table1 set field1=value1 where 范围
查找Qselect * from table1 where field1 like ?value1%?---like的语法很_֦Q查资料!
排序Qselect * from table1 order by field1,field2 [desc]
LQselect count * as totalcount from table1
求和Qselect sum(field1) as sumvalue from table1
q_Qselect avg(field1) as avgvalue from table1
最大:(x)select max(field1) as maxvalue from table1
最:(x)select min(field1) as minvalue from table1
11、说明:(x)几个高查询q算?br />AQ?UNION q算W?
UNION q算W通过l合其他两个l果表(例如 TABLE1 ?TABLE2Qƈ消去表中M重复行而派生出一个结果表。当 ALL ?UNION 一起用时Q即 UNION ALLQ,不消除重复行。两U情况下Q派生表的每一行不是来?TABLE1 是来自 TABLE2?
BQ?EXCEPT q算W?
EXCEPT q算W通过包括所有在 TABLE1 中但不在 TABLE2 中的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?EXCEPT 一起用时 (EXCEPT ALL)Q不消除重复行?
CQ?INTERSECT q算W?br />INTERSECT q算W通过只包?TABLE1 ?TABLE2 中都有的行ƈ消除所有重复行而派生出一个结果表。当 ALL ?INTERSECT 一起用时 (INTERSECT ALL)Q不消除重复行?
注:(x)使用q算词的几个查询l果行必L一致的?
12、说明:(x)使用外连?
A、left outer joinQ?
左外q接Q左q接Q:(x)l果集几包括q接表的匚w行,也包括左q接表的所有行?
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
BQright outer join:
叛_q接(双?Q结果集既包括连接表的匹配连接行Q也包括双接表的所有行?
CQfull outer joinQ?
全外q接Q不仅包括符可接表的匹配行Q还包括两个q接表中的所有记录?br />
其次Q大家来看一些不错的sql语句
1、说明:(x)复制?只复制结?源表名:(x)a 新表名:(x)b) (Access可用)
法一Qselect * into b from a where 1<>1
法二Qselect top 0 * into b from a
2、说明:(x)拯?拯数据,源表名:(x)a 目标表名Qb) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:(x)跨数据库之间表的拯(具体数据使用l对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库?where 条g
例子Q?.from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、说明:(x)子查?表名1Qa 表名2Qb)
select a,b,c from a where a IN (select d from b ) 或? select a,b,c from a where a IN (1,2,3)
5、说明:(x)昄文章、提交h和最后回复时?br />select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:(x)外连接查?表名1Qa 表名2Qb)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:(x)在线视图查询(表名1Qa )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:(x)between的用?between限制查询数据范围时包括了边界?not between不包?br />select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数? and 数?
9、说明:(x)in 的用方?br />select * from table1 where a [not] in (‘??’??’??’??
10、说明:(x)两张兌表,删除主表中已l在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:(x)四表联查问题Q?br />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 .....
12、说明:(x)日程安排提前五分钟提?
SQL: select * from 日程安排 where datediff('minute',f开始时?getdate())>5
13、说明:(x)一条sql 语句搞定数据库分?br />select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
14、说明:(x)?0条记?br />select top 10 * form table1 where 范围
15、说明:(x)选择在每一lb值相同的数据中对应的a最大的记录的所有信?cMq样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成l排?{等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:(x)包括所有在 TableA 中但不在 TableB和TableC 中的行ƈ消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:(x)随机取出10条数?br />select top 10 * from tablename order by newid()
18、说明:(x)随机选择记录
select newid()
19、说明:(x)删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、说明:(x)列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:(x)列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:(x)列示type、vender、pcs字段Q以type字段排列Qcase可以方便地实现多重选择Q类似select 中的case?br />select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
昄l果Q?br />type vender pcs
?sh)?A 1
?sh)?A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:(x)初始化表table1
TRUNCATE TABLE table1
24、说明:(x)选择?0?5的记?br />select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
随机选择数据库记录的Ҏ(gu)Q用Randomize函数Q通过SQL语句实现Q?br /> 对存储在数据库中的数据来_(d)随机数特性能l出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解x案是建立如下所C的循环Q?
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... q里是执行脚?...
end if
objRec.MoveNext
Wend
q很Ҏ(gu)理解。首先,你取??00范围之内的一个随机数Q假?00是数据库内记录的LQ。然后,你遍历每一记录来测试ID 的倹{检查其是否匚wRNumber。满x件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber {于495Q那么要循环一遍数据库q旉可就长了。虽?00q个数字看v来大了些Q但相比更ؓ(f)E_的企业解x案这q是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不死定了Q?
采用SQLQ你可以很快地扑և准确的记录ƈ且打开一个只包含该记录的recordsetQ如下所C:(x)
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
不必写出RNumber 和IDQ你只需要检查匹配情况即可。只要你对以上代码的工作满意Q你自可按需操作“随机”记录。Recordset没有包含其他内容Q因此你很快p扑ֈ你需要的记录q样大大降低了处理旉?
再谈随机?
现在你下定决心要榨干Random 函数的最后一滴aQ那么你可能?x)一ơ取出多条随录或者想采用一定随围内的记录。把上面的标准Random CZ扩展一下就可以用SQL应对上面两种情况了?
Z取出几条随机选择的记录ƈ存放在同一recordset内,你可以存储三个随机数Q然后查询数据库获得匚wq些数字的记录:(x)
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想选出10条记录(也许是每ơ页面装载时?0条链接的列表Q,你可以用BETWEEN 或者数学等式选出W一条记录和适当数量的递增记录。这一操作可以通过好几U方式来完成Q但?SELECT 语句只显CZU可能(q里的ID 是自动生成的L(fng)Q:(x)
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"
注意Q以上代码的执行目的不是查数据库内是否有9条ƈ发记录?br />
随机d若干条记录,试q?br />Access语法QSELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysql

Access左连接语?最q开发要用左q接,Access帮助什么都没有,|上没有Access的SQL说明,只有自己试, 现在C以备后查)
语法

使用SQL语句 ?..代替q长的字W串昄
语法Q?br />SQL数据库:(x)select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access数据库:(x)SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
Conn.Execute说明
ExecuteҎ(gu)
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集Q该Ҏ(gu)的用格式分Z下两U:(x)
1Q执行SQL查询语句Ӟ返回查询得到的记录集。用法ؓ(f)Q?br /> Set 对象变量?q接对象.Execute("SQL 查询语言")
ExecuteҎ(gu)调用后,?x)自动创录集对象Qƈ查询结果存储在该记录对象中Q通过SetҎ(gu)Q将记录集赋l指定的对象保存Q以后对象变量就代表了该记录集对象?br />
2Q执行SQL的操作性语aӞ没有记录集的q回。此时用法ؓ(f)Q?br /> q接对象.Execute "SQL 操作性语? [, RecordAffected][, Option]
·RecordAffected 为可选项Q此出可攄一个变量,SQL语句执行后,所生效的记录数?x)自动保存到该变量中。通过讉K该变量,可知道SQL语句队多条记录q行了操作?br /> ·Option 可选项Q该参数的取值通常为adCMDTextQ它用于告诉ADOQ应该将ExecuteҎ(gu)之后的第一个字W解释ؓ(f)命o(h)文本。通过指定该参敎ͼ可执行更高效?br />
·BeginTrans、RollbackTrans、CommitTransҎ(gu)
q三个方法是q接对象提供的用于事务处理的Ҏ(gu)。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务QCommitTrans用于提交所有的事务处理l果Q即认事务的处理?br /> 事务处理可以一l操作视Z个整体,只有全部语句都成功执行后Q事务处理才成功;若其中有一个语句执行失败,则整个处理就失败,q恢复到处里前的状态?br /> BeginTrans和CommitTrans用于标记事务的开始和l束Q在q两个之间的语句Q就是作Z务处理的语句。判断事务处理是否成功,可通过q接对象的Error集合来实玎ͼ若Error集合的成员个C?Q则说明有错误发生,事务处理p|。Error集合中的每一个Error对象Q代表一个错误信息?br />