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; (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|