ǰλã >> SQL >> 常?SQL?及其函数集锦
  ϸ

常?SQL?及其函数集锦

ȶȣ510   ʱ䣺2016-05-05 12:19:15.0
常?SQL?及其函数集锦2
??操作数据)
insert??字和空?不?要引号,而字符型数据则需要引号??
insert value?在向表中插入几个数据的时候非常有?但显然这?够的。?果你想向表中插入25000行数?怎么办?在这种情况下insert select?就非常有效?它允?程序员拷贝一??组表的信?另一???你?在下边这几?情况下使用??。需要查询的表经常产生利润的增加、需要查询的表可以从多个数据库或表中获得外部数据,由于??的查询?比单?表的查?速度慢得多因此?单个表的查?速度要远远高于?杂?缓慢的多个表查??在服务?客户机系统上?要查询的表的数据经常存储在?户机上以减少网络?数据传输速度?
并不?有的数据库?理系统都?临时表???查你的数?系统的文档,看看它是否支持临时表
insert select?的?法格式?下:
insert into table_name (col1,col2...) select col1,col2... from tablename where search_condition
?上来说它??个select?的输出结果在输入到另??格中去,在insert value?规则也?用于insert select??
insert select?要求你遵??下?则:
1、select?不能从?插入数据的表??择行??
2、insert into?列数必须与select?返回的列数相等??
3、insert into?数据类型要与select?返回的数?型相?
insert select?的另外一?处是当你?要?表进行重新定义时对表进?备份。这时需要你通过选择原?表中的所有数?将其插入到一?时表?完成?
例?:insert into copy_table select * from origina_table;然后你就?放心地?原?表进行变更了?
几乎?有的数据库系统都?导入或?出ASCLL码的文本文件,尽?QL?没有这个功能,SQL不会做得比从??数据库开始更好??
?从?部数???入和导出数据看不懂看不懂?

??创建和操作表)
当一?发人员在建立数据库时必须要?虑?些事情???件事情是你的权限级别,?果你使用的关系型数据库?理系统支持权限,你必须确认你?具有系统管理设置权限或系统?理员已经允?你有创建数据库的权限?
许?因素会?你?计数?造成影响,?下边的:
1、安全问题;2、?盘的?空间?、数??索及响应的?度?、数?新的数度?、?表归并返回数?速度?、RDBMS对临时表的支持??
当你在进行代码和数据库的结构设?时将你的数据结构与你当时的意图进行?细的记录?常重要的,这?为数?典??
大?数RDBMS?提供了生成数?典的工具包或有?明来告诉你?何安装它?
主关?和?关键字,主键?性,外键关联其它表字段??
建表基本??
create table table_name (field1 datatype[NOT NULL],
field2 datatype[NOT NULL],
field3 datatype[NOT NULL]...);
建表时oracle??的数?型:
char:可以存储长度为1~255?符的字?串,空格会??到字符串的右边以保证其内容满足定义的长度?
date:包?期的世纪、年、月、日、时、分、??
long:可以支持长?G的字符串?
long raw:可以存储长?G的二进制内??
number:零、?值或负?的定点或浮点数?
raw:可以存储长不过255?节的二进制代码??
rowid:用???制的数来标明当前行在表内的唯?地址?
varchar2:变长的字母或数字,长度???000?
?long数据类型在其它的数据库系统中常?称为备注类型,它主?用于存储大量的可以在稍后返回的文?容??
long raw类型在其它数?系统??为大二进制类?blob),它?用来存储图形,声音??频数?尽?关系型数?管理系统?初不?它们而?计的,但??媒体数据?存储在blob类型的字段内?
rowid常用在可以将你的表中的每?条?录加以唯?的标识的场合,?多关系型数据库?理系统用counter(如access)或identity(sql server)来表达这??念??
null???饰,因为如果??段的内?为null的话实际上是说这?段中?么东西也没有。在建立表的时?,大?数数?管理系统允?你用not null来指明字段是否为飞空属?,not null的意思就?当前表的该字段中不能有任何?录存在空值??
在?择主关?段时有几?要注意的??,我?近?过,oracle提供了一个rowid字?,它对于每一行均会自动??。因此默认情况下它?是???的数值,将rowid字?作为主关?有很多理由??
用一?经存在的表来建表?
使用的情况:
1、当你?表进行临时改动需要将数据选出时这种方法是很有用的?
2、当你?创建的表与已有的表类似并且其内?页类似时?
??
create table new_table(field1,field2,field3)
as(select field1,field2,field3
from old_table <where ...>);
alert table???你做两件事:
1、加入一列到已经存在的表???
2、修改已经存在的表中的某?列??
?格式如下?
alter table table_name <add column_name data_type;|
      modify column_name data_type;>
想把某一列由not null改变为null?使用下边的?法:
alter table table_name modify(column_name data_type null);
如果想把?列由null改变为not null,你必须经过?下?骤:
1、确认?改变的列?没有null值??
2、删掉你?发现的任何null?删除、更新这??等等)?
3、使用alter table命令?
DROP TABLE?从数??除一?定的表以及与之相关联的索引和视图?
推荐使用drop table owner.new_bills;

??创建视图和索??
视图常常?为虚?它是用create view?建立的,在使用?图以后你?对?图采用?下命令:select,insert,input,update,delete
索引?磁盘上数?存储方式不同的另外一种组织数?方法,索引的特例???录依?在?盘上的存储位?示,索引?在表内创建一?或列的组合,当应用索引以后,数据会按照你使用create index??定义的排序方式返回给用户,?过对??、特定的两个表的归并字?进?索引?获得明显的好处??
当表?数据改变以后,你将会在查询?图时发现相应的改变,视图并不占用数据库或表的物理空间?
?格式如下?
create view <view_name> [(column1,column2...)] as select <table_name column_names> from <table_name>
当创建?图后,它实际上是??表??
例?:create view creditcard_debts as select * from debts where account_id=4;创建了索?
然后查??select * from creditcard_debts;等同于select * from debts where account_id=4;
create view也允许你从表??择特定的列到?图中,例如create view company_info (name,state) as select * from company;然后查?的时候就?示name和state?
列??
如果数据量较大,创建索引以后查?数据的?度会比直接查??多??
??号将几组数据组合起来,然后自己命名?图名称,例?:create view envelope (company,mailing_address) as select name,address+" "+city+","+state
from company;
sql在执行过程中,?先会查找?查?的是不是?如果找不到表,然后它就会去?图里面去找看有没有??
比较复杂点的视图创建?
create view example(state,total_bills,total_amount) as select distinct company.state,count(bills.name),sum(bills.amount) from bills,company group by company.state having bills.name = company.name;
在?图的select??用约束是必然的,在使用select??以应用下边这两个规则?
1、你不能用union操作?
2、你不能使用order by子句,但?视图?用group by子句?有order by子句相同的功能??
你可以在数据库的??多个表中使用视图,也?在SQL和数?应用程序?用虚表?创建?图以后,你可以用insert,update,delete?来更新?插入?删除?图中的数???
下边例子显示了?何在视图?作数?
create view late_payment as select * from bills;创建视图
update late_payment set amount = amount*1.10;更新视图
delete from late_payment where account_id = 4;从?图中删除??
update late_payment set new_total = new_total + 10 where new_total > 100;更新视图
如果你在创建视图时使用了dintinct子句,那么你就不能插入或更新这个视图?记录?
视图对于实现数据库的安全有相当大的用处??
在单位换算中使用视图:例如加拿大的用户不想?繁的进?美元与加拿大元之间的?工作?
create view canadian_bills(name,can_amount) as select name,amount/1.10 from bills;
当把??询分解成几个视图以后,最后的查?就非常简单了,当然,使用???图也经常?须的?
删除视图:drop view vie_name;
?drop view命令会使?有与drop视图相关联的视图不能正常运?,一些数数据库系统甚至将?有与要drop的?图相关联的?图也删除掉??
你可以删除一??图?不影响任何??实的?这也就是为什么我?视图称为虚表的原因??
在数??用索引可以?SQL使用直接访问方式。SQL采用树形结构来存储和返回索引数据,用以指示的数据存储在树的最??(也就??,它??称为结点(也可以叫叶子)。每??点中有一?向其它结点的指针,结点左边的值只?的双亲结点,结点右边的?则??子结点或叶子?
索引??
create index index_name on table_name(column_name1[column_name2],...);
不同的数?创建索引?基本都不同,但是?有解释器有几点是相同的,它们的基?始?句都?
create index index_name on table_name(column_name,...);
例?在一?里面的某?段创建了索引,那么查询出来的数据都是按?字?排序的??
有了索引排序为什么还?要order by排序?不同之?在于当你使用order by子句时每次运行它都需要重新进行排序,而当你使用索引的时?,数据库会建立??理索引??就是前边提到的树结构),?在你每次运行查询时都????引??
1、?于小表来说,使用索引对于性能不会有任何提高??
2、当你的索引列中有极多的不同的数?空?时索引会使性能有极大的提高?
3、不要在经常?要更新或?的字段创建索引,更新索引的开?会降低你?期望获得的?能?
sql也允许你对??段进行索引,这?索引?为?合索引,例?:create index id_cmpd_index on bills(account_id,amount);
当使用?合索引时,?把最?选择的字段放在前边,也就??,把你最经常在查?使用的字段放在最前边?
在bills表中创建??引以对amount字?进?降序排列:create index desc_amount on bills(amount desc);通常情况下?果不指明,默认会按升序排列??
视图?种虚?视图?供给用户的数?其在数据库的真实面貌不相同的?种方法?你?将?图?为一?规的表来执?插入、删除?更新和选择操作?

???事物处理控制)
事务?在?辑上必须完成的?命令序列的单位,单位工作期是指事务的?始和结束时期。?果在事务?生的错?,那么整?程可以根?要?终?,?果每?件事都是正确的,那么结果将会?存到数据库中?
?有支持事务?理的系统都必须以?种准??来告诉系统一项事务是如何?始的(不?忘?事务处理?工作的?辑分组,它有自己的?始和结束),在使用oracle7时,它的?形式如下?
set transaction {read only | use rollback segment segment}
在?多情况下载一?作过程中必须要求数据保持有效,?不仅仅??单个?。oracle允?用户用set transaction来指定事务的?始,如果你想??ill tuner的信?且?保证数据在这之中?能改变的,那么你?使用如下??
set transaction tead only;
select * from customers where name='Bill Turner';
commit;
在oracle??束事务?理?句的?如下?
commit[work] [comment 'text' | force 'text'[,integer]];
commit命令将保存在?项事务中?进?的所有的改变,在?始一项事务之前?先运行commit命令以确保在之前没有事务?认??
例??
commit;
set transaction read only;
select * from customers where name='Bill Turner';
commit;
在一?务?理的过程?常常会运行一些错??查以??在过程中???行成功?你?使用rollback?来撤?事务?做的每一项工作,即便工作?功的你也?撤销。但?这必须是在commit之前,rollback?必须在一?务之?行,它可以一直撤?到事务的?始,也就??,数?会一直返回到事务处理刚开始的状??oracke7??如下?
rollback[work] [to[savepoint] savepoint | force 'text']
例??
set transaction;
insert into customers values ('Bubba MacDowell','222 Blue Lake Way','Austin','TX',39874,8);
rollback;
select * from customers;
rollback?将会终?整个事务,当存在嵌?事务时,rollback将会终?掉全部事务,系统将会返回到事务开始的?初状态??果当前没有活动的事务时,rollback或commit?将不会?数据库产生任何作?你可以?为这??效的命令)?
在事务使用中rollback?取消整个?务,但是你也?在你的事务当?用?句进行?部分地??”?在Sybase和Oracke?允?你在当前事务????存点,从这一点开始,如果你使用了rollback命令,那么系统将会回到保存点时的状?,而在保存点之前的?将会得到??,在oracle?建一?存点的?法格式?下:
savepoint savepoint_name;
例??
set transaction;
update balances set curr_bal = 25000 where account_id=5;
savepoint save_it;
delete from balances where account_id=5;
rollback to savepoint save_it;
commit;
select * from balances;
在上边的例子?建了??save_it的保存点,update?更新了结算平衡表?curr_bal列,你在其后设置了一?存点,在保存之后,你又运行了delete命令,系统??回到了保存点处,之后你?事务用commit命令进?了确认,结果?有的保存点之前的命令得到了确认??果你在其后又使用了rollback命令,那么将会取消当前的事务而不会有任何的改变??
  ؽ