`

常见SQL语句及其函数集锦2

    博客分类:
  • sql
阅读更多
第八天(操作数据)
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码的文本文件,尽管SQL语言没有这个功能,SQL不会做得比从一个空数据库开始更好。
注:从外部数据源中导入和导出数据看不懂看不懂。

第九天(创建和操作表)
当一个开发人员在建立数据库时必须要考虑一些事情。第一件事情是你的权限级别,如果你使用的关系型数据库管理系统支持权限,你必须确认你是否具有系统管理设置权限或系统管理员已经允许你有创建数据库的权限。
许多因素会对你设计数据库造成影响,如下边的:
1、安全问题;2、磁盘的可用空间;3、数据检索及响应的速度;4、数据更新的数度;5、多表归并返回数据的速度;6、RDBMS对临时表的支持。
当你在进行代码和数据库的结构设计时将你的数据结构与你当时的意图进行详细的记录是非常重要的,这被称为数据字典。
大多数RDBMS中都提供了生成数据字典的工具包或有说明来告诉你如何安装它。
主关键字和外关键字,主键唯一性,外键关联其它表字段。
建表基本语法:
create table table_name (field1 datatype[NOT NULL],
field2 datatype[NOT NULL],
field3 datatype[NOT NULL]...);
建表时oracle所支持的数据类型:
char:可以存储长度为1~255个字符的字符串,空格会被填充到字符串的右边以保证其内容满足定义的长度。
date:包括日期的世纪、年、月、日、时、分、秒。
long:可以支持长达2G的字符串。
long raw:可以存储长达2G的二进制内容。
number:零、正值或负值的定点或浮点数。
raw:可以存储长不过255个字节的二进制代码。
rowid:用一个十六进制的数来标明当前行在表内的唯一地址。
varchar2:变长的字母或数字,长度可以从1到2000。
注: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来指定事务的开始,如果你想检查bill 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命令,那么将会取消当前的事务而不会有任何的改变。
分享到:
评论

相关推荐

    spring 异步编程样例

    spring 异步编程样例

    带有 python 3 和 opencv 4.1 的 Docker 映像.zip

    带有 python 3.7 和 opencv 4.1.0 的 Docker 映像用法docker run -it jjanzic/docker-python3-opencv python>>> import cv2带有标签的图像包含使用contrib 模块:contrib构建的 docker 镜像可用的docker标签列表opencv-4.1.0(latest分支)contrib-opencv-4.1.0(opencv_contrib分支)opencv-4.0.1contrib-opencv-4.0.1opencv-4.0.0contrib-opencv-4.0.0opencv-3.4.2contrib-opencv-3.4.2opencv-3.4.1contrib-opencv-3.4.1opencv-3.4.0contrib-opencv-3.4.0opencv-3.3.0contrib-opencv-3.3.0opencv-3.2.0contrib-opencv-3.2.0

    原生js鼠标滑过文字淡入淡出效果.zip

    原生js鼠标滑过文字淡入淡出效果.zip

    1-中国各省、市、区、县距离港口和海岸线的距离计算代码+计算结果-社科数据.zip

    中国各城市、区、县距离港口和海岸线的距离数据集提供了全国各城市及区、县的坐标信息,以及各个港口和海岸线的坐标信息。通过R语言计算,得出了各城市、区县与港口和海岸线之间的距离。该数据集包含了各港口的经纬度、各城市与港口之间的距离、各区县与港口之间的距离、中国各城市质心与港口的最近距离、中国各城市质心与海岸线的距离、中国各区县质心与港口的最近距离以及中国各区县质心与海岸线的距离等指标。此外,还涉及中国各省距离海岸线的距离数据。港口等级划分参考了《全国沿海港口布局规划》,包括上海港、大连港等45个港口。数据集覆盖了全国31个省及直辖市,是研究地理、经济和规划等领域的宝贵资源。

    为 Spring Web 应用提供 OAuth1 (a) 和 OAuth2 功能支持.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    信号处理和通信系统模型中的模拟电路效应simulink.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    Python错误集合.doc

    Python错误集合.doc

    1-中国全球投资追踪相关数据(2005-2023年)-社科数据.zip

    《中国全球投资追踪》数据库提供了2005至2023年间中国在全球范围内的投资和合同的详细记录,不包括债券。该数据库由中国海外直接投资(ODI)和建筑合同两大部分组成,覆盖全球多个国家和地区,涉及能源、交通、通信等多个行业领域。这份追踪数据集包含4142条样本,以面板数据格式呈现,主要指标包括年份、月份、投资方、投资量(单位:百万美元)、交易类型、行业、子行业、国家、地区、是否为“一带一路”倡议相关项目、绿地投资等。这份追踪数据是政策制定者、学者、企业和公众理解中国在全球经济中角色的重要资源,有助于分析中国的全球战略和经济目标。

    原生js广告代码制作可展开关闭的页面上固定的图片对联广告代码.rar

    原生js广告代码制作可展开关闭的页面上固定的图片对联广告代码.rar

    1-中国各地区普通小学毕业生数(1999-2020年)-社科数据.zip

    这组数据涵盖了1999至2020年间中国各地区普通小学毕业生的数量。它为我们提供了一个深入了解中国教育领域中普通小学阶段教育水平和教育资源分配情况的窗口。通过分析这些数据,可以为制定科学合理的教育政策提供依据,同时,通过比较不同城市的普通小学毕业生数,也能为城市规划和劳动力市场调查提供参考。数据来源于中国区域统计年鉴和中国各省市统计年鉴,包含了8472个样本,以面板数据的形式呈现。这些数据对于掌握中国教育态势具有重要的参考价值。

    用于模拟三角模糊隶属度的 Simulink 函数.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    生产单元数字化改造24国赛仓库

    自写程序

    成熟草莓检测 草莓照片 - 物体检测数据集

    该数据集由草莓照片组成,用于识别成熟的草莓。 图像上标注有边界框,可以准确标出图像中成熟草莓的位置。 该数据集可用于促进草莓生产、质量控制和农业实践的进步以及提高精确度。 数据集结构 图像- 包含草莓的原始图像 框- 包括原始图像的边界框标签 annotations.xml - 包含为原始照片创建的边界框和标签的坐标 数据格式 文件夹中的每张图片都images附有 XML 注释,annotations.xml指示用于检测成熟草莓的边界框的坐标。对于每个点,都提供了 x 和 y 坐标。成熟草莓的可见性也由属性occluded (0, 1) 提供。

    雷达信号分选仿真数据产生程序以及信号分选的PRI变换算法仿真程序 matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    jmw网址导航网站简洁源码.zip

    jmw网址导航网站简洁源码.zip

    微信小程序开发项目教程:从前端到后端全方位解析与实战

    内容概要:本文档旨在带领初学者了解和掌握小程序开发全流程。首先介绍了小程序的特点及其广泛应用场景。随后详细讲解了小程序的项目准备、前端与后端开发、API调用技巧以及测试发布等关键环节。特别是针对微信小程序的特性,给出了许多实用的技术指南。 适用人群:对于想要学习小程序开发的新手开发者尤其有用。 使用场景及目标:帮助读者从零开始构建一个完整的餐饮类微信小程序,涵盖需求分析、功能设计、技术选型、页面搭建、交互逻辑实现、后台服务对接、测试上线等一系列步骤。 其他说明:文中还特别强调了代码调试的重要性,并提供了关于常见错误排查的具体指导,有助于新手解决实际开发过程中遇到的问题。另外,文档末尾附有项目总结和后续维护要点,提醒开发者注意项目完成后的工作事项。

    用于数据区分的自适应多项式 (Savitzky-Golay) 滤波器Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    SiC模块取代IGBT模块的PCS-基本半导体产品在125KW工商业PCS中的应用-241028-Rev.1.1

    SiC模块取代IGBT模块的PCS

    原生js微信分享到朋友圈浮动层代码.zip

    原生js微信分享到朋友圈浮动层代码.zip

    ECharts柱状图-极坐标系下的堆叠柱状图2.rar

    图表效果及代码实现讲解链接:https://blog.csdn.net/zhangjiujiu/article/details/143997013

Global site tag (gtag.js) - Google Analytics