前言:
- 为什么要学习数据库?
1.1数据库的概念
数据库是按照数据结构组织,存储和管理数据的仓库。
数据库,简单来说是本身可视为电子化的文件柜-存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。
它将数据以一定方式存储在一起、能够为多个用户共享、尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。
1.2数据模型是数据库中数据的存储方式,是数据库系统的基础
数据模型经历了:
1.2.1层次模型:层次模型是数据库系统最早使用的一种模型,他的数据结构是一颗"有向树"
1.2.2网状模型:网状模型以网状结构表示实体与实体之间的联系。网中的每一个节点代表一个记录类型,联系用链接指针来实现。网状模型可以表示多个从属关系的联系,也可以表示数据间的交叉关系,即数据间的横向关系和纵向关系,它是层次模型的扩展。网状模型可以方便地表示各个类型的联系,但是结构复杂,实现的算法难以规范化
1.2.3关系型:在关系型模型中基本数据结构就是二维表,不用像层次或者网状那样的链接指针。记录之间的联系是通过不同关系中同名属性来实现的
关系型数据库优势:
数据结构单一
关系规范化,并建立在严格的理论基础上
概念简单,操作方便
组成
a.单一的数据结构-----关系
b.关系操作集合
c.关系的数据完整性,准确性和一致性
1.3关系型数据库:
关系型数据库简单的可以理解为二位数据库,表的格式就如Excel,有行有列。所谓关系型数据库,是指采用了关系模型来组织的数据库。关系模型是1970年由IBM的研究院E.F.Codd博士首先提出,在之后的几十年中,关系型的概念得到了充分的发展并逐渐成为数据库结构的主流模型。简单的说,关系型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。
1.4常见关系型数据库及其基本概念:
1.4.1常见关系型数据库:
mysql sqlServer oracle db2 sybase
1.4.2基本概念
a.关系:一个关系对应着一个二维表,二维表就是关系名,每张表由行和列组成
b.元组:在二维表中的一行,成为一个元组。可以用过使用结构化查询语句(Structured Query Language)来操作元组语句
c.属性:元组中的一个属性值(分量)
d.码:如果在一个关系中存在这样的一个属性,他的值就能用来唯一标识一行,则称这姓属性为关系的键或者码
e.主键(主码):从若干个候选码中选出来的一个用来唯一标识一行数据的属性
f.外键:用来逻辑的关联多张表的数据信息
2.Oracle的认知(一个认知)
oracle是一家公司的名字(甲骨文公司),世界上屈指可数的,是国际上非常大的巨型IT公司,是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越IBM,成为继Microsoft后成为全球第二大软件公司,最有名的产品是DB,database,RDBMS,关系型数据库系统。世界第一大数据库提供商,上海研发中心,五角场,离复旦大学近。主营oracle数据库软件,全世界第二大ERP提供商,大型企业级内部管理系统,包括人力资源管理等等。Oracle是Oracle公司第一个也是最成功的一个产品,发展经历过一个漫长的过程,到1997年6月,Oracle第八版发布。Oracle支持面向对象的开发以及新的多媒体应用,这个版本也成为支持Internet、网络计算等奠基定了基础。同时这一版本开始具有同时处理大量用户和海量数据的特性。1998年9月,oracle公司正式发布oracle 8i。"i"代表Internet,这一版本中添加了大量为支持Internet而设计的特性,这一版本为数据库用户提供了全方位的Java支持,Oracle 8i成为第一个完全整个了本地Java运行时环境的数据库。然后有9i,10g,"g"代表”grid“,网格。这一版本最大的特性就是加入了网格计算功能。然后是11g,现在发展到12c,c代表cloud,也就是现在炒的非常火的云概念。
3.三个名词:
sql:结构化查询语句,操作oracle数据库的语言
sqlplus:oracle软件自带的可以输入sql,且将sql执行结果显示的终端
pl/sql:程序化的sql语句,在sql语句的基础之上加入了一定的逻辑操作,如if for,使之成为一个sql块,完成一定的功能
4.四种对象
table:表格,由行和列组成,列又称为字段,每一行内容为表格的一天完整数据。
view:视图,一张表或者多张表的部分或者完整的映射,好比表格照镜子,镜子里面的虚像就是view
出去常见的table和view两种对象外,oracle还支持如下四种对象
sequence:序列
index:索引,提高数据的访问效率
synonym:同义,方便对象的操作
program unit:程序单元,pl/sql操作的对象
5.五种分类
sql的五大分类
Data retrieval:数据查询
select
DML:数据操作语言(行级操作语言) 操作的是表格中一条一条的数据
insert update delete
DDL:数据定义语言(表级操作语言) 操作的内容为表格(对象)
create alter drop truncate rename
transaction control(事务控制):commit rollback savepoint
DCL:数据控制语言
grant revoke
delete与truncate区别:
delete:删除表中的一条或者多条记录,并不返回表格的初始化状态
truncate:清空表格,并返回表格的初始化状态
6.oracle的使用
启动:
6.1 win+R------->cmd-------->sqlplus "as sysdba" //以sysdba身份登陆(此时可以创建用户,分配权限等)
win+R------->cmd-------->sqlplus username/password //以指定用户名/密码身份登陆
直接找到安装目录,打开sqlplus终端
6.2 创建用户:
create user 用户名 identified by 密码
6.3 权限授予:
grant resource,connect to user;
resource:
create trigger
create sequence
create type
create procedure
create cluster
create operator
create indextype
create table
connect:
create session
6.4 切换用户:
conn username/password
6.5 因为数据文件的默认语言环境为英语,当前windows系统是中文,中英文时间显示不一致,导入会失败,需要先修改语言环境
alter session set nls_date_language=english;
alter session set nls_language=english;
导入表给
@ e:\oracle\summit2.sql
start e:/oracle/summit2.sql
6.6 查看表结构
desc table_name;
Model 1 Select Rows
1.select :
语法:
select [distinct] {*,column [alias],...} from table
注:[]括起来的内容代表可有可无,* 代表所有列 ,distinct关键字只能跟在select关键字之后,select 子句后边指定要查询的列,from 子句后边跟要查询的表.
(英文名是first_name+last_name):My name is first_name.last_name;
2.select语句可以对指定的列的所有值进行算术运算。
语法:
select col_name 运算符 数字
from tb_name;
注意:select语句永远不对原始数据进行修改。
3.给查询的列区别名
语法:
select old_column [as] new_column_name
from tb_name;
4.使用||可以使得多列的值或者列和特殊的字符串合并到一个列进行显示
语法:
select col_name||‘spe_char‘||col_name
from tb_name
‘spe_char‘:如果一个列的值要跟特殊的字符串连接显示,使用该语法。
5.对null值得替换运算
语法:
select nvl(col_name,change_value)
from tb_name;
nvl2(col_name,不为空显示的值,为空显示的值);
6.使用distinct关键词,可以将显示中重复的记录只显示一条
语法:
select distinct col_name,col_name...
from tb_name; 注意1:distinct关键词只能放在select关键词后面
如:select id,distinct title
from s_emp;
该语句语法错!!!!!
注意2:如果distinct关键词后面如果出现多列,表示多列联合去重,即多列的值都相同的时候才会认为是重复的记录。
test表:
id id2
1 2
1 3
2 4
3 4
3 4
select distinct id,id2
from test;
显示结果为:
id id2
1 2
1 3
2 4
3 4
7.sqlplus命令
a:在当前操作的命令行追加内容
a test
c: 在当前操作的命令行修改内容
c/old_char/new_char
clear buffer:清空当前缓存的命令
del:删除当前操作行
del line_num指定删除第几行
i:当前操作命令行的下一行插入内容
l:查看缓存命令
l line_num:查看指定的命令行
n text:替换第n行的整行内容
!:后面接终端命令 ------linux环境下
!clear:清屏 ///
$:后接终端命令
$cls ---------> windows环境下
/:执行缓存sql命令
save file_name:将缓存命令保存到file_name中 (append replace)
get file_name:将文件中的内容提取到sqlplus
start 和 @ file_name:执行文件中的sql命令
edit file_name:使用终端设置好的vi编辑器编辑文件(对于windows使用的是notepad)
spool file_name 将接下来的sql语句以及sql的运行结果保存到文件中(append)
sql1
result1
sql2
result2
...
spool off 关闭spool功能
exit:退出
8.select id,last_name,first_name, salary, dept_id
from s_emp;
结果不好看,通过column使我们的显示界面好看。
colu last_name format a15;
colu first_name format a15;
Column 有没有改变数据表里数据啊,没有,它只是改变显示。它是不是SQL命令呢? 不是,它是sqlplus命令。除了刚才这个作用之外,我们下面来看看它还有什么作用。
COLUMN last_name HEADING ‘Employee|Name‘ FORMAT A15
. 给last_name取别名为Employee|Name , 竖杠代表换行。
. A15表示十五个字节长,一短横杠就是一个字节长
COLUMN salary JUSTIFY LEFT FORMAT $99,990.00
. salary JUSTIFY LEFT : 仅仅改变列名显示为左齐
. FORMAT $99,990.00: 控制显示格式为前面加 $ 符, “,”为分隔符, 0或9代表数字(通配符),0表示替换对齐数值,位数不足会补足,可以混合使用.
COLUMN start_date FORMAT A8 NULL ‘Not hired‘
. 如果start_date值为空的话,显示为’Not hired’;
. Format后不能直接跟null, 要先a8或a10;
. NULL ‘Not hired‘和nvl有点不同, nvl要求类型匹配
column 显示所有对列格式的设置情况
column last_name 显示对last_name列显示设置的情况
column last_name clear 删除对last_name列格式设置的情况
Clear column 清除所有column的格式设置
Column某列的格式设置,这里的列并不特定于某个表.
ex:
1234 column 99.99 -- > ###### //出错的时候不能显示,只是显示####
column columName 显示对列的限制
model 2 Sorting & Limiting Selected Rows
1、Order by 子句的使用
1) Order by子句在整个
select语句中的位置:
始终位于最后
2) order by后可以跟什么:
列名,列的别名,表达式,
列出现在select关键字后的
顺序(列号);
3) order by后可以跟多列,
表示先按第一列排序,
如第一列有相同值再按
第二列进行排序,如前二列
均有相同值,则按第三列进行排序...
4) ASC表升序,可以省略.
DESC表降序。
5)空值永远是最大的。
升序排序的时候,空值放在最后
降序排序的时候,空值放在最前面的
2、Where子句的使用
语法:
select col_name,...
from tb_name
where col_name 比较操作表达式
逻辑操作符
col_name 比较操作表达式
1) 作用:对SQL语句返回的数据集进行筛选;
2) 位置:紧跟在from子句后
3) 内容:由一至多个限定条件组成,限定条件由表达式, 比较符, 字面值组成。
4) 所有字符串和日期要用单引号括起来,数值不需要单引号。
日期在Oracle里有特定的格式,’DD-MON-YY’(具体看日期的显示格式),
否则作为一个字符串。
5) 几种常见的操作符:
1》逻辑比较操作符
= > < >= <= !=
2》sql比较操作符
between and:在什么范围之内
in(list):在一个列表中
like:模糊查询,即值不是精确的值的时候使用
通配符,即可以代替任何内容的符号
%:通配0到多个字符
_: 当且仅当通配一个字符
转义字符:
默认为\,可以指定 指定的时候用escape 符号指明即可,转义字符只能转义后面的一个字符
between 1 and 4: 包括起止值。限定内容为1到4。
in (1,2,4): 限定内容为1,2,4。
3》逻辑操作符
当条件有多个的时候使用
and:且逻辑
or:或逻辑
注意:and逻辑比or逻辑要高
not:非逻辑