orcle_day01
Oracle: 数据库,
1,认识数据库
    数据库:数据的仓库,保存大量数据的地方,有利于对数据的维护。增删改查很方便。
    数据库分类:
       层次型数据库:现实世界中很多事物是按层次组织起来的。层次数据模型的提出,首先是为了模拟这种按层次组织起来的事物。
       网状型数据库:处理以记录类型为结点的网状数据模型的数据库。处理方法是将网状结构分解成若干棵二级树结构,称为系。
       关系型数据库:mysql SQLserver oracle
       分布式数据库:是指数据分存在计算机网络中的各台计算机上的数据库
    oracle  数据库
    oracle :甲骨文公司 全球第一大数据库厂商
2 关系型数据库概念
    a,由 E.F.Codd博士在1970年提出关系型数据库系统模型
    b,它是关系型数据库管理系统的基础
    c,关系型数据库模型包含以下3部分内容
      i    包含一系列【关系】和【对象】
      ii   包含一系列对于关系的操作-->增删改查
      iii  包含数据完整性约束
		【规范保存到数据库中的数据】
* 关系型数据库中的关系是指:
	把实际问题的数据分别归成若干个简单的二元关系,
	一个二元关系都可以建一个满足一定条件的二维表格
关系 : 二维表格
3  关系型数据库是由一系列二维表组成
    二维表:每张表由行和列组成
    可以通过Structured Query Language 操作数据库表中的数据
二维表:一行  一条数据
    	    一列(字段)  一类数据
Primary Key:主键
    	主键:表中的一个列,随便是什么列
    	要求:非空且唯一
    	主要用于 唯一的表示一条数据
Foreign Key:外键
    	为了表结构的优化,所产生的操作,
    	使用外键进行表和表的关联
    	外键:值可以为空,可以重复,
    	如果有值必须是关联表主键中的值.
4 完整性约束条件
【不满足 完整性,数据不能保存到数据库中】
关系完整性是为保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则
在关系模型中,关系完整性主要是指以下三方面:
a、实体完整性(主键约束):所谓的实体完整性就是指关系(所谓的关系就是表)的主键不能取空值;
    比如学生表通常是取学号为主键
b、参照完整性(外键约束):是指参照关系中每个元素的外码要么为空(NULL),要么等于被参照关系中某个元素的主码;
比如今天是9月2日是开学日,大学新生刚来报道,在学生表里,有的学生可能还没来得及分配具体的班,所以这些还未来得及分班的学生教务处可以在学生表里的班级属性取空值NULL(空值代表“不确定”),而哪些已分了班的学生就必须取班级表里的某些属性,比如班级类别,即学生属于哪个班。比如取“软件工程”,”计算机技术应用“等等。参照关系也称为外键表,被参照关系也称为主键表。
c、用户定义的完整性(自定义约束):指对关系中每个属性的取值作一个限制(或称为约束)的具体定义。比如 性别属性只能取”男“或”女“ ,再就是年龄的取值范围,可以取值0-130 ,但不能取负数,因为年龄不可能是负数
横着看:就是看行,是一条数据。
    	竖着看:就是看列,是某一类数据。
看数据库:
圆饼累加的圆柱都代表数据库,
在关系型数据中都是一张一张表存放的。
每一张表放大都是一个二维表
oracle数据库是不区分大小写的
字段/属性
    	   Table Name:S_customer               Table Name:s_emp
    	id	name 	phone	emp_id		id	name
    	201	tom	151000	12		10	市场部
    	202	jak	152000	14		11	教管部
    	203	tom	159000	11		12	mis部
    	204	sport	153000	14		14	教学部
解释:
    	id(Primary key)---主键列(非空且唯一):以后每一个表都有一个id列,因为每一条数据需要一个特殊标示,这个id就是唯一的标示了一条数据。
    	name:标示这一列都是代表姓名信息
    	phone:标示这一列都是代表电话信息
    	rep_id:外键(Foreign key),这样是另一个表的主键(id),表与表之间就是通过这样的外键关联起来。
学习oracle需要了解:
Oracle中的对象
table:表 。重点学习的对象。
    view:视图。在表的基础上,以后可能是一个结果作为一个视图
    sequence:序列。将来这个序列就是用来产生id主键,主键要求唯一不重复
    index:索引,提高我们的检索速度
    Program unit:程序单元   在PL/SQL中声明的 存储过程,函数,包Program unit
oracle的组成:
    oracle 10g:
9I:internet
    10G:网格grid
    11G
    12C:云计算
内 ------------------> 外
    Data-------------->operation System --> oracle10g --------->sql,pl/sql----->tools
    电脑内存中的数据   打开操作系统	       安装oracle软件	    执行sql命令   使用各种工具
sql和sqlplus以及plsql区别:
sql:structured query language
           有结构的	 查询  语言    ---->结构化查询语言
        第三代: 高级编程语言
	第四代: 有结构的查询语言
只关心做什么 不关心怎么做
sql 命令 需要 ; 结尾,标示一条sql语句结尾
需求 : 得到名字叫张三的学生 所有信息
    	查询 张三
sqlplus:我们在登录oracle的时候提供一种登入oracle的方式
      sqlplus 工具 用于执行 sql语句
       sqlplus工具 可以完成的事情:
    	1,可以登入oracle数据库
    	2,执行输入的sql语句并且显示结果。
    	3,提供部分命令
sqlplus:有一些内置的命令,当使用这些命令的时候不需要 ; 结尾, 但是有 ; 也不会错
pl/sql:在存储过程中,在sql语言的基础上增加了逻辑控制功能。
	 BEGIN
	   IF c_id <= 0 THEN
	      RAISE ex_invalid_id;
	   ELSE
	      SELECT  name, address INTO  c_name, c_addr
	      FROM customers
	      WHERE id = c_id;
DBMS_OUTPUT.PUT_LINE ('Name: '||  c_name);
	      DBMS_OUTPUT.PUT_LINE ('Address: ' || c_addr);
	   END
oralce主要操作: 
    1.select语句
    2.数据操纵语言(DML语句)data manipulation language
    	insert, update, delete
    	插入    更新    删除
    	有事务概念-->commit;
    3.数据定义语言(DDL语句)data definition language
    	create(创建), alter(修改), drop(删除), rename(重命名), truncate(删除表中的数据)
    	会提交事务
    4.事务控制语句(TCL语句)transction control language
    	commit(提交), rollback(回滚), savepoint(记录点,用来回滚)
5.数据控制语言(DCL语句)data control language
    	grant【授权】, revoke【回收】
安装数据库:
   1521端口号 oracle的主服务端口号:使用oracle必须开启oracle主服务
   8080端口号 oracle监听端口号:使用网页oracle或者使用工具连接oracle需要开启监听服务
localhost:8080/apex--->网页版oracle
oracle基础前导操作:
    1.以管理员方式登录oracle
    	sqlplus system/密码
    	show user:显示当前登录的用户名字
2.创建新用户briup,密码briup
    	create user briup identified by briup;
    3.给新用户briup授权
    	grant connect,resource to briup;
使用网页版oracle 创建用户:
    	不推荐
    	推荐:sqlplus:sql命令创建oracle数据库
3.激活用户:
    	alter user briup account unlock;
    4.切换至briup用户
    	conn briup/briup
    5.设置当前会话(session)的日期语言格式
    	 alter session set nls_date_language=english;
    6.执行sql文件
    	start e:/table.txt
    	@路径
    7.查询当前用户下有哪些表?
    	 select table_name from user_tables;
查看表有哪些列?
    	desc 表名
学习阶段主要涉及表:
    S_EMP :员工表
    	id		id
    	last_name	后名字   姓
    	first_name	前名字	 名
    	userid		员工内部编号,没用
    	start_date	入职日期
    	comments	注释:记录员工的特点
    	manager_id	经理的id
    	title		职称
    	dept_id		所在部门id外键
    	salary		工资
    	commission_pct	提成
S_DEPT:部门表
    	id		id
    	name		部门名称
    	region_id	所在地区id的外键
S_REGION :区域表
    	id		id
    	name		区域名
三张表 主键 外键 关系需要很清楚
oracle二维表中列的数据类型:
1,NUMBER[(p,s)] 数值类型 
      p代表有效位数 精度(总长度),
      s代表小数点后位数 刻度
      eg:
      NUMBER(6,2):
      	123456.00
	1234.123
	1234.12
	123.123
NUMBER(3):
	123
	12.3
	0.123
	123.00
2,字符类型:
      2.1:CHAR(8) 定长字符类型:占用空间固定
	  00000tom
	  0000lisi
	  hello world 不能保存
2.2:VARCHAR(8) mysql  变长字符类型:占用空间 跟着输入有关
      2.3:VARCHAR2(8) oracle 变长字符类型:占用空间 跟着输入有关
		tom
		lisi
		hello world 不能保存
	oracle中字符串用 ''表示
	oracle关键字不区分大小写,但是字符串区分大小写
3,日期类型:DATE 
      默认:04-9月-17
      3.1:日期类型,世纪年月日时分秒都会保存
      3.2:中文语言环境:
      	系统默认:'DD-MM-YY'
      		eg:'16-7月-17' ---> 2017/7/16
      3.3:修改当前语言环境:
      	alter session set nls_date_language=english;
      3.4:英文语言环境
      	系统默认:'DD-MM-YY'
      		eg:'16-JULY-17' ---> 2017/7/16
      3.5:修改日期显示格式
      	alter session set nls_date_format='yyyy-mm-dd';
      	eg:select sysdate from dual;
【写一个长得和日期一样的字符串】
4,CLOB:超级长字符,整本小说的所有字符串 可以保存
5,BLOB:字节数组:可以用于保存文件的二进制字节数组.
   	字节数组: byte[]
select 语句 :作用:查询数据
   1:distinct :消除重复行,有多条重复数据就只会显示一条
语法:
     select [distinct] {*|(列名1,列名2...)} 
     from table;
* : 所有的列
样例:
     (1)查询s_dept表中的所有信息
     eg:
select * from s_dept;
(2)查询s_emp表中的last_name,salary
     eg:
SeleCT LAst_NaME,Salary
	from S_emP;
(3)查看s_emp表id,last_name,salary字段信息(列)
     eg:
select id,last_name,salary
	from s_emp;
(5) 查询所有部门名
     eg:
	select name
	from s_dept;
      (5.1) 去除重复的行
select distinct name
	from s_dept;
2,起别名:给某一个列 起别名
      语法:
      	select 列1 as 新列名字,列2 as 新列名字...
      	from 表
      a.使用as
b.空格后直接跟别名
      	select 列1 别名1,列2 别名2...
      	from 表
c.使用双引号区分大小写
3, 算术运算符 + - * /
查询出来的列是可以运算的
当月工资 加 100;
eg:查询 s_emp 中last_name 列和年薪
4,nvl(参数一,参数二):空值函数
      参数一 : 可能为空的列,
      参数二 : 如果参数一的列为空 就使用参数二的值代替
单纯查工资和提成:
      egs:
      select salary,commission_pct
      from s_emp;
eg: 查询当月工资:
         使用nvl空值函数 进行操作
select salary*(1+ nvl(commission_pct,0) )
	from s_emp
5,连接符||:可以将多个字符串或者多个字符串列的值进行拼接
   	作用:可以将多个列的值或者字符串进行拼接
   	注意:oracle中字符串使用的是单引号
     oracle中单引号表示字符串.
   	语法:
   	select 列||'你好' from s_emp;
eg:1字符串拼接: 
   	hello  world
select 'hello'||'world' from dual;
dual表:哑表-->同义词
   	任何用户都可以使用,
   	一般使用做测试.
eg:2字符串拼接列:
   	姓:last_name
eg:3列拼接列:
   	名:三 姓 :张
sqlplus 命令特点:
运送sql语句)
    把sql语句的结果集展示
: 缓存机制:
    	1.1:sqlplus会保存最近执行过的一条sql语句(可能是多行)
    	1.2:每次执行的sql语句都会保存在buffer中,但是会覆盖掉之前的sql语句
     :命令  l  :   显示刚才执行过的sql语句,并且写到缓存中。
    	语法: l
     :命令  /  :   执行缓存中的sql语句
    	语法: /
    4 :命令  n  : 直接输入一个数字  就是选中某一行--->下面用到的[定位]。
    	语法: n
     :命令  a[ppend]  : 在【定位】的那一行后面追加新的内容
    	语法:	先定位
    		a 被追加的字符串
6 :命令  c[hange]  : 在【定位】的那一行修改指定的字符串内容
    	语法:   先定位
    		c /old/new
:命令 cl[ear] buff[er] : 清除缓存区中的sql语句
    	语法: cl buff  或 clear buffer
:命令 del : 删除【定位】的那一行
    	语法:   先定位
    		del
9 :命令 i[nput] : 在【定位】的那一行的后一行插入新的一行
    	语法:	先定位
    		i 把字符串插入下面一行
0 :命令 l[ist] n : 显示第n行内容
    	语法:	l 4 显示第4行内容
11 :命令 n sql语句 : 重写那一行
    	语法:	2  from s_dept; //重写第二行
总结:
    	1,需要已经执行过一条sql语句。就是sqlplus缓存中有一条sql语句
    	2,需要先选中有问题的那一行,   输入n  定位某一行
    	3,使用下面相应的关键字 操作
2 :命令 SAVE filename : 将缓存中sql语句保存到本地文件
    	语法:	SAVE 文件名
    	默认位置:C:\Users\Administrator
    3 :命令 GET filename : 将文件中sql语句加载到缓存中,但是不执行sql语句
    	语法:	get 文件名
4 :命令 START filename : 将文件中sql语句加载到缓存中,并且执行sql语句
    	语法:	start 文件全路径+文件名
5 :命令 @ filename : 将文件中sql语句加载到缓存中,并且执行sql语句
    	语法:	@ 文件全路径+文件名
6 :命令 edit filename : 以记事本形式打开文件,编辑sql语句, Ctrl+s保存,关闭。
    	语法:	edit 文件全路径+文件名
7 :命令 ed : 将缓存中sql写到文件afiedt.buf并且打开文件
    	语法:	ed
8 :命令 spool filename : 开始保存 sqlplus输入的任何结果,(录控制台)
    	语法:	spool startPlus.text
9 :命令 spool off : 结束
    	语法:	spool off
注意:spool 和spool off必须要一起使用
    作用:记录sqlplus中sql操作
20: :命令 col [{column] [option] : 修改列在sqlplus中的显示格式(样式)
    	option : 取值: cle for hea jus
    	语法: col name for a15;//修改name列在sqlplus显示的长度为15
    	20.1:for操作字符串和日期:col 列名 for a12; 把这一列的长度定成12字符
20.2:for操作数字类型:    col 列名 for 占位符;
    	     补充: 占位符,用来占数字的位置
    	     1)  9 :不强制补全 ,就是数字占位符一个9占一个数字位,如果数据数字长度大于9占位符长度就还会显示###,
    	     	col salary for 99999	就是这一列变成5个长度,因为用了5个9来占位
    	     2)  0 :强制补全
    	     	col salary for 00099	就是这一列变成5个长度,因为用了三个0个两个9来占位,但是0是自动补全的,所有会在前面补0直到满足5个长度
    	     3)  $ :西方的货币符号  货币符号在一列数据中只能出现一个
    	     	col salary for $9999	就是用四个9占位,但是在显示的时候回在前面加一个$号
    	     	col salary for $0000
    	     4)  L :本地货币符号
    	     	同上,但是加的是本地的货币符号
    	     5)  . :小数点
    	     	就是小数点的意思
    	     	col salary for 9999.9999  就是一个四位数精确到小数点后四位。
6)  , :分隔符
    	     	col salary for 9,999.99    在那个地方输出一个,号	
    	20.3:  col  cle : 清除某一个列的格式
    		语法: col name cle
20.3: clear columns : 清除所有列的格式
使用: 
    L : 查看缓存sql
    / : 执行缓存sql
    n sql : 重写缓存第n行的sql语句
    c /old/new : 替换当前选中行的值
    save 文件名  : 把缓存中是sql保存到某一个文件
    get 文件名
    @ 文件名
    start 文件名
 -----------------------------day1------------------------------
排序 Order by
	1,语法:order by 列名 排序,列名 排序;
		升序:asc  如果不写 默认为asc
		降序:desc
	   eg:
select id,last_name,salary,commission_pct
		from s_emp
		order by commission_pct;
null 最大
	2,特点:
	 2.1 : order by放在select语句最后一行,最后,最后,最后
	 2.2 : 默认升序(asc),降序(desc)
	 2.3 : order by后面可以跟列名、别名、select后面字段名的序号
不写排序规则就是默认升序排序
		eg:
		select id  s_id ,salary a
		from s_emp
		order by s_id;
显示升序排序
		eg:
显示降序排序
		eg:
select id,salary,commission_pct
		from s_emp
		order by commission_pct desc;
		字符串排序是按照ASCII值排序
		eg:
按照多个列排序
		eg:
			select id,last_name,salary
			from s_emp
			order by salary desc,id;
注意:如果按照多个列进行排序,多个列之间逗号隔开,先按照第一个列的值进行排序,如果第一个列的值相同,那么会按照第二个列的值进行排序。.......以此类推
按照commission_pct进行排序
			select last_name,commission_pct
			from s_emp
			order by commission_pct asc;
	 2.4 : null 表示无限大
where子句
作用:过滤(筛选)要查询的数据
	书写位置:放置在from子句的后面 紧跟着from
	书写组成:可以由字段名(列名)、常量、比较符、表达式等组成。
1, 基本操作符
逻辑比较操作符
		=  >  <  >=  <=
select id,last_name,salary
		from s_emp
		where id = 10;
select id,last_name,salary//选列进行显示
		from s_emp
		where id < 5;//对行约束
不等于:三个都表示不等于的意思(经常用的是!=)
		!=        <>      ^=
eg:查询 id last_name salary 
		from s_emp 需要查询的
		条件是 工资大于1000
select id,last_name,salay
		from s_emp
		where salary > 1000
NGao
select salary
		from s_emp
		where last_name = 'Ngao'
eg:查询不是41部门的员工信息
select id,last_name,dept_id,salary
		from s_emp
		where dept_id != 41
2, (not) between  一  and   二  
		在某一个区间 [一,二]
select id,last_name
		from s_emp
		where id between 20 and 50;
eg:工资不在1000-2000之间的员工信息
select id,last_name,salary
		from s_emp
		where salary not between 1000 and 2000;
where salary between 100 and 1000;
		where salary not between 100 and 1000;
eg:
		select id,last_name,salary
		from s_emp
		where id between 4 and 10;
		[4,10]	
		eg:
		select id,last_name,salary
		from s_emp
		where salary not between 1000 and 2000;
3, 列名 (not) in(41,42,43)某一列的值只能是括号里的数据
		eg:where 列名 in(41,42,10)
select id,last_name,salary
		from s_emp
		where id in (1,2,3,4,5);
工资1250|1000|1200
select id,last_name,salary
		from s_emp
		where salary  in(1250,1000,1200);
4, and  且
		需要连接多个条件
语法:where 条件一 and 条件二 当条件一和条件二都满足的数据才会被查询出来
eg:工资不在1000-2000之间的员工信息
from s_emp
		where salary < 1000 or salary > 2000 and id = 10 or last_name = 'Ngao'
5, or   或
		需要连接多个条件
		eg: where 条件一 or 条件二 or 条件三	当条件一或者条件二满足一个就可以出来
select id,last_name,salary
		from s_emp
		where id < 10 or salary>1000;
6, (not) like:模糊匹配 
		_ :占位符 占一个符号位
		% : 占位符 占0-多个位子
		语法:	where last_name like 'tom';
			where last_name like '_om';
			where last_name like '%o%';
		escape : 定义转义符号。将特殊含义的字符串 转义为普通字符串
			语法: where last_name like '/_briup' escape '/';
eg:last_name N开头员工信息
select id,last_name,salary
		from s_emp
		where last_name like 'N%'
eg:last_name 第二个字符 是 g
select id,last_name
		from s_emp
		where last_name like '_g%';
eg:包含g
		select id,last_name,salary
		from s_emp
		where last_name like '%g%'
插入一条sql语句
		insert into s_emp(id,last_name) values(99,'_briup');
		commit;
eg:查询下划线开头的用户信息
		select id,last_name
		from s_emp
		where last_name like '#_%' escape '#';
7, is (not) null : 判断那一列是null;
语法: where commission_pct is null;
select id,salary * commission_pct
		from s_emp
		where commission_pct is not null;
注意:oracle中字符串使用单引号,单引号中的字符区分大小写
eg:41号部门,salary 大于1500  salary降序
		select dept_id,salary
		from s_emp
		where dept_id = 41 and salary < 1500
		order by salary desc;
优先级:	
		(1)算术运算符
		(2)连接符  ||
		(3)比较符
		(4)列名 [not]in  列名 [not]like
		(5)列名 [not]between 1  and   2
		(6)not
		(7)and
		(8)or
		(函数)...
	*使用括号改变优先级
orcle_day01的更多相关文章
随机推荐
- AndroidManifest.xml中的<uses-feature>以及和<uses-permission>之间的联系
			
概述:<uses-feature>用来声明应用中需要用的硬件和软件的功能. 硬件特性:表明您的应用需要用的硬件功能. 功能类型 特征描述 描述 音频 android.hardware.au ...
 - rocketmq的windows版客户端的启动步骤
			
一.下载RocketMQ首先,我们去下载RocketMQ,RocketMQ 是一个开源的东西,可以去github上面下载,地址是:https://github.com/alibaba/RocketMQ ...
 - OpenID简介
			
OpenID 是一个以用户为中心的数字身份识别框架,它具有开放.分散性.OpenID 的创建基于这样一个概念:我们可以通过 URI (又叫 URL 或网站地址)来认证一个网站的唯一身份,同理,我们也可 ...
 - java:nginx(java代码操作ftp服务器)
			
1.检查是否安装了vsftpd [root@linux01 ~]# rpm -qa|grep vsftpd 2.安装vsftpd [root@linux01 ~]# yum -y install vs ...
 - 将序列化成json格式后日期(毫秒数)转成日期格式
			
System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaS ...
 - gin框架教程:代码系列demo地址
			
gin框架教程代码地址: https://github.com/jiujuan/gin-tutorial demo目录: 01quickstart 02parameter 03route 04midd ...
 - django中聚合aggregate和annotate GROUP BY的使用方法
			
接触django已经很长时间了,但是使用QuerySet查询集的方式一直比较低端,只会使用filter/Q函数/exclude等方式来查询,数据量比较小的时候还可以,但是如果数据量很大,而且查询比较复 ...
 - jQuery事件操作
			
bind绑定事件 bind(type,data,fn) [参数描述] type (String) : 事件类型 data (Object) : (可选) 作为event.data属性值传递给事件对象的 ...
 - 关于SQL关键字"having "
			
HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. SQL HAVING 语法 SELECT column_name, aggregate_f ...
 - 【OpenGL】初识OpenGL4.0
			
目录(?)[-] 什么是GLSL GLEW 安装GLEW 使用GLEW 其他库 使用GLM库进行数学运算 安装GLM 使用GLM 使用GLM作为OpenGL的输入 使用GLFW进行窗口管理 这篇文章主 ...