Oracle_基本select语句

体系结构

  • Oracle服务器由一个数据库(Database, DB)和至少一个实例(Instance)组成。数据库存在硬盘上,实例位于内存中。实例即数据库文件加载到内存中的对应物,因为存在于硬盘上的数据库文件是无法修改的,只有加载到内存中才行。客户端往内存中的实例提交(Commit)数据,实例再将数据写回到磁盘上的DB。具体过程见下图:
    在这里插入图片描述其中,实例中PGA(Program Global Area) 首先接收客户端提交的数据,然后交给SGA(System Global Area),SGA再写回给DB。Oracle区别于MySQL的一点是,它可以允许客户端撤回写到实例中的数据,因为在实例中有SGA的缓冲;而MySQL的实例中没有SGA,客户端将数据提交到PGA后就默认数据会直接写到DB中。

表空间、数据文件

  • 数据文件:硬盘上后缀为.DBF的文件(位于软件目录中的oradata\ORCL),一个DBF文件中可能包含多个用户的数据。
  • 表空间:由多个数据文件组成,位于实例上。(这是一个逻辑上的概念,并非真实存在。)

数据库启动设置

  • 控制面板-管理-服务-OracleServiceORCL:数据库服务器,应设为启动
  • 控制面板-管理-服务-OracleOraDb**home*TNSListener:数据库远程访问监听器,应设为启动

SQL Plus基本操作

  • show user;:显示当前用户
  • select * from tab;:查看当前用户下的表。tab:数据字典,记录数据库和应用程序源数据的目录,包括当前用户下的表。*表示通配符。也可以把tab换成某一张具体的表,*换成该表中的某几列。例如:
    select empno, ename, sal from emp; //显示当前用户下的表emp中的三列: empno, ename, sal
  • desc emp:查看表emp的结构。(desc: description)
  • 设置页面显示:
    set linesize 100 //设置行宽
    set pagesize 100 //设置页宽
    可将它们写入配置文件...\sqlplus\admin\glogin.sql
  • col ename for a20:设置表中的ename列列宽,a表示字符串。
  • col sal for 9999:设置sal列为4位数字,一个9表示一个数字。

基本SELECT语句

  • 使用select语句还可以向表中添加列。例如,在上述表emp的例子中,在sal列月薪数据基础上添加一列表示年薪即为:select sal, sal*12 from emp;。可以看出,不仅能添列名,还可以添表达式。
  • /:执行上一条已经执行成功的SQL语句,但注意,不能执行上一条设置命令, 如col ename for a20
  • 修改上一条SQL语句:
  1. c:(即change
    c /错误关键字/正确关键字、使用/来执行修改过的SQL语句。具体分三步:
//例如输入一条有两行的命令:
select empno, ename, sal*12
form emp; //这里form错误,应为from,位于该条SQL语句第二行
2 //首先输入错误所在行号
c /form/from //改过来
/ //用/再次执行修改后的上一条sql语句
  1. ed:(即edit,常用)
ed //弹出系统默认的文本编辑器,修改、保持、退出、执行/
  • 别名:
select empno as "员工号", ename "姓名", sal 月薪, sal*12 年薪 from emp;

注意:取别名时,as加不加没区别,但双引号加不加有区别:当别名中除字符外有特殊符号时,要加双引号,否则出错,例如空格。另外,别名只是在显示时起作用,而在从表中取数据时还应该用原名。

  • DISTINCT:去重,即重复记录只记一次。
    1)例如某一列的数据中有很多相同的数据,当查询这一列时只需在列名前加上DISTINCT就可仅显示该列中的不重复数据,例如select distinct deptno from emp;。(不区分大小写)
    2)注意,如果distinct后跟不止一列,则作用是把这些列的数据中的每一行作为一条完整的数据来去重。例如select DISTINCT deptno, job from emp;会把每一行的deptno列和job列组合在一起来去重,因此结果可能在这两列中还会出现相同数据,但这两列的组合数据不会出现相同数据。即distinct作用于其后的所有列。
  • SQL语句注意事项:
  1. 大小写不敏感;(指的是语句中的关键字大小写不敏感,而不是数据库数据。)
  2. 可以写在一行或多行;
  3. 关键字不能被缩写、也不能分行;
  4. 各子句一般要分行写;
  5. 使用缩进提高语句可读性。
  • NULL值:
  1. 所有包含NULL值的表达式都为空。
    解决方式:使用滤空函数:nvl(a, b):如果a为NULL,函数返回b。
  2. NULL != NULL。(也即不能把NULL用于NULL的比较)。
    例如:查询奖金为NULL的员工信息:select * from emp where comm = NULL;会查无结果,而实际上表emp中有符合条件的数据。
    解决方法:使用isis not来判断一值是否等于另一值:select * from emp where comm is NULL;
    另外,SQL语句中使用=比较而不是==
  3. 数据库中,空值是无效的、未指定的、未知的或不可预知的值,而不是空格或0,也不是NULL(字符串)。
  • 连接字符串:
  1. ||
    例如:
    select ename || 'is a' || 'job' from emp;
    select 'hello'||'world' from dual; //把hello world拼接在一起并输出,这里dual是一张并不存在的伪表,只是为了凑SQL语句的语法;还可以继续在world 后继续使用||拼接其他字符串。
    另外,还可以给这个拼接的字符串取个别名:select 'hello'||'world' as "你好" from dual;(注意:SQL中双引号表示别名,单引号表示字符串。)
  2. concat函数:
    例如:
    select concat('hello', 'world') from dual;
    注意:concat函数只能包含两个字符串,也即只能拼接两个字符串。不过可以嵌套使用该函数来拼接多个字符串,例如:select concat('aa',concat('bb', 'cc')) from dual; //aabbcc

区分SQL和SQL Plus

  • SQL是数据库语言,其中的关键字不能缩写,例如select
  • SQL Plus是Oracle提供的工具,可在里面执行SQL语句,它配有自己的命令,如ed\c\set\col,关键字可缩写。它的命令不能改变数据库中数据的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值