oracle数据库sql的基本使用
整理了下关于oracle数据库中SQL的基本使用语句,整理如下,方便记忆。
oracle的基本术语
数据字典,数据库元数据信息的数据字典表和用户可以读取的数据字典视图组成。存放oracle数据库所用的有关信息。通过数据字典可以查看数据表和用户的一些信息。
数据文件,一个oracle数据可以拥有一个或多个物理的数据文件,一个数据文件只对于一个数据库
表空间,存储的逻辑结构,是组织数据和进行空间分配的逻辑结构。简单点,表空间就是一个或者多个数据文件的集合,所有的数据文件都被逻辑的存放在指定的表空间中。通常有system 、sysaux、 temp三个默认表空间。
系统用户:sys,system,sysman,scott默认密码tigger,
系统用户登入SQLplus:[system/123456][@server/ip][as sysdba/sysoper]管理员权限,@server/ip,数据库不在本机,需要输入IP。
登入用户命令:connect sys/123456 as sysdba;connect system/123456
查看当前登入用户:show user
使用数据字典来查看信息:含有的字典有dba_users、user_users、dba_tablespaces,user_tablespaces(普通用户表空间)
可以使用desc来查看数据字典都有些什么字段, desc dba_users,之后可以使用select语句查看具体的记录。可以查看某个用户默认的表空间。
启用用户的语句:alter user username account unlock。比如启动scoot用户alter user scott account unlock;这样就可以使用scott用户登入系统。
表空间
这是数据库的逻辑存储空间,在数据库中开辟的一个空间来存储数据,oracle的很多优化都是通过表空间来实现的。表都是放在表空间的数据文件里面。
一个形象的比喻:在一个房间里面这个房间可以存储很多箱子,箱子里面可以存储物品! 表空间可以看成房间,箱子可以看成数据文件物品可以看成表。 用户指定表空间也就是你希望把属于这个用户的表放在那个房间(表空间)里面。
表空间是一个虚拟的概念可以无限大,但是需要由数据文件作为载体。
为什么要创建表空间?
答:在建立用户的时候,我们建议数据库管理员要指定用户的默认表空间。因为我们在利用CREATE语句创建数据库对象,如数据库表的时候,其默认是存储在数据库的当前默认空间。若不指定用户默认表空间的话,则用户每次创建数据库对象的时候,都要指定表空间,显然,这并不是很合理。不同的表空间有不同的权限控制。用户对于表空间A具有完全控制权限,可能对于表空间B就只有查询权限,甚至连连接的权限的都没有。所以,合理为用户配置表空间的访问权限,也是提高数据库安全性的一个方法。
修改用户默认的表空间(管理员权限):alter user username default | temporary tablespace tablename.
创建表空间:create [temporary] tablespace tablename tempfile | datafile 'xxx.dbf' size xx; (默认目录下)
如何查看默认路径:通过数据字典dba_data_files;临时表空间dba_temp_files
select file_name from dba_data_files where tablesopace_name='XXX.dbf'
设置表空间联机或脱机状态(无法使用表空间),创建好表空间后默认是联机状态:alter tablespace tablename online | offline;
设置表空间的只读或者只写:alter tablespace tablename read only | write only | read write;
如何查看表空间所处的状态:通过status字段(dba_tablespaces)select statue from dba_tablespaces where tablespace_name='XXX.dbf';
为表空间添加数据文件:alter tablespace tablename add datafile 'xxx.dbf' size xx;可以从字典dba_data_files中file_name字段查看当前表空间的数据文件。
删除表空间的数据文件:alter tablespace tablename drop datafile 'xxx.dbf' ;不能删除第一条
删除表空间:drop tablespace tablename [ including contents ] 如果只是删除表空间就直接使用drop。如果需要将表空间里面的文件也删除,就使用including。
创建用户:create user 用户名 identified by 密码 default tablespace 表空间表;
接着授权给新建的用户:
grant connect,resource to news; --表示把 connect,resource权限授予news用户
grant dba to news; --表示把 dba权限授予给news用户
表
存储数据的基本单位,表是一个二维结构,行列。数据类型:字符型、日期型、数值型、其他类型。
字符型:char(n)、nchar(n),固定的数据类型,如果没有达到N那么就自动补空格。
varchar2(n)、nvarchar2(n),可变的数据类型,可以节省空间
数值型:number(p,s)p有效数字,s小数点后的位数。float()二进制。number(6,0)表示6位整数
日期型:date
其他类型:blob、clob,存储4GB的数据
创建表:create tabel table_name ( colum1_name datatype,colum2_name datatype default 默认值 );
查看表结构:desc table_name
修改表:alert table tablename add column_name datatype; 增加字段
alert table tablename modify column_name datatype;修改数据类型
alert table tablename drop column column_name ;删除字段
alert table tablename rename column column_oldname to column_newname;修改字段的名字
rename table_oldname to table_newname ;修改表名
删除表:truncate table table_name;截断表中的数据,执行后,表字段在,但内容不在。
drop table table_name ;彻底删除表
操作表中的数据
添加数据:insert into table_name [(column1, column2,....)] values(value1,value2,...)
alert table tablename modify column_name default 默认值
复制表的数据:create table table_name as select column1,... from other_tablename ; 复制表中的内容
insert into table_name [(column1, column2,....)] select column1,* from table_old
更新数据: update table_name set column1=value1,...[where conditions]
删除数据:delete from table_name ; 删除全部数据和truncate一样,但是truncate效率高。
有条件删除,上面加上where子句。
约束
作用定义规则,那些字段是一定需要输入的,那些字段是需要唯一的等等,这样可以确保数据的完整性。
非空约束:not null 在数据类型之后添加即可。id number(6,0) not null
alert table tablename modify column_name datatype null ; 将非空的改为可以为空
主键约束:可以为一个字段,也可以是多个字段称为复合主键 primary key
create table name(column1,..., constraint keyname primary key(column1,column2));复合约束
如果忘记了约束的名字,可以在数据字典user_constraints里面查看
alert table tablename add constraint keyname primary key(column1,column2));表创建好后添加主键
alert table tablename rename constraint oldname to new_name;更改约束名字
删除约束:alert table tablename disable | enable constaint name;禁用主键约束
alert table tablename drop constraint name
alert table tablename drop primary key [cascade]
外键约束:alert table table1name (column_name datatype references table2name(column_name),..);
table2是主表,table1为从表,table2的column因为主键,对应字段的类型要一样。从表中的值来源于主表或者为空。
(add)constraint constraint_name foreign key(column) references table_name(column_name) [on delete cascade]
例子:create table userinfo (
id varchar(10),
name varchar(10),
typeid_new varchar(20) references typeid(typeid) on delete cascade
);
唯一约束:unique,在字段名后加就可以,跟default使用一样的。
constraint constraint_name unique(column_name)
检查约束:create table userinfo (
salary number(5,0) check( salary>0 )
);
在SQLplus中可以使用以下语句更改显示的字段名、格式等:
col column_name heading new_name; 显示的名字
col column_name format a10; 更改字符型字段的长度,更改为10个字符长;
col column_name format 99; 更改数值型的显示位数,两位,保留一位小数99.9,也可以加上$
col column_name clear ;清楚之前设置的格式
查询
对原表不会有影响,只是对查询结果有影响
select [distinct] column_name as newname
from table
[where ]
order by column1 desc/asc, column2
order by对查询结果进行排序
group by 对查询结果进行分组,以汇总数据或者整个分组显示单行的汇总信息,在结果中每组数据都有一个与之对应的统计值(count、min、max、sum、avg)。计算每个username的平均分数,group by username。
select job_id, avg(salary), sum(salary),count(*) from employees group by job_id;最后结果上会显示出4列
rollup:在结果上增加一行,汇总各列信息,group by rollup(job_id)
having子句是对分组后的结果进行进一步的筛选,having是作用在组上面的。对having子句作用的理解就是记住select语句中子句的处理顺序,在select语句中,首先由from子句找到数据表,where子句接受from子句输出的数据,而having子句则接受来自group by 、where和from子句的输出。
逻辑运算符的优先级:not、and、or
模糊查询:like、_(任意一个字符)、%(任意多个值)、
以a开头的:where like 'a%'
含有a的用户名:where like '%a%'
case..when.:select username ,case when username ='aaa' then 计算机部门',
when 'bbb' then '市场部门' else '其他部门' end as 部门
from users;
判断某列的值是否为null:column is NULL/is NOT NULL
多表查询
from table1 join_type table2 [on(join_condition)]
join_type有内连接(inner join),自然连接(natural join)、外连接。
内连接:需要指定连接的条件,只返回符合条件和连接条件的行,消除不匹配的行。
自然连接:第一个表中的那些列与第二表中具有相同名称的列进行连接,bU需要明确指出进行连接的列。
外连接:扩展内连接的结果集,出返回匹配的结果集,还会返回不匹配的结果集。外连接有以下几种
左外连接(left [outer] join):显示左表中不匹配的行,满足where条件但不与右表匹配的行
右外连接(right [outer] join):显示右表中不匹配的行,满足where条件但不与左表匹配的行
全外连接(full [outer] join):显示所有符合搜索条件的行
grant <权限>,<权限> [on<对象类型><对象名>] to <用户> [with admin option](可以授予给他人)
oracle数据库sql的基本使用的更多相关文章
- Oracle 数据库SQL性能查看
作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...
- Oracle数据库sql命令整理
转至:https://blog.csdn.net/weixin_43712330/article/details/88358604 以下为oracle数据库中sql语句的整理,将持续更新01. 如何登 ...
- Oracle数据库——SQL高级查询
一.涉及内容 1.掌握SELECT语句的多表连接查询. 2.掌握SELECT语句的子查询. 二.具体操作 (一)根据Oracle数据库scott方案下的emp表和dept表,完成下列操作: 1.查询所 ...
- oracle数据库SQL入门
1.oracle数据库的下载.安装.卸载 Oracle下载: Oracle下载链接地址:http://www.oracle.com/technetwork/cn/database/enterprise ...
- [转] oracle 数据库 SQL plus 连接方法
http://hi.baidu.com/zzy382/item/a5b197f97a38e01ba7298832 之前电脑上安装了一个 Oracle 有一段时间没用,就把密码给忘了,按上面链接里的操 ...
- Oracle数据库SQL语句的分类
1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言,1987年在国际标准组织的支持下成为国际标准.不过各种通行的数据库系统其实在实践过程中都对SQL规范的作了 ...
- ORACLE数据库SQL语句的执行过程
SQL语句在数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQ ...
- Oracle数据库--SQL
1.事务(Transaction ) 1)命名事务 set transaction name ‘transaction_name ’; 2)查看事务是否存在 select name from v$tr ...
- Oracle数据库SQL语句操作大全汇总
数据库各个表空间增长情况的检查: SQL >SELECT A.TABLESPACE_NAME,( 1-(A.TOTAL)/B.TOTAL)* 100 USED_PERCENT FROM (SEL ...
随机推荐
- Grails 对象关联映射 (GORM) 一
转自:http://justjavac.iteye.com/blog/701445 Domain 类是任何商业应用的核心. 他们保存事务处理的状态,也处理预期的行为. 他们通过关联联系在一起, one ...
- Spring Mvc 输出Json(iwantmoon.com出品)
原文:http://iwantmoon.com/Post/f94e49caf9b6455db7158474bab4c4dd 因为工作需要,现在要去做开放平台,考虑了多种方案之后,基本确定 下来,Htt ...
- 使用AzCopy跨账户迁移blob
昨天北美紧急通知要停掉几个开发和测试的订阅,当天必须完成,因为事情比较多,搞得有点我措手不及,但是唯一的遗憾是Azure VM. 因为在上面做了很多东西,很多资料和环境都是做好的,如果被删除掉实在可惜 ...
- 【BZOJ】【1053】【HAOI2007】反素数ant
搜索 经典搜索题目(其实是蒟蒻只会搜……vfleaking好像有更优秀的做法?) 枚举质数的幂,其实深度没多大……因为$2^32$就超过N了……而且质数不能取的太大,所以不会爆…… /******** ...
- 【CodeForces】【321E】Ciel and Gondolas
DP优化/四边形不等式 这题……跟邮局那题简直一模一样吧……好水的E题…… 设dp[i][j]表示前 i 艘“gondola”坐了前 j 个人,那么方程即为$dp(i,j)=min\{ dp[i-1] ...
- Matlab验证公式取值范围
一.问题来源 t = 2xy/(x+y);融合相似度和信任度,我需要验证值域是不是[0,1]: 二.求解 clear all; clc; %linspace(0:1,0.1)这样是错的,第三个参数是段 ...
- 剑指offer--13题
#include "stdafx.h" #include <iostream> using namespace std; void FirstNoRepeatCh(co ...
- iOS开发如何实现消息推送机制
一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说来,当要显示消息 ...
- AutoResetEvent 运用
static AutoResetEvent are = new AutoResetEvent(true);//初始化为开 static void Main(string[] args) { //如果这 ...
- Matlab命令系列之目录操作
Matlab命令系列之目录操作 filesep 用于返回当前平台的目录分隔符,Windows是反斜杠(),Linux是斜杠(/).有时此命令结合ispc命令使用,可以灵活的设置目录分割符. fullf ...