当前位置:首页 » 编程语言 » db2和sql语句难度
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

db2和sql语句难度

发布时间: 2022-09-05 20:37:17

① DB2和其他数据库在一些sql语法上的区别

掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。

练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。

在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。

SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。

INSERT语句

用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:

INSERT INTO EMPLOYEES VALUES

('Smith','John','1980-06-10',

'Los Angles',16,45000);

通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。

我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。

如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。

回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。

同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。

对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。

既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:

INSERT INTO EMPLOYEES VALUES

('Bunyan','Paul','1970-07-04',

'Boston',12,70000);

INSERT INTO EMPLOYEES VALUES

('John','Adams','1992-01-21',

'Boston',20,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Pocahontas','1976-04-06',

'Los Angles',12,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Bessie','1940-05-02',

'Boston',5,200000);

INSERT INTO EMPLOYEES VALUES

('Jones','Davy','1970-10-10',

'Boston',8,45000);

INSERT INTO EMPLOYEES VALUES

('Jones','Indiana','1992-02-01',

'Chicago',NULL,NULL);

在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。

有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:

INSERT INTO EMPLOYEES(

FIRST_NAME, LAST_NAME,

HIRE_DATE, BRANCH_OFFICE)

VALUE(

'Indiana','Jones',

'1992-02-01','Indianapolis');

这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。

让我们来看一看上述INSERT语句的语法图:

INSERT INTO table

[(column )]

VALUES

(columnvalue []);

和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。

SELECT语句

SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。

SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。

SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算—“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。

SELECT语句最简单的语法如下:

SELECT columns FROM tables;

当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。

让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。

假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:

SELECT BRANCH_OFFICE FROM EMPLOYEES;

以上SELECT语句的执行将产生如图2中表2所示的结果。

由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES;

这次查询的结果如表3所示。

现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

ORDER BY BRANCH_OFFICE ASC;

这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。

同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。

假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:

SELECT BRANCH_OFFICE,FIRST_NAME,

LAST_NAME,SALARY,HIRE_DATE

FROM EMPLOYEES

ORDER BY SALARY DESC,

HIRE_DATE DESC;

这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。

将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:

SELECT * FROM EMPLOYEES;

这次查询返回整个EMPLOYEES表,如表1所示。

下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):

SELECT [DISTINCT]

(column [])| *

FROM table [ ]

[ORDER BY column [ASC] | DESC

[ ]];

定义选择标准

在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:

SELECT columns FROM tables [WHERE predicates];

WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones';

LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。

使用最多的六种比较

我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:

等于 =

不等于 <>

小于 <

大于 >

小于或等于 <=

大于或等于 >=

下面给出了不是基于等值比较的一个例子:

SELECT * FROM EMPLOYEES

WHERE SALARY > 50000;

② mssql,oracl,db2等数据库的差异在哪里.

mysql比sqlsever、db2比oracle更容易操作。
但是mysql貌似不是真正意义的数据库,只是表和数据的集合,它没有真正意义↑的索引和约束
,一般多用于web开发。
db2多应用于银行数据库,现在也开始用oracle。
sqlsever是微软数据库,多与C,C++,C#配套使用,其实也支持其他编程语言,需要相应组件。
学习难度是sqlsever和db2最合适,oracle偏难,mysql因为太简单只有视频教程,又是英文界面,反而不适合初学者。

③ 数据库中 sql server db2 oralce 哪种简单易学

强烈建议DB2(因为我是IBM认证的DBA),如果学习有什么问题的话,我还能帮上忙,呵呵

④ SQL SERVER 数据库好学不

SQL SERVER,不难,因为第一它是微软的东西,里面很多的快捷键都跟我们电脑中的默认快捷键类似,再者它的界面比较清晰,又大部分是中文,多实践一下,不难学会的,习惯了你就会把它当成用excel一样顺手了,加油!

⑤ DB2与SQL Server的区别

SQL Server是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制

DB2是IBM出口的一系列关系型数据库管理系统,分别在不同的操作系统平台上服务。虽然DB2产品是基于UNIX的系统和个人计算机操作系统,在基于UNIX系统和微软在windows系统下的Access方面,DB2追寻了ORACLE的数据库产品。
这款新型数据服务器率先实现了可扩展标记语言(XML)和关系数据间无缝交互,而无需考虑数据的格式、平台或位置。来自8个国家的750多名软件开发人员为“Viper”的问世做出了努力,他们进行了精心设计和调试,力求将其打造成SOA环境下的首选信息引擎.? DB2 9取得了十项重大进步,包括已获得专利的“pureXML”技术、突破性的“Venom”存储压缩以及增强的自动化数据管理能力等。

1、新的XML特性:

在无需重新定义XML数据的格式,或将其置于数据库大型对象中的前提下,IBM DB2 9允许用户无缝管理普通关系数据和纯XML数据。此项能力是Viper所独有的,它将有助于客户增加其信息的实用性、速度和多功能性,同时大大降低与现有数据管理技术相关的管理成本。它还将显着降低复杂性,并减少普通开发商创建“同时访问关系数据和XML数据的应用”所花费的时间。

新的XML数据类型,允许客户在分层的表格栏中存储规范的XML文档。

支持SQL语句及SQL/XML函数中的XML数据类型。

支持由万维网联盟(W3C)开发的新XQuery语言。IBM DB2 9允许客户直接调用XQuery语言,调用功能可以从DB2表格与视图中提取XML数据。

支持XML数据的检索功能,提高了针对XML文档的查询效率。

为支持DB2的编程程序语言中的XML提供支持,允许应用整合对XML及关系型数据的访问和存储。

2、新的应用与开发特性:

对应用开发工具和原生XML数据存储新特性的支持,允许应用访问和存储XML及相关数据。

DB2 Developer Workbench是一种综合开发环境,可用于创建、编辑、调试、测试和部署DB2存储流程和用户自定义的功能。客户还可以使用Developer Workbench开发SQL应用,创建、编辑和运行SQL语句与XML查询。

面向JDBC和SQLJ的增强型DB2驱动程序符合JDBC 3.0规范,它还同时支持SQLJ语句。

SQLJ语句的功能特性与大多数JDBC方法相似。

此外,还包括其它重要特性:支持众多新数据类型、DB2独有的支持到面向z/OS? 数据服务器IBM DB2 9版可靠连接的方式、异构组合、连接重用等。除支持Visual Studio 2005以外,还包括对Web服务的支持,对本地XML数据存储的全面支持,以及无需编写代码就可以构建应用及Web站点的能力。增强型DB2 Runtime Client支持64位计算,还可在同一台计算机上与其它DB2产品共存。

3、新增自动数据库管理功能:

适应性、自调式内存分配,通过不断更新配置参数、调整缓冲池大小和动态分配可用的内存资源,帮助用户简化或排除DB2服务器的配置工作。面向z/OS对象的DB2 UDB自动状态检测功能,允许客户通过控制中心的创建和变更对象策略向导,使面向z/OS对象的DB2 UDB实现对象维护策略评估自动化。

自动存储支持,可以自动扩充磁盘和文件系统中数据库的大小,现在可用于多分区数据库。

自动统计数据收集,创建新数据库时会自动启动。

根据DB2数据库系统的环境特点,自动配置prefetchers进程与页清洁器。

面向自动表格与索引重组的新策略选项,为数据库管理员提供更多管理表格与索引重组的功能。

4、性能与可扩展性增强(存储压缩等):

利用数据行压缩技术压缩数据对象的功能,可以帮助客户节省磁盘存储空间,并加快数据访问速度。

统计数据视图,为改进查询功能提供更出色的访问计划。

使用定制的脚本或程序加快数据载入速度。

增强型物化查询表(MQT)可为设计MQT提供更强大地支持,更出色的查询性能和更完善的MQT维护。

更大的记录标识符(RID)允许每个对象拥有更多数据页,系统中每页拥有更多记录,一方面为数据库管理员使用系统和用户的临时表格提供了便利,另一方面也便于执行分类和登录操作。

索引的关键字最多可达64组,大小可以扩充至8 KB。

5、新的安全特性与增强:

使用基于标签的访问控制(LBAC),改进行、列级别的数据访问控制功能。

新安全管理器(SECADM)的授权级别,将若干个与安全性相关的优先权集中到一项优先权名下,提高了对于访问信息资产的控制。

“创建数据库”语句中新增的“限制”选项,增强了对进入数据库的控制。

SETSESSIONUSER优先权加强了对拥有转换会话用户身份权力的人的控制。它允许掌握该项权力的人转换为任何被赋予权利的授权ID。

TRANSFER OWNERSHIP SQL语句,提供了改变数据库对象的归属权的能力。

6、使用表格分区改进大型数据库管理:

表格分区是一种数据组织计划,在该计划中,表格数据根据多个表格列,被划分到多个被称为表格分区或范围的存储对象中。这些存储对象可能存放在不同的表空间或相同的表空间中,或两种情况兼而有之。此项新特性的优势包括:

能够创建非常大的表格。分区表格包含的数据远远超过了普通表格。将表格数据划分到众多存储对象中,有助于显着增加表格尺寸。

更灵活的管理能力。现在,客户可以在个别数据分区中完成管理工作,将消耗时间的维护操作分成一系列小型操作。

更加精确地控制索引位置。客户可以将索引放置在不同的表空间,分别对其进行管理。

快速、轻松地访问数据或转出数据。这一功能在数据仓库环境中尤为有用,客户经常在此环境中移入或移出数据,运行支持决策的查询。

改进的查询功能。通过表格分区分离数据,避免对不相关数据进行扫描,从而改进查询处理的功能。

7、数据恢复增强:

重新启动中断的恢复操作,可以在数据库恢复时节省宝贵的时间,同时简化恢复工作。

支持重定向恢复操作,在现有备份镜像中自动生成脚本。

能够从表空间备份镜像中重新构建数据库。此项功能让DB2的恢复更加灵活和多样化,同时为客户提供更全面的恢复解决方案。

8、自主管理性能增强:

使用适应性、自调内存分配简化了内存管理。自调内存提供动态配置,能对工作负载特性的重大变化做出积极响应。

客户创建数据库时,自动统计数据收集功能会自动启动。凭借自动统计数据收集,IBM DB2 9版自动在后台运行RUNSTATS实用程序,确保收集到正确的统计数据,并进行维护。

面向多分区数据库的自动存储支持。这一功能可以按照需求,自动扩大磁盘和文件系统中数据库的容量。

ALTER TABLE语句增强允许客户无需停止或重新创建表格,就可以改变部分表格的属性。

新的策略选项为数据库管理员提供了新的表格和索引自动重组功能。

可以拷贝数据库计划,创建模块方案。一旦数据库管理员创建了模块方案,他们就可将其作为创建新视图的模板。

新的管理SQL例程和视图提供了基本、易用的可编程界面,便于借助SQL来管理DB2。

动态快速通信管理器(FCM)缓冲和新的配置参数,可通过DB2数据库管理器进行自动调节。

9、安装性能增强:

新的CLI驱动程序(面向ODBC和CLI的IBM? DB2驱动程序),客户可以在不安装DB2客户端软件的情况下安装此驱动程序。

更加灵活、有效的产品授权管理

可以在同一台计算机上安装多个DB2版本和修补包。

新的响应文件关键字允许IT员工无需与最终用户交互安装DB2产品。

自动演进 — 从Stinger到Viper

基于第8.2版推出的增强功能,IBM DB2 9版中新的自动数据管理特性将继续帮助提高数据库管理员的生产效率和效用。

其中一些关键特性包括:

适应性、自调内存分配功能此项新功能通过不断更新配置参数和重新调整缓冲池的大小,简化或排除了DB2服务器的配置工作。一旦启动,该功能可在不同内存消耗点之间,动态分配可用的内存资源。在Windows和AIX? 操作系统中,自调内存功能也可以确定数据库内存总体需求,并会自动调节数据库共享内存。

面向 z/OS对象的DB2 UDB自动状态监测功能 通过控制中心的创建和变更对象策略向导,客户可以实现面向z/OS对象的DB2 UDB对象维护策略评估的自动化,从而可使其按照预定次数和时间间隔运行。对创建了策略警报的对象而言,警报通知会发送至对象维护策略指定的状况警报联系处。

自动存储支持 自动存储可以自动扩大磁盘与文件系统中数据库的容量。它消除了对管理存储器的需求,同时利用了数据库管理存储的性能和灵活性。在IBM DB2 9版中,已经添加了面向多分区数据库的自动存储功能。此外,在创建新数据库时,自动存储会自动启动。

自动统计数据收集 在IBM DB2 9版中,当创建新数据库时,使用RUNSTATS命令的自动统计数据收集功能会自动启动。必要时,DB2服务器会在后台处理中收集数据的统计信息。

DB2优化器(DB2 optimizer)利用这些信息对数据库中的信息最有效地恢复。

prefetchers进程和页清洁器的自动配置 在IBM DB2 9版中,prefetchers进程与页清洁器的数量可由DB2数据库系统根据某些环境特性,如CPU的数量、数据库分区的数量和数据库表空间的并行设置,自动确定。

表格与索引自动重组功能增强 表格与索引重组的新策略选项,为数据库管理员提供了更丰富的表格与索引重组管理功能。

⑥ 想学数据库,oracle、mysql和db2,学那个更好点,对以后的发展

像很多人说的,MYSQL适用于中小型企业,其时更适用于微型公司,因为可以免费使用。现在MYSQL也已经被ORACLE收购了,比较适用于网络产品。
ORACLE和DB2一般是中型和大型数据库使用。如果学习ORACLE的话,以后应用的地方会很多。学ORACLE可以先学SQL,然后学PL/SQL,最后学习数据库管理。当然,在学习之前先了解ORACLE的基本结构还是很有必要的。
DB2现在一般是银行等大型公司的核心系统才使用,运行在主机上。DB2现在的人才很缺,会的人少,精通的人就更少了。当然,学习的难度也比较大,因为平时很难用到。

⑦ sql难不难

SQL不是很难,也不需要其他的编程语言,sql它只是对数据库操作的命令而已。说它不难呢,是因为在一般的编程中,用到的sql命令都是很基础的增删改查。但是呢,如果你想真正的深入了解数据库,那么需要你掌握的sql命令就很多了,那个时候也可以算难了,因为相对的sql命令也有很多限制,而且那些限制比较隐晦。总之,如果你只是为了编程来学习sql,那么就很简单,如果你是为了了解数据库来学习sql,那没就有点难度了……这个要看你怎么来使用它了。

⑧ 高难度SQL语句

这个是如何算累计的问题,有多种方法:
这里举一个通用的方法:
SELECT
aa.id
, aa.积分
, SUM(bb.积分) AS 累计积分
FROM jifen_table AS aa
INNER JOIN jifen_table AS bb ON bb.id<=aa.id
GROUP BY aa.id, aa.积分
ORDER BY aa.id,aa.积分
;

就是通过jifen_table自关联,来实现累加。
累计其实就是把当前的积分和之前出现过的都加起来,
关联条件:ON bb.id<=aa.id 就是实现这个功能的。

2.方法二:
使用sum()over() 函数。
此方法oracle,db2支持,其他数据库不知道支不支持。

都是一个语句就ok的,不需要3个步骤 :)

我的空间有类似的案例:
http://hi..com/rsnetwork/blog/item/297c2301c57cea001c958305.html

⑨ 关于DB2 SQL语句的性能分析

记得DB2自带一个分析器,对SQL语句的运行次数(读数据库的次数)和时间进行统计,具体忘了

⑩ IBM DB2通用数据库好学麽

怎么说呢,你要是有数据库的基础,学起来相对来说会容易点。不过也要看你往哪方面发展了,
编程开发方向:我感觉DB2的sql语句不如oracle的高效和简洁,db2的规则太多了
数据库管理:这个方向相对就会轻松一些,db2管理起来基本上很分明,还是有迹可循的,比起oracle来说管理那是相当的轻松。
以上是我徘徊在oracle和db2之间的一些心得和感受,希望对你有帮助