<%@ page contentType="text/html; charset=gb2312"%> 数据库综合知识
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
数据库综合知识
     发布者: 发布时间:2007-01-01

一、数据库的几个概念

1 域(domain):是字段的取值范围,例如110之间等等这样的限制

2)“视图”:是虚拟的表,可以将某几个表的字段做一个视图即像是个虚拟的表一样,直接操作

3)“存贮过程”:就是一段SQL语言程序(可以有参数),如果某个操作常用到,就在数据库里将这段程序写到数据库里,每个存储过程都有一个ID名,使用的时候可以直接调用。

 

************************************  查询  ************************************

 二、查询语句小技巧

 1where title like '%''s%'

 是指title中含 's

 2select * from movie where title like 'Star___'

 表示选出title长度为7,而且title 4个字母为Star,下划线是占位符

 

 三、联合查询:intersection求交集、union求和集、except求差集

(1)       intersection例子:

(select name,address from Star where sex='F') Intersect (select name,address from Singer  where salary>10000)

  意思是选出月薪高于10000 歌星同时又是女明星

2except例子:(select name,address from dancer) except (select name,address from singer)

选出 是仅仅是舞蹈演员而不是歌手的人

3union例子:(select title from movie) union (select name AS title from cartoon)

moviecartoon的片名都选出来

!注:这三种都是以第一句为主,后面的相当于是一个修饰;

      列名要绝对一致,不一致的用as起个相同的别名。

 

四、处理重复记录

关键字:DISTINCT

例子:select distinct name from movie

 

五、聚合操作符

关键字:SUM(总和 AVG(平均值)MIN(最小值)MAX(最大值)COUNT(记录数(注:包括重复的记录,要去掉重复的需要用DISTINCT))

例子:

select COUNT(DISTINCT name)  from star

 

六、聚合显示控制符

1)关键字:GROUP BY(写在where之后,相当于分组排序)

例子:

select StudioName

from Movie

where GROUP BY StudioName

2)关键字:HAVING(写在where之后,将附加条件写在HAVING后面进一步限制结果记录集)

例子:

select name,SUM(length)

From Movie

where star='Mickey Mouse'

Having MIN(year)<1990

 

 

七、子查询

1select name from star  where movie=(select m_id from movie where title='Star Wars')

选出星战的演员

2)关键字

第一组:INNOT IN

       IN在……结果集中

       NOT IN不在……结果集中

第二组:>ALL <>ALL

       ALL:大于……结果集中任何一条记录

       <>ALL:相当于NOT IN

第三组:>ANY =ANY

       >ANY:只要大于……结果集中的一条记录

       =ANY:相当于IN

       :相当于NOT IN

第四:EXIST R

     R表非空

 

例子1

select name  from Star

where movie IN

           (select id from movie where (title,year)IN

                               (select name,date from cartoon  where studio='Ford')

              )

 

“自相关的子查询”例子2

select title

from movie as old

where year < ANY (

                  select year from movie

                where title=old.title

                )

选择的是title一样,year不一样的电影

 

************************************     *****************************************

八、删除表

关键字:drop

例子:drop R

 

九、修改表结构(添加、删除列)

关键字:ALERT TABLE

“添加”示例:ALERT TABLE movie ADD phone CHAR(10)

“删除”示例:ALERT TABLE movie DROP year

 

十、定义缺省值

关键字:DEFAULT

例子:birthday DATE DEFAULT DATE'0000-00-00'

     ALERT TABLE movie ADD phone CHAR(10) DEFAULT 'unknown'

 

十一、域

1)“定义”关键字:CREAT DOMAIN …… AS ……

“定义”例子:CREAT DOMAIN movieDomain AS VARCHAR(50) DEFAULT 'unknown'

2)“修改”关键字:ALERT DOMAIN …… SET ……

“修改”例子:ALERT DOMAIN movieDomain SET DEFAULT 'null'

3)“删除”关键字:DROP DOMAIN ……

“删除”例子:DROP DOMAIN movieDomain

 

十二、索引

1)“建立索引”关键字:CREAT INDEX …… ON ……

例子:CREAT INDEX yearIndex ON movieyear

2)“删除索引”关键字:DROP INDEX ……

例子:DROP INDEX yearIndex

 

************************************  表的联接       ********************************

十四、Join联接

1.       外联接

!!!注:必须有on指明连接条件,且条件为字段相等(字段名称可以不同),否则作笛卡尔积

左向外联接:

关键字:(NATURALLEFT OUTER JOIN或(NATURALLEFT JOIN

结果:包括左表中的所有行。不包括右表中的不匹配行。例如,下面的 SQL 语句说明 titles 表和 publishers 表之间的左向外联接包括所有的书名,甚至包括那些没有出版商信息的书名:

SELECT titles.title_id, titles.title, publishers.pub_name
FROM titles LEFT OUTER JOIN publishers ON titles.pub_id= publishers.pub

右向外联接:

关键字:(NATURALRIGHT OUTER JOIN或(NATURALRIGHT JOIN

结果:包括右表中的所有行。不包括左表中的不匹配行。例如,在 titles publishers 表之间的右向外联接将包括所有的出版商,甚至包括那些在 titles 表中没有书名的出版商。所得到的 SQL 可能象下面这样:

SELECT titles.title_id, titles.title, publishers.pub_name
FROM titles RIGHT OUTER JOIN publishers 
ON titles.pub_id = publishers.pub_id

完整外部联接:

关键字:(NATURALFULL OUTER JOIN或(NATURALFULL JOIN

结果:包括所有联接表中的所有行,不论它们是否匹配。例如,titles 表和 publishers 表之间的完整外部联接显示所有书名和所有出版商,甚至包括那些在另一个表中没有匹配值的书名和出版商。

SELECT titles.title_id, titles.title, publishers.pub_name
FROM titles FULL OUTER JOIN publishers 
ON titles.pub_id = publishers.pub_id

2.       内联接

!!!注:必须有on指明连接条件,且条件为字段相等(字段名称可以不同),否则作笛卡尔积

仅显示两个联接表中的匹配行的联接。(这是查询设计器中的默认联接类型。)例如,可以联接 titles 表和 publishers 表以创建显示每个书名的出版商名称的结果集。在内联接中,结果集内不包含没有出版商信息的书名,也不包含没有书名的出版商。这类联接所得到的 SQL 可能象下面这样:

SELECT     title, pub_name
FROM       titles INNER JOIN  publishers ON titles.pub_id = publishers.pub_id

注意:当创建内联接时,包含 NULL 的列不与任何值匹配,因此不包括在结果集内。空值不与其它的空值匹配。

3.交叉联接

在这类联接的结果集内,两个表中每两个可能成对的行占一行。例如,在通过作者 CROSS JOIN 出版商输出的结果集内,每个可能的作者/出版商组合占一行。所得到的 SQL 可能象下面这样:

SELECT *  FROM authors CROSS JOIN publishers

 

************************************   视图       ************************************

十三、视图

1)创建视图

例子:

CREAT VIEW allmovie AS

Select title,year

From cartoon,movie

2)操作视图记录(语法与操作表记录一样)

“添加记录”(对于视图没有涉及的相关表列,会填上缺省值)

例子:INSERT INTO allmovie VALUES(……)

“删除记录”(会删除相关表的行)

例子:DELETE FROM allmovie WHERE ……

“修改记录”(会修改相关表的行)

例子:UPDATE allmovie SET …… WHERE ……

3)删除视图

例子:DROP VIEW allmovie

 

***********************************   空值的处理    ********************************

十五、Null值的操作

1Null值参与算数运算(加减乘除……),结果得Null

2Null值作比较(大于、等于……),结果得unknown

unknown介于falsetrue之间,即介于01之间相当于1/2

 

十六、“unknownfalsetrue”的“ANDORNOT(取反)”运算

1)原则:unknown相当于1/2; false相当于0;  true相当于1;

      AND相当于“取小的”; OR相当于“取大的”; NOT相当于“1-x

对应表

参数

结果

X

Y

AND

OR

NOTx

true

true

true

true

false

true

unknown

unknown

true

false

true

false

false

true

false

unknown

true

unknown

true

unknown

unknown

unknown

unknown

unknown

unknown

unknown

false

false

unknown

unknown

false

true

false

true

true

false

unknown

false

unknown

true

false

false

false

false

true

2)例子:

select * from movie  where length>=120 OR length<120

此时当length的值为null那么length>=120unknownlength<120unknown

unknown OR unknown=unknown 不能被查询语句选出,所以上述语句选出的是length不为null的记录。

 

 

************************************  递归  ******************************** 难点 at P313

十七、Recursion(递归)

例子: