`
eminem
  • 浏览: 138326 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

IBM DB2 学习笔记整理

    博客分类:
  • db2
阅读更多
注意:在 IBM DB2 中,与 MS SQL Server 2000 中相同的语法或者概念,这里就不一一列出了。


一、【DB2 SQL 概述】

   1、  【模式】

    1.1、模式是已命名的对象(如表和视图)的集合。模式提供了数据库中对象的逻辑分类。

    1.2、当在数据库中创建对象的时候,系统就隐性的创建了模式。当然,也可以使用 CREATE SCHEMA 显式的创建模式。

    1.3、当命名对象的时候,需要注意对象的名称有两个部分,即,模式.对象名称,形如:pjj.TempTable1。如果不显示指定模式,则系统使用默认模式(默认用户的ID)。

   2、  【数据类型】

定长字符串      CHAR(x)           x值域(1~254)       一个字节序列

变长字符串      VARCHAR(X)

                LONG VARCHAR(X)

                LOB(大对象)

定长图形字符串  GRAPHCI(X)        x值域(1~127)       两个字节序列

变长图形字符串  VARGRAPHCI(X)

                LONG GRAPHCI(X)

                DBCLOB(大对象)

                     

二进制字符串    暂缺                                一个字节序列

                BLOB(大对象)

                     

数字           (所有数字都有精度,精度是指除符号位以外的位数或者数字数)

              SMALLINT          精度为5           2字节整数

              INTEGER          精度为10          4字节整数

              BIGINT            精度为19          8字节整数

              REAL             实数的32位近似值

              DOUBLE           实数的64位近似值

              DECIMAL(P,S)   P,精度,S,小数位数,十进制数,P必须<=32,S必须<=P,缺省:P=5,S=0

日期时间型      14位字符串,即非数字类型也非字符串类型

日期            DATE             年月日

时间            TIME              24小时制,分为 小时分钟秒

时间戳记        TIMESTAMP        1日期和时间的值,分为 年月日小时分钟秒微秒

       

空值            不同于任何非空值

       

   3、 其他
DB2不区分大小写(单引号或者双引号内的内容除外)



二、【创建表和视图】

1、【创建表】

CREATE TABLE PERS

(

ID              SMALLINT   NOT NULL,

NAME          VARCHAR(9),

DEPT          SMALLINT   WITH DEFAULT 10,

JOB            CHAR(5),

YEARS         SMALLINT,

SALARY        DECIMAL(7,2),

COMM          DECIMAL(7,2),

BIRTH_DATE    DATE

)



2、【在表中插入值】(三种方式)

INSERT INTO PERS

    VALUES (12,'Harris',20,'Sales',5,18000,1000,'1950-1-1')

INSERT INTO PERS (NAME,JOB,ID)

    VALUES    ('Swagerman','Pramr',500),

               ('Limoges','Prgmr',510),

               ('Li','Prgmr',520)

          

INSERT INTO PERS (ID,NAME,DEPT,JOB,YEARS,SALARY,COMM,BIRTH_DATE)

    SELECT ID,NAME,DEPT,JOB,YEARS,SALARY,COMM,BIRTH_DATE

    FROM STAFF

    WHERE ID = 58

3、【更新数据】

UPDATE PERS

    SET JOB = 'Prgmr',SALARY = SALARY + 300

    WHERE ID = 410



UPDATE PERS

    SET SALARY = SALARY * 1.15

    WHERE JOB = 'Sales'

4、【删除数据】

DELETE FROM PERS

    WHERE ID = 120



5、【删除表】

DROP TABLE PERS



6、【创建视图】

(可以选用 WITH CHECK OPTION 选项,该选项针对 WHERE 的条件进行限定)

CREATE VIEW STAFF_ONLY

    AS SELECT ID,NAME,DEPT,JOB,YEARS

       FROM STAFF

       WHERE JOB <> 'Mgr' AND DEPT = 20 WITH CHECK OPTION

       

三、【使用 SQL 语句存取数据】 

(? CREATE 显示一般帮助提示信息)

1、【连接数据库】

CONNECT TO MYDB2 USER USERID USING PASSWORD



2、【谓词】

    x=y x<>y x<y x>y x>=y x<=y

    IS NULL

    IS NOT NULL

3、【其他的一些去SQL SERVER 类似的东西就省略】

4、【运算次序】

    FROM

    WHERE

    GROUP BY

    HAVING

    SELECT

    ORDER BY



5、【函数】

   5.1、【列函数】

(列函数对列中的一组值进行运算以得到单一的结果值!)

       AVG

       COUNT

       MAX

       MIN

       

   5.2、【标量函数】

(标量函数对一个单一值进行运算以返回另一个单一的结果值!)

       ABS       绝对值

       HEX       十六进制

       LENGTH   返回字节数(对于图形字符串则返回双字节字符串)

       YEAR

   5.3、【表函数】

(表函数仅可用于 FROM 子句,返回表的列!)

四、【表达式和子查询】

1、【标量全查询】

(返回一行,该行只包括一个值,用于从数据库中检索值)

SELECT LASTNAME,FIRSTNAME

FROM EMPLOYEE

WHERE SALARY > (SELECT AVG(SALARY) FROM EMPLOYEE)



SELECT AVG(SALARY) AS "Average_Employee",

(SELECT AVG(SALARY) AS "Average_Staff" FROM STAFF)

FROM EMPLOYEE



注意:

SQL SERVER 中,字符串用单引号,而DB2 中则使用双引号!

SELECT XX AS "OO" 也可以写为 SELECT XX "XX"



2、【转换数据类型】

(使用 CAST,CAST的另外一个用法是截断数据)

SELECT CAST(NAME AS VARCHAR(2)) AS "NAME" FROM EMPLOYEE



3、【条件表达式】

(CASE 注意,单引号和双引号)



SELECT DEPTNAME

CASE DEPTNUMB

WHEN 10 THEN 'Market'

WHEN 20 THEN 'Sales'

WHEN 30 THEN 'Development'

ELSE 'NULL'

END AS FUNCTION

FROM ORG



--避免产生被0除

SELECT NAME,WORKDEPT

FROM EMPLOYEE

WHERE (CASE WHEN BONUS = 0 THEN NULL ELSE SALARY/BONUS END) > 10



--替代简单的函数功能

CASE WHEN X<0 THEN -1 WHEN X=0 THEN 0 ELSE 1 END



4、【表表达式】(临时的)

4.1、【嵌套表表达式】

(嵌套于FROM字句中)



SELECT EDLEVEL, HIREYEAR, DECIMAL(AVG(TOTAL_PAY),7,2)

FROM (SELECT EDLEVEL, YEAR(HIREDATE) AS HIREYEAR,

SALARY+BONUS+COMM AS TOTAL_PAY

FROM EMPLOYEE

WHERE EDLEVEL > 16) AS PAY_LEVEL

GROUP BY EDLEVEL, HIREYEAR

ORDER BY EDLEVEL, HIREYEAR



4.2【公共表达式】

(以WITH开头,对公共表达式的重复引用使用同一结果,而使用嵌套表达式则可能会出现不同的结果。)



WITH

PAYLEVEL AS

(SELECT EMPNO, EDLEVEL, YEAR(HIREDATE) AS HIREYEAR,

SALARY+BONUS+COMM AS TOTAL_PAY

FROM EMPLOYEE

WHERE EDLEVEL > 16),



PAYBYED (EDUC_LEVEL, YEAR_OF_HIRE, AVG_TOTAL_PAY) AS

(SELECT EDLEVEL, HIREYEAR, AVG(TOTAL_PAY)

FROM PAYLEVEL

GROUP BY EDLEVEL, HIREYEAR)



SELECT EMPNO, EDLEVEL, YEAR_OF_HIRE, TOTAL_PAY, DECIMAL(AVG_TOTAL_PAY,7,2)

FROM PAYLEVEL, PAYBYED

WHERE EDLEVEL = EDUC_LEVEL

AND HIREYEAR = YEAR_OF_HIRE

AND TOTAL_PAY < AVG_TOTAL_PAY



4.3 【相关名】

(注意,一旦使用了相关名,则不能再在上下文中使用原名,否则出错!)



SELECT NAME, DEPTNAME

FROM STAFF S, ORG O

WHERE O.MANAGER = S.ID



--另外,相关名还可以用来复制对象,例如说自身

SELECT E2.FIRSTNME, E2.LASTNAME, E2.JOB, E1.FIRSTNME AS MGR_FIRSTNAME,

E1.LASTNAME AS MGR_LASTNAME, E1.WORKDEPT

FROM EMPLOYEE E1, EMPLOYEE E2

WHERE E1.WORKDEPT = E2.WORKDEPT

AND E1.JOB = 'MANAGER'

AND E2.JOB <> 'MANAGER'

AND E2.JOB <> 'DESIGNER'



4.4【不/相关子查询】



4.4.1【不相关子查询】

SELECT EMPNO, LASTNAME

FROM EMPLOYEE

WHERE WORKDEPT = 'A00'

AND SALARY > (SELECT AVG(SALARY)

FROM EMPLOYEE

WHERE WORKDEPT = 'A00')



4.4.2【相关子查询】

SELECT E1.EMPNO, E1.LASTNAME, E1.WORKDEPT

FROM EMPLOYEE E1

WHERE SALARY > (SELECT AVG(SALARY)

FROM EMPLOYEE E2

WHERE E2.WORKDEPT = E1.WORKDEPT)

ORDER BY E1.WORKDEPT



五、【在查询使用运算符与谓词】



1、【集合运算符】

1.1【UNION】:

组合两个表,并消除重复行;如果 UNION ALL 则不消除重复行



SELECT ID, NAME FROM STAFF WHERE SALARY > 21000

UNION

SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8

ORDER BY ID



1.2【EXCEPT】:

包括所有在表1中而不在表2中的行并消除所有重复行;如果 EXCEPT ALL 则不消除重复行



SELECT ID, NAME FROM STAFF WHERE SALARY > 21000

EXCEPT

SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8


--也就是说,凡是满足 EXCEPT 后面语句的数据都不在选择的范围内



1.3【INTERSECT】:

只包括表1和表2都有的行并消除所有重复行;如果 INTERSECT ALL 则不消除重复行



SELECT ID, NAME FROM STAFF WHERE SALARY > 21000

INTERSECT

SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8



2、【谓词】

2.1【IN】【NOT IN】

SELECT NAME

FROM STAFF

WHERE DEPT IN (20, 15)



SELECT LASTNAME

FROM EMPLOYEE

WHERE EMPNO IN

(SELECT RESPEMP

FROM PROJECT

WHERE PROJNO = 'MA2100'

OR PROJNO = 'OP2012')



2.2【BETWEEN】【NOT BETWEEN】

SELECT LASTNAME

FROM EMPLOYEE

WHERE SALARY BETWEEN 10000 AND 20000



2.3【LIKE】【NOT LIKE】

注意 _ 表示任何单个字符,% 表示任何零个或者多个的字符



SELECT NAME

FROM STAFF

WHERE NAME NOT LIKE 'S%'



2.4【EXISTS】【NOT EXISTS】

(检查存在性)



SELECT DEPTNO, DEPTNAME

FROM DEPARTMENT X

WHERE NOT EXISTS

(SELECT *

FROM PROJECT

WHERE DEPTNO = X.DEPTNO)

ORDER BY DEPTNO



2.5【定量谓词】

(将一个值和一个值的集合进行比较)



2.5.1【> ALL】



(必须全部符合,谓词结果才为真!)



查询所有收入超过所有经理收入的雇员的姓名和职位(其实后面的子查询中返回值有多个,所以用了ALL)


SELECT LASTNAME, JOB

FROM EMPLOYEE

WHERE SALARY > ALL

(SELECT SALARY



FROM EMPLOYEE

WHERE JOB='MANAGER')



2.5.2【> ANY】【> SOME】

(两个谓词同意,只要有一个结果符合,谓词结果即为真)

查询所有收入超过任何一个经理收入的雇员的姓名和职位(其实后面的子查询中返回值有多个,所以用了ALL)



SELECT LASTNAME, JOB

FROM EMPLOYEE

WHERE SALARY > ANY

(SELECT SALARY

FROM EMPLOYEE

WHERE JOB='MANAGER')



六、【定制和增强数据操作】
1、【用户定义类型】UDT
1、创建
CREATE DISTINCT TYPE PAY AS DECIMAL WITH COMPARISONS

2、使用
SELECT * FROM EMPLOYEE WHERE DECIMAL(SALARY)=5120

3、注意:
UDT认为是于任何其他类型不同的类型,例如上例中的 PAY 和 DECIMAL 类型是不同的,但是可以相互转换!

如 PAY(SALARY) 或者 DECIMAL (SALARY)



2、【用户自定义函数】UDF

1、创建

CREATE FUNCTION MAX(PAY) RETURNS PAY

SOURCE MAX(DECIMAL)

2、使用

SELECT column1,FunctionName(XXX) FROM TableXXX

3、注意:
UDF可以调用其他已有库函数和其他UDF。



3、【大对象】LOB

   1、简介
    BLOB,CLOB,DCLOB分别代表二进制数大对象、字符大对象(多用于字符串)、双字节字符大对象(多用于图形)

   2、操作(略)
   

4、专用寄存器

   1、定义:
    由DBMS为连接定义的存储区,用于SQL引用的信息。

   2、存储的常用数据:
    CURRENT DATE、USER、CURRENT TIMESTAMP、CURRENT TIME、CURRENT TIMEZONE(指定与世界时间的差别)、CURRENT SERVER

   3、调用

    VALUES(CURRENT DATE) 或者 SELECT CURRENT TIME FROM TABLENAME

5、常用系统视图
SYSCAT.CHECKS

SYSCAT.COLUMNS

SYSCAT.COLCHECKS

SYSCAT.KEYCOLUSE

SYSCAT.DATATYPES

SYSCAT.FUNCPARMS

SYSCAT.REFERENCES

SYSCAT.SCHEMATA

SYSCAT.TABCONST

SYSCAT.TABLES--模式

SYSCAT.TRIGGERS

SYSCAT.FUNCTIONS

SYSCAT.VIEWS

分享到:
评论

相关推荐

    db2学习笔记(包括常用命令)

    ### DB2 学习笔记详解 #### 一、DB2系统架构与管理 DB2,全称为Database 2,是IBM公司开发的一款关系型数据库管理系统。它具备强大的数据处理能力和高度的安全性,广泛应用于企业级的数据管理和分析。DB2的设计...

    DB2数据库学习笔记

    ### DB2数据库学习笔记知识点详解 #### 一、DB2系统架构及管理命令 ##### 1. DB2的层级概念 - **域**: 指的是DB2的管理范围,通常对应于一个物理服务器或者一组逻辑相关的服务器。 - **实例**: 实例是在一个操作...

    IBM某员工透漏DB2笔记

    【IBM DB2 笔记】是一份珍贵的学习资料,它由IBM内部员工分享,涵盖了DB2数据库系统的深度知识。DB2是IBM开发的一款关系型数据库管理系统,广泛应用于企业级的数据存储和管理。这份笔记的珍贵之处在于它揭示了IBM...

    db2应用基础学习笔记

    "db2应用基础学习笔记"涵盖了DB2的基本概念、安装配置、数据操作、查询优化、安全性及备份恢复等多个方面,旨在帮助初学者快速入门并掌握DB2的基础使用。 1. **基本概念**:DB2是一款支持SQL语言的数据库系统,它...

    DB2学习笔记与总结

    这份"DB2学习笔记与总结"包含了丰富的知识内容,旨在帮助读者深入理解和掌握DB2的相关技术。以下是对其中主要知识点的详细阐述: 1. **数据库基本概念**:首先,了解数据库的基本概念至关重要,包括数据模型(如...

    db2学习笔记(个人总结)

    本笔记将聚焦于DB2的学习,同时对比分析Oracle和MySQL两种流行数据库的分页实现,旨在帮助读者深入理解数据库分页机制。 首先,让我们了解一下分页在数据库中的重要性。在大数据量的查询场景下,一次性返回所有结果...

    DB2学习笔记,各个细节部分介绍

    DB2是IBM开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。在学习DB2的过程中,了解其核心配置参数以及如何优化是至关重要的。以下是对标题和描述中涉及的知识点的详细解释: 1. **缓冲池问题**:...

    DB2 700学习笔记&试题

    DB2 700学习笔记及试题资源是针对DB2认证考试700的备考材料,旨在帮助用户深入理解和掌握DB2的核心功能、管理、优化以及问题解决技巧。 一、DB2基础 DB2作为一款强大的数据库系统,支持SQL标准,提供了丰富的数据...

    IBM DB2 V9 精品资料.pdf

    根据描述,这份资料是由个人手工制作的学习笔记,主要用于学习DB2 V9的基础知识。作者希望分享自己的学习成果,并鼓励他人下载使用。同时,作者强调了转载时需告知的要求,体现了对知识共享的尊重和支持。 综上所述...

    IBM AIX系统管理学习笔记

    ### IBM AIX系统管理学习笔记知识点汇总 #### 一、AIX系统概述及厂家介绍 - **IBM AIX**:AIX(Advanced Interactive Executive)是由IBM公司开发的一种基于Unix的操作系统,主要运行于IBM的Power Systems硬件平台...

    DB2学习(数据库管理命令

    通过阅读《DB2学习笔记一(数据库管理命令)》、《DB2学习笔记二(数据操作命令)》、《DB2学习笔记(TIPS)》和《DB2学习笔记(管理工具的使用)》,深入理解和掌握每个知识点,将使你在DB2的学习之路上更加...

    DB2安装配置学习笔记.doc

    这篇学习笔记主要涵盖了在 Unix 或 Linux 操作系统上安装 DB2 的过程。以下是对笔记内容的详细解析: 首先,在开始 DB2 的安装之前,需要确保你的 Linux 机器满足 DB2 的系统需求。通常,这包括特定的操作系统版本...

    DB2很不错的学习资料

    - `DB2笔记.txt` 可能是个人学习或教学过程中整理的要点和心得,可能包含了实际操作中的小技巧和最佳实践。 - `DB2常用SQL技巧及函数.txt` 和 `DB2常用标量函数.txt` 则专门针对SQL使用技巧和常用的标量函数进行了...

    db2 连接数据库笔记

    这篇名为“db2 连接数据库笔记”的博文主要探讨了如何连接到DB2数据库,这对于开发者来说是一项基础但至关重要的技能。下面将详细介绍DB2数据库连接的相关知识点。 1. **JDBC驱动**:在Java环境中连接DB2,我们通常...

    db2相关学习资料集合

    超级友情大放送啊! DB2_SQL应用调优-解释工具db2expln的使用及实例分析 DB2_笔记大全_IBM Db2_日常实用操作积累-部分 db2expln_监控DB2活动 db2常用命令大全 DB2函数大全 DB2索引的设计与优化--批注

    DB2基础认证考试学习笔记-数据库规划.docx

    DB2基础认证考试的学习笔记主要聚焦于数据库规划,特别是针对DB2 11.1版本。这个教程旨在帮助备考者理解和掌握DB2的基础知识,包括产品版本、功能、工具,以及不同类型的数据应用,如在线事务处理(OLTP)、数据仓库/...

    DB2UDBV8.1管理学习笔记.pdf

    DB2 Universal Database (DB2 UDB) V8.1 是IBM推出的一款企业级数据库管理系统,其管理和学习笔记主要涵盖以下几个核心知识点: 1. **实例(Instance)与数据库(Database)**: 在DB2中,一个操作系统可以运行多个实例...

    db2读书笔记

    从给定的“db2读书笔记”中,我们可以提炼出一系列关于DB2数据库管理系统的深入知识点,这不仅涉及了DB2的基本配置与管理命令,还深入探讨了其内部架构、数据存储策略以及性能调优技巧。以下是根据标题、描述、标签...

    DB2 701学习资料

    首先,"DB2 701学习笔记.doc"很可能是文档形式的学习指南,它可能涵盖了DB2的基础知识,如数据库体系结构、SQL语句的使用、事务处理、数据库安全性、备份与恢复策略等。学习者可以通过这个文档深入理解DB2的工作原理...

Global site tag (gtag.js) - Google Analytics