Oracle数据库 —— 基础理论及SQL之select语句(1)

前端之家收集整理的这篇文章主要介绍了Oracle数据库 —— 基础理论及SQL之select语句(1)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1 数据库基础理论

DB(database):是真正存储数据的地方。
数据库是一种软件产品,是用于存放数据,管理数据的存储仓库,是有效组织在一起的数据集合。
DBMS:数据库管理系统,管理数据库的。
无论什么软件,前端是界面UI(用户接口),用于收集数据和显示数据,中间是语言业务逻辑层,再往后数据存在文件中,但由于数据量大,于是就出现了DBMS。

RDBMS(Relational Database Management System)
RDB:关系型数据库 —— 基于二维表的数据库
表头(第一行)、行(row)、列(column)、字段名或字段(表格中第一行每一个格)、字段值

oracle(甲骨文)数据库市场占有率超50%
IBM的db2市场占有20%
Micro的sqlserver占15%。
MysqL—sun—oracle


2 sql的语言分类(structed query language)

1、数据检索 select语句
  select
2、数据定义 ddl(data definition language)语句
  create drop alter
3、数据操作 dml(data manipulation language)语句
  insert delete update
4、事务操作 tcl语句
  commit rollback savepoint
5、数据控制 dcl语句
  grant revoke

数据库中基本概念:
选择:当所有的列被选中,部分的行被选中
投影:当所有的行被选中,部分的列被选中
表连接查询的数据来自于多张表,就需要把多张表组织成一张表。


3 sqlplus

sqlplus是oracle数据库提供的客户端工具。用sqlplus 用户名/密码登录oracle的数据库
sqlplus命令:
(注意:sqlplus命令不需要写分号“;”,sql语句必须以分号结尾)
1、设置行的长度
  set linesize 200/*显示200个字符再换行*/

2、设置列的宽度
  column name format a6/*设置列(column)name的宽度为6个字符*/
  column可以简写为col,format可简写为for;此sqlplus命令不能设置数字格式,显示4个数字,格式定义为col id for 9999,还如col salary for 99999.99

3、查看表结构
  desc user_007(查看表结构也可以是一条语句:desc 表名;)

4、 / 表示执行上一条sql语句,忽略sql命令

5、设置分页显示
  set pagesize 100 — 每100行数据分页显示
  set pages 0 —pagesize可以简写为pages,设置为0表示不分页


4 切换数据库的语言

1、登录服务器,切换成 bash shell
2、编辑配置文件
  vi .bash_profile
3、写入数据
  export NLS_LANG=’SIMPLIFIED CHINESE_CHINA.ZHS16GBK’
  /* 改成英文 */
  export NLS_LANG=’AMERICAN_AMERICA.ZHS16GBK’
4、保存退出
  esc
  shift+zz
5、source .bash_profile
6、重新进入sqlplus

注意:可能服务器上字符编码是简体中文,而本地的终端的字符编码不是简体中文的,这样不一致的话,远程登录数据库服务器,终端有时候就会显示乱码。


5 oracle中数据类型

4.1 数字

  number(n) 数字(最长n位)
  number(n,m) 浮点数(总长N位,小数点后M位)
  例:number(7,2)表示最大数位99999.99

4.2 字符串

  char(n) 表示定长字符串(方便查询),最长放入N个字符,放入的数据如果不够N格字符则补空格,无论如何都占N个字符长度。
  varchar(n)表示变长字符串(节省空间),最长放入N个字符,放入的数据是几个长度就占多大空间。
  varchar2(n) oracle自己定义的变长字符串。

4.3 日期

date
  任何数据类型都可以取值null,nvl(d1,d2),d1和d2这两个参数可以是数字、字符或者日期,但两个参数的数据类型必须一致。


6 select语句

6.1 from 子句

1、从表中查询一个字段的值
  select 字段名 from 表名;
把s_emp 表中所有的salary查询出来
  select salary from s_emp;(注意要打分号)
把s_emp表中所有的部门编号查询出来
  SELECT DEPT_ID FROM S_EMP;
/*sql语句不区分大小写*/

2、从表中查询多个字段
  select 字段名1,字段名2,字段名3 from 表名;
把s_emp人名和月薪列出来
  select first_name,salary from s_emp;

3、把s_emp表中所有的数据列出来
*可以代表所有的字段名
  select * from s_emp;

4、sql中数学运算
+ - * /
1/2 == 0(C) 1/2 == 0.5
  select salary,salary+100 from s_emp;
把salary除以30显示
  select salary,salary/30 from s_emp;
计算每个人的月薪和年薪
  select salary*1,salary*12 from s_emp;

5、字段或者表达式的别名
  select salary*1 monsal,salary*12 “year sal” from s_emp;
  /*字段或者表达式的别名只能有一个*/
  使用双引号可以把别名看成一个整体,让别名原样显示

6、数据库中的字符串
  使用单引号引起来的一串字符叫字符串‘hello world’
  (c中字符串拼接 strcat strncat sprintf),oracle数据库中字符串拼接符号 ||
  把每个员工的姓名显示出来
    select first_name||’.’||last_name name from s_emp;
  在姓名之间拼接一个单引号
    select first_name||””||last_name from s_emp;
    select first_name||”””||last_name from s_emp;

7、数据库中的NULL值处理
  salary*12
  年薪是员工的年薪加提成/100*年薪
    select id,commission_pct from s_emp;
    select id,salary*12,salary*(1+commission_pct/100)*12 from s_emp;
  nvl(par1,par2)NULL值处理函数
  par1和par2的类型保持一致,当par1的值为NULL,返回par2的值;当par1的值不为NULL,就返回par1的值
    select id,salary*(1+nvl(commission_pct,0)/100)*12 yearsal from s_emp;
  列出每个员工的id first_name manager_id 如果manager_id为NU LL,则显示为-1
    select id,first_name,nvl(manager_id,-1) manager_id from s_emp;

8、数据的排重
  select salary from s_emp;
  sql只关心做什么,不关心怎么做的!实现细节都隐藏了。   select distinct salary from s_emp;   select /*distinct*/ salary,title from s_emp;   /*id是不可能重复的*/   select distinct id,salary,title from s_emp;

猜你在找的Oracle相关文章