第一章:在表中存储信息
本章的内容太简单,对数据库有过一点点了解都知道,就不写了。
第二章:从表中获取信息
1、select语句
2、 可用的where比较条件有:
等于:=、<、<=、>、>=、<>
包含:in、not in
范围:between、not between
匹配测试:like、not like
Null测试:is null、is
布尔链接:and、or、not
3、通配符:在where子句中,通配符与like条件一起使用。在Oracle中:
%(百分号)用来表示任意数量的字符,或者可能根本没有字符。
_(下划线)表示确切的未知字符。
?(问号)用来表示确切的未知字符。
#(井号)用来表示确切的阿拉伯数字,0到9。
[a-d](方括号)用来表示字符范围,在这里是从a到d。
[*](方括号包含通配符)表示字符本身,没有通配符的性质。
第三章:where子句中的符合条件
1、标点符号
名字中的空格:尽量避免他们,可以用下划线代替空格
逗号:分隔列表项。
单引号:在Oracle中,应该只使用单引号将文本和字符和日期括起来,不能使用引号(包括单双引号)将数字括起来。
双引号:在Oracle中,单双引号含义不同。双引号被用来将包含特定字符或者空格的列别名括起来。双引号还被用来将文本放入日期格式。
#字号:Access使用#字号将数字括起来。
分号:用来结束sql语句。
保留字:避免使用他们。
撇号:在Oracle中,撇号也可以写成彼此相邻的两个单引号。为了在供应商名字中间查找所有带撇号的供应商名字,可以这样编写代码:
空白行:Oracle通常不允许SQL语句中有任何的空白行。可以在SQLplus中设置一个选项来允许SQL语句中出现空白行。
&符号:在Oracle中,&符号常用来指出一个变量。例如,&fox是一个变量,稍微有点不同的一种&&fox。每当&fox出现在Oracle脚本中时,都会要求您为它提供一个值。而使用&&fox,您只需要在&&fox第一次出现时为它提供变量值。如果想将&符号作为普通的符号使用,则应该关闭这个特性。要想关闭这个特性,可以运行以下的命令: set define off ,这是一个SQLplus命令,不是一个SQL命令。SQLplus设置了SQL在Oracle中运行的环境。
双竖线:Oracle使用双竖线表示字符串连接函数。
星号:select *意味着选择所有的列,count(*)意味着计算所有的行,表示通配符时,表示0个或任意多个字符。
正斜杠:在Oracle中,用来终止SQL语句。更准确的说,是表示了“运行现在位于缓冲区的SQL代码”。正斜杠也用作分隔项。
多行注释:/*......*/。
不等于:有多种表达方式:!=、^=、<>、not xxx=yyy、not(xxx=yyy)
第四章:保存结果
1、在新表或者视图中保存结果
1.1、从select语句的结果中创建一个新表
Oracle中:
Access中:
1.2、从select语句的结果中创建一个新的视图
Oracle中:
2、表和视图
2.1、表和视图的相似之处
非常相似,一般不区分,常常将表成为基表或者数据表。
2.2、表和视图的不同之处
表直接将数据存储到磁盘中。而视图是将select语句存储到磁盘上,不会存储任何数据。
基本上,表存储数据库中的数据。视图显示已经在表中数据的外观。
表是静态的,而视图是动态的。
3、常见的SQL语句
3.1、删除表
3.2、删除视图
3.3、一个视图可以建立在另一个视图之上
3.4、插入数据
插入一行所有列数据:
插入一行部分列数据
3.5、commit和rollback命令
3.6、添加若干新行到包含select语句的表中
insert into t_book
select b.id,b.kind,b.bookname
from book b
where b.kind !=11
insert into t_book (id,bookname)
select b.id,b.bookname
from book b
where b.kind !=11
3.7、更改已经存在于表中的数据
[注意]:where子句很重要,要是没有,则会更新所有的列
3.8、从表中删除行
4、在Oracle中,可以通过命令
set autocommit on|off来设定自动发布commit命令。
第五章:通过视图修改数据
1、使用With Check Option的视图
通过视图可以对数据进行更改,尽管新的行或者修改过的行没有出现在最终视图中。有时候我们不想进行这些修改。可以通过使用With Check Option定义视图以防止这些更改。在Oracle和大部分其他类型的SQL产品中都可以这样做。
2、SQLplus的使用
3、数据字典概述
数据字典(Data Dictionary)是包含关于数据库结构所有信息的表的集合。他包括所有表的名字、列、主键、视图的名字、定义这些视图的select语句等等。数据字典有时又被成为系统目录。大部分SQL产品都有数据字典。
这些表是通过数据库系统本身创建和维护的。它们包含数据库系统支持其自身处理和了解自身所需要的所有信息。
Orcle数据字典:关于表和视图的信息
将获得的信息数据字典表 数据字典列
表的名字 user_tables或all_tables table_name
视图的名字 user_views或all_views view_name
视图的定义 user_views或all_views text
表和视图的列user_tab_column或all_tab_column column_name
表的主键 user_constraints和user_cons_columns或all_constraints和all_cons_columns
3.1、如何查找有所表的名字
第六章:创建自己的表
1、创建表
-- 创建l_employees表[1]
drop table l_employees cascade constraints; -- 预防性删除[2]
create table l_employees(
employee_id number(3),
first_name, varchar2(5),
last_name,varchar2(10),
dept_code,varchar2(3),
manager_id number(3))
strorage(initial 2k next 2k pctincrease 0) -- 可选的[3]
tablespace &users; -- 可选的[4]
alter table l_employees -- 可选的[5]
add constraint pk_l_employees
primary key(employee_id)
using index -- 可选的[6]
strorage(initial 2k next 2k pctincrease 0) -- 可选的
tablespace &indx; -- 可选的[7]
comment on table l_employees is '员工表'; -- 可选的[8]
comment on column l_employees.employee_id is '员工编号'; -- 可选的[9]
comment on column l_employees.first_name is '姓'; -- 可选的
comment on column l_employees.last_name is '名'; -- 可选的
comment on column l_employees.dept_code is '部门代号'; -- 可选的
comment on column l_employees.manager_id is '经理代号'; -- 可选的
-- 建表过程完成,下面是插入数据
insert into l_employees values(201,'Jim','Fking','A32',451);-- 可选的[10]
......
insert into l_employees values(999,'Aix','Tom','B51',222);
analyze table l_employees compute statistics; -- 可选的[11]
说明:
-- [1]:对sql脚本的一个注释。在Oracle和其他大部分SQL产品中,注释行通常以两条短横线开始,并且后面有一个空格。
-- [2]:这是个预防性删除。短语cascade constraints确定了将在所有条件下删除表。没有这个短语,就不会在特定的条件下删除表。
-- [3]:storage字句告诉Oracle为这个表分配了多少磁盘空间。这通常是由DBA处理的,并且不能被应用程序员所处理。如果在此省略此行,那么数据库使用默认值。在这个storage字句中,initial 2k参数告诉Oracle在最初创建表时,为这个表分配了2kB的磁盘空间。下一个参数告诉Oracle,当最初分配的磁盘空间填满时,为这个表分配另外一个2kb磁盘空间。pctincrease 0参数告诉Oracle,为以后填满磁盘空间的每一个表一直分配2kb的磁盘空间。处理方法是分配平均大小的磁盘空间。例如,pctincrease 50将每个连续的分配增加50%,因此,下一个分配将是3KB,然后是4.5KB。这个参数有时用于增长迅速的表。
-- [4]:tablespace子句告诉Oracle应该以什么样的表空间(tablespace)建立新表。在这里,将以用户表空间来创建新表,或者以赋给&users变量的表空间来创建新表。表空间是存放表的地方,它是有名字的磁盘空间区域。这是一个DBA的概念。实际应用的产品数据库通常有许多磁盘驱动器。这些磁盘驱动器上的空间被划分为表空间,因此可以更容易的管理它们。通常一个oracle数据库至少有4个表空间:system、users、indx和temp。system表空间被数据字典所使用,并且不应该将它用于其他地方。users表空间用来保存大部分表。indx表空间用来保存大部分索引。temp表空间被用作完成排序的区域。DBA可以创建其他表空间。要想查看表空间的名称,可以使用有DBA权限的用户id,并且输入以下命令:select tablespace name from dba_tablespace;
-- [5]:alter table命令让employee_id列成为表的主键
-- [6]:在创建主键后,也会自动创建主键的索引,using index字句为索引设置了表空间和磁盘空间。
-- [7]:将以index表空间创建主键的索引,或者以赋予&indx变量的表空间来创建主键索引。
-- [8]:给表添加注释。
-- [9]:给表的字段添加注释。
-- [10]:插入数据。
-- [11]:在创建新表并加载数据于其中之后,应该运行analyze table命令。还应该在任意表添加一连串数据之后运行这个命令,该命令会将有关表的信息(如,表的大小和其他特性)放入数据字典中。
2、更新表
向表添加主键:主键是约束条件的一种类型,是限制可以输入到表中的数据的规则。一个表只能有一个主键,主键不能为NULL,主键可能由几个列组合构成。没有必要在alter table命令之后发布一个commit命令。通过alter table命令进行的更改会即刻成为永久性更改。实际上,从不需要在“数据定义语言(DDL)”命令之后使用一个commit命令,DDL命令创建了一个数据库对象,或者更改一个对象的结构。只有在“数据修改语言(DML)”命令只有需要使用commit命令,这些DML命令有insert、update和delete,他们更改了表中的数据。
说明:
-- [1]:通过这个命令更改l_foods表。
-- [7]:给这个约束条件起一个名字。
-- [7]:单词primary key指出这是一个主键约束条件。列的列表中允许包含形成主键的列。这个列表可以包含任意数量的列,甚至可以包含表中的所有列,但是通常限制它只包含一个列或者两个列。
更改表的主键:一个表只能有一个主键,在创建新的主键之前,必须删除原有的主键。
向表添加一个新列:添加的新列总是表的最后一列。
扩展列的长度:可以更改文本列或者数字列的长度,包括更改数字的精度,但数据类型不能更改。所有的日期都有相同的数据类型,因此,更改日期列的数据类型是没有意义的。
alter table l_foods
modify food_name varchar2(24);
alter table l_foods
modify price mumber(7,2);
从表中删除一列:
3、重复行问题
3.1、如何删除(表a)重复行:通过去掉重复的查询查询结果创建新表。
3.2、如何区别重复行:通过向表中添加一个数字列来区分表的重复行。并将这个列设为表的第一个列。
4、从文件中加载大量数据
4.1、从文件中加载大量的数据:insert语句是添加单个行或者适当数量的行到表中的好工具。如果想添加大量的行到表中,可以将数据放到一个平面文件中,操作起来会更容易一些。所谓的平面文件是没有特殊结构的普通文件。可以用记事本等文本编辑器来创建一个平面文件,平面文件中数据之间用“tab”键隔开,如果要输入null,只需将数据留为空白即可。导入的原理是调用Oracle的系统工具sqlldr.exe。下面是一个导入平面文件的批处理脚本(批处理中的“^”符号表示将一个长命令分成几行,是批处理文件中的延续符号)。
4.2、加载在Oracle中带分隔符的数据:在上面介绍了通过平面文件加载数据,需要指定每一个字段的确切位置,很麻烦。有一种更简单的方法就是加载在Oracle中带分隔符的数据。使用了分隔符的数据通常更方便,因为这样就无需总是将数据完美地排列在列中。在准备数据文件的时候,首先必须选一些数据中没有出现的字符作为界定符。在这里,我们选用了逗号,它被放置于每两个字段之间,标志着一个字段的结束和另一个字段的开始。通常数据都被堆放在一起,字段之间没有空白。
5、Oracle中的analyze table命令:该命令会告诉数据字典中表的行数和其他信息。优化器使用这个信息来优化select语句的处理。没有数据字典中的这个信息,处理将不会特别有效。