Oracle数据库操作---基础使用(二)
此篇承接上一篇的基本原理,继续展开学习,本篇主要面向数据的使用和管理,也就是开发者常用的基础语句,开始喽……
>>>对整表的操作
>创建表 关键字 Create
create table student(
stu_id int primary key,
stu_name varchar2(20) not null,
stu_address varchar2(40));
>查看表结构 Desc
Desc student;
>修改表 Alter table
>增加字段/属性 【alter table 表名 add(属性);】
alter table student add(stu_photo varchar2(20));
>修改字段 【alter table 表名 modify(属性)】
alter table student modify(stu_id number(4));
>删除字段 【alter table 表名 drop column 字段名;】
alter table student drop column stu_photo;
>删除表 Drop
>删除表 【drop table 表名;】
>>>对数据的操作(基础操作---单表)
>插入数据 【Insert into 表名(属性) values(属性值)】
Insert into student(stu_id,stu_name,stu_address) values(1,'lisi','扬州');
>查询数据 【Select * from 表名 where 限制条件】
select * from student where id=1;
>修改数据 【update 表名 set 字段名='修改后的值' where 限制条件】
update student set stu_name='zhangba' where id=1;
目前表中只有一行数据,所以加不加where都可以,不过最好养成好习惯,否则实际环境中不加where的话,会将所有要修改的字段的值全部改掉;千万谨慎啊!
>删除数据 【Delete 表名 where 限制条件】
Delete student from sutdent where id=1;
Truncate student;
##Delete和Truncate的区别
Delete执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。
Truncate table 则一次性地从表中删除所有的数据,并且不会把单独的删除操作记录,记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
Delete操作针对的时table和view,会保持现有表空间和索引的空间大小;
Truncate操作针对的是table,表空间和索引的空间大小会恢复到初始大小;
整体来看,Delete和Truncate删除的是表中的数据而不会改动表的结构。
>查询数据【Select 字段名 from 表名 where 限定条件……】(★★★)
Select查询是使用数据库的重点,在这里会详细讲解,如果有不全面的地方,后续还会进行更新补充的;
先说一说使用Select查询时,SQL执行的顺序:
1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。
2)语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。
3)视图转换,将涉及视图的查询语句转换为相应的对基表查询语句。
4)表达式转换, 将复杂的 SQL 表达式转换为较简单的等效连接表达式。
5)选择优化器,不同的优化器一般产生不同的“执行计划”
6)选择连接方式, ORACLE 有三种连接方式,对多表连接 ORACLE 可选择适当的连接方式。
7)选择连接顺序, 对多表连接 ORACLE 选择哪一对表先连接,选择这两表中哪个表做为源数据表。
8)选择数据的搜索路径,根据以上条件选择合适的数据搜索路径,如是选用全表搜索还是利用索引或是其他的方式。
9)运行“执行计划”。
说到这里,就顺便说一下Oracle的共享原理:
首先,Oracle将执行过的SQL语句存放在内存的共享池(shared buffer pool)中,可以被所有的数据库用户共享,当你执行一条SQL语句时,如果它和之前的执行过的语句完全相
同, Oracle就能很快获得已经被解析的语句以及最好的执行路径. 这个功能大大地提高了SQL的执行性能并节省了内存的使用。
查询语句中,关键字的执行顺序:
比如: select 字段 from 表名/视图名 where 条件 group by (字段) having 条件 order by 字段
①先由from将所查询的表或视图中的数据进行整理;【整理顺序是从右往左进行,一般将数据量最小的表放在最右面,作为基表处理】
②再执行where子句的限定条件,进行数据的筛选;【筛选顺序从右向左进行,一般将表关联语句放在最左边,筛选条件放在右端,这样可以减小笛卡尔积,提升查询效率】
③执行group by将数据按你给的条件进行分组;
④使用聚合函数进行计算;
⑤执行Having子句筛选分组;
⑥计算所有的表达式;
⑦执行Orader by语句进行结果集排序【排序一定是最后执行的,将所有查询的数据都执行完之后才进行,否则将失去排序的作用】
oracle 语句提高查询效率的方法
语句1: where column in(select * from ... where ...);
语句2:... where exists (select 'X' from ...where ...);
第二种格式要比第一种格式的效率高。
在Oracle中几乎可以将所有的IN关键字子查询改写为Exists的子查询。在使用Exists时,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时
间。Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果表存放在在一个加了索引的临时表中。
避免使用Having子句,Having只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序,总计等操作。如果能通过where子句限制记录的数目,那就能减少这方面的开销。
SQL初级优化:
①选择最有效的表名顺序(只在基于规则的优化器中有效)
上面已经提到,Oracle的解析器是按照从右向左的顺序处理From子句中的表或索引的,
在由多个表名的情况下,建议将子句中最小数据量的表作为基础表(driving table)放在最右面,将被最先执行;
②Where子句中的连接顺序
Oracle采用自下向上,自右向左的顺序执行限制条件,所以,建议将表之间的连接写在where后面的紧挨着的位置,那些可以过滤掉最大数据量的条件写在where子句的末尾.
③Select子句中避免使用星号 *
④使用Exists替代IN、使用NOT Exists替代NOT IN;
⑤SQL语句用大写的;因为Oracle总是先解析SQL语句,将小写字母转换成大写字母【但是开发中,Mapper.xml中建议使用全小写字母去写,因为项目最终运行环境是Linux,如果xml文件中sql与pojo中的大小写不一致,会导致Linux环境中运行出错】
⑥避免在索引列上使用计算;
⑦用IN来替换OR【上面提到如果可以使用Exists的地方,使用Exists】
文中有一部分是参照别人写的进行总结学习的,如果有什么错误的地方,欢迎大家指正,我会及时修改;
由于有一些其他的任务,暂时先写这些吧,后面会慢慢追加主键、外键、索引、视图的创建和使用,技术的东西只能一点一点来,加油!
Oracle数据库操作---基础使用(二)的更多相关文章
- C# Oracle数据库操作类实例详解
本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长 ...
- 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具
基于OCILIB的oracle数据库操作总结 1. 类图 2. 基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...
- (转)C# Oracle数据库操作类
原文地址:http://www.cnblogs.com/haibing0107/p/6143922.html using System;using System.Data;using System.C ...
- C# Oracle数据库操作类
using System; using System.Data; using System.Collections.Generic; using System.Configuration; using ...
- 循序渐进Python3(十二) --2-- web框架之django简单实现oracle数据库操作
在 Django 中构建 Oracle 数据库支持的 Web 应用程序 了解如何配置 Django 以便与 Oracle 数据库交互,并使用 ORM 进行数据库连接. 产能在软 ...
- 二十三、java连接oracle数据库操作:jdbc
1.jdbc 1) 含义:JDBC是java语言连接数据库,Java Date Base Connectivity2) jdbc的本质:在编程时java程序会去连接不同的数据库,而每个数据库的底层的实 ...
- 细说Oracle数据库与操作系统存储管理二三事
在上大学的时候,学习操作系统感觉特别枯燥,都是些条条框框的知识点,感觉和实际应用的关联不大.发现越是工作以后,在工作中越想深入了解,发现操作系统知识越发重要.在实践中结合理论还是不错的一种学习方法.自 ...
- Oracle数据库操作---入门(一)
由于工作原因,近期可能会开始多复习一些数据库相关的知识了,想深入了解的,也可以一起复习.学习~ 前期先巩固一下基础操作,后期会一点点的加深向运维方向深入.开篇主要介绍一些数据库理论知识,不感兴趣的可以 ...
- Oracle数据库,基础知识
1.Oracle的五大约束条件: 1 主键 primary key2 外键 foreign key,3 唯一 unique,4 检测 check5 非空 not null 实例运用: -- ...
随机推荐
- js css等静态文件版本控制,一处配置多处更新.net版【原创】
日常web开发中,我们修改了js.css等静态资源文件后,如果文件名不变的话,客户端浏览并不会及时获取最新的资源文件,这就很尴尬了 怎么办呢? 1.小白:让客户清除缓存?,No , 不靠谱 2.初级 ...
- Linux Compile Multiple C++ Files
Compile Two Files: $ CC -c Main.cc Sales_item.cc # by default generates a.exe # some compilers gener ...
- JavaScript 知识
1. js中this表示当前标签,获取当前标签内的属性,示例如下: var user_id = $(this).attr("data-user-id"); 2. * js中va ...
- [NOIP2018]保卫王国(树形dp+倍增)
我的倍增解法吊打动态 \(dp\) 全局平衡二叉树没学过 先讲 \(NOIP\) 范围内的倍增解法. 我们先考虑只有一个点取/不取怎么做. \(f[x][0/1]\) 表示取/不取 \(x\) 后,\ ...
- is和 == 的区别以及编码.解码
一.is和==的区别 1,id( ) id( )是python的一个内置函数,通过id( )我们可以查看到一个变量表的值在内存中的地址: s = 2 print(id(s)) # 1514368064 ...
- Spring Boot中使用JdbcTemplate访问数据库
本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例. 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. ...
- Doxygen的使用,配置及实例
Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,可以从一套归档源文件开始,生成文档 下载Doxygen + Graphviz Doxygen可以生成动态文档 Graphviz ...
- 机器学习基石笔记:16 Three Learning Principles
三个理论上界: 三个线性模型: 三个关键工具: 三条学习规则: 1.奥卡姆剃刀定律 先从简单模型开始, 训练后出现欠拟合, 再尝试复杂点模型. 2.采样误差 训练.验证.测试数据尽量同分布. 3.数据 ...
- [工具]渗透神器CobaltStrike 3.1.2 K8去后门破解版 & Windows版TeamServer
CS简介 Cobalt Strike(简称CS)是全球黑客公认一款非常优秀的渗透测试神器,以metasploit为基础的GUI的框架式渗透工具,集成了传统远控功能(远程桌面VNC.键盘记录.CmdSh ...
- 【sping揭秘】2、关于spring配置文件
<import>标签 引入其他的配置文件,如果A.xml 中的<bean>定义可能依赖B.xml中的某些<bean>定义,那么可以再A.xml中使用这种方式< ...