数据库基础(Oracle)

前言:mysql

1.认识Oracle
    oracle:商业运用第一的关系型数据库,实质上就是一种关系型数据库。
2.数据库与关系型数据库
    数据库:数据存储的仓库
    关系型数据库:数据库中保存的对象之间能够存在必定的关联关系,并不是彻底独立。主要反映到之后学习的主外键.
    关系数据库是关系或二维表的集合:
       Orcale数据库
         /    \
       table_1     table_2
    关系数据库是:
      由关系型数据库对象组成的。
      由关系操做管理。
      受数据完整性约束控制。
3.三个名词
    (1) sql:结构化的查询语句,操做oracle数据库的语言
      (Structured Query Language, SQL)
      第四代编程语言,之关心作什么,不关心怎么作,结构化查询,易学易用
    (2) sqlplus:oracle软件自带的终端能够输入sql,且将sql执行结果显示
                                SQL*Plus
                                  ↓
    SQL*Plus: 如同操做系统中的SHELL,SQL——>Oracle,就是说在Oracle数据库执行SQL语句以前,须要SQL*Plus进行编译。
    (4) pl/sql:这是一种过程化语言,纯SQL中没有逻辑的控制,而在PL/SQL中存在逻辑控制
            像存储过程函数就是一种典型的PL/SQL语言的实现
4.数据库中的对象
   table:表格(实体OR关系),由行和列组成,列又称字段,每一行内容为表格的一条完整的数据。
   view: 视图,一张表或者多张表的部分或者完整的映射,比如表格照镜子,镜子里面的虚像就是view
   除去常见的table和view两种对象之外,oracle数据库还支持以下四种对象
   sequence:序列,生成主键值
   index:索引,提升数据的访问效率
   synonym:同义,方便对象的操做
   program unit:程序单元,pl/sql操做的对象
5.五种分类
   sql的五大分类:
   数据查询(DQL):SELECT
   数据操做(DML): INSERT, UPDATE, DELETE (增删改) 须要commit
   数据定义(DDL): CREATE, ALTER, DROP, RENAME, TRUNCATE
   数据控制(DCL): GRANT, REVOKE
   事务控制(DTL): COMMIT(事务提交), ROLLBACK(事务回滚), SAVEPOINT(设置回滚点)

delete,truncate区别:
  delete: 删除表中的一条或者多条记录,该操做须要提交事务
  truncate:清空表格,该操做不须要提交事务sql

oracle数据库环境准备(通常如今使用mysql数据库的是一种趋势):
   三种登陆方式:
    sqlplus "/as sysdba"
    sqlplus system/*******
    sqlplus username/password数据库

   了解三张表以及相互关系
    s_emp 员工表
    s_dept 部门表
    s_region 地区表编程

      

                    建表语句附在文档最后windows

 

6.去重
distinct关键词只能放在select关键词后面.
若是distinct关键词后面若是出现多列,表示多列联合去重,即多列的值都相同的时候才会认为是重复的记录。缓存

7.select语句永远不对原始数据进行修改。session

8.加减乘除有优先级,加小括号能够改变运算的顺序oracle

9.字符串拼接select id,first_name||' '||last_name||','||title as name from s_emp;编程语言

10.sqlplus 登陆以后,可使用buff(缓存)来存储/执行/修改要执行的sql语句
  这里的buff的特色:
  1.buff中只能存储一条sql语句(可是这条sql语句可能有不少行)
  2.每次放入新的sql语句,会把以前的覆盖掉
  3.每次执行sql语句,都会把这个sql语句放到buff里面编辑器

11.sqlplus基础操做:
 直接输入该行的行号就是定位
 l 查看缓存中的sql语句
 a 在[定位]的那一行后面追加新的内容after
 i 在[定位]的那一行下面插入新的一行insert
 c 替换[定位]的那一行中的某些字符串
 c/老的字符串/新的字符串
 del 删除[定位]的那一行内容
 n 后面加内容能够重写这一行
 ! 后面接终端命令 !clear:清屏 windows中使用$符号 例如:$cls
 / 执行缓存sql命令
 clear buffer:清空当前缓存的命令
 save test.sql buff中的sql语句保存在test.sql文件中
 get test.sql 把test.sql中的内容在加载到buff中,可是没有运行
 导入:
    start test.sql 把test.sql中的内容在加载到buff中而且执行
    @test.sql 把test.sql中的内容在加载到buff中而且执行
 edit file_name 使用系统默认编辑器去编辑文件
 录制:

    spool file_name //将接下来的sql语句以及sql的运行结果保存到文件
    sql1
      result1
    sql2
      result2
    ...
    spool off 关闭spool功能
 exit:退出

12.查询结果很差看,经过column使咱们的显示界面好看:COLUMN last_name FORMAT a15;  能够简写为:col last_name for a15;

13.order by:desc(降序) asc(默认升序),优先级最低

限制查询:
14.逻辑比较运算符:
select col_name,...
from tb_name
where col_name 比较操做表达式
逻辑操做符and or not
col_name 比较操做表达式
  ...
15.逻辑比较操做符 = > < >= <= !=
  不等于:三个都表示不等于的意思(常常用的是!=) != <> ^=
16.注意:
   1.限制查询条件,使用where子句
   2.条件能够多个,使用逻辑操做符和()进行条件的逻辑整合
   3.where子句的优先级别最高
   4.比较操做表达式由操做符和值组成

sql比较操做符:

17.between and:在什么范围以内
需求:查看员工工资在700 到 1500之间的员工id,和名字

select id,last_name,salary from s_emp where salary between 700 and 1500;

18.in(list):在一个列表中
需求:查看员工号1,3,5,7,9员工的工资

select id,last_name,salary from s_emp where id in (1,3,5,7,9);

19.like:模糊查询,即值不是精确的值的时候使用
    通配符,便可以代替任何内容的符号
    % :通配0到多个字符
    _ : 当且仅当通配一个字符
    转义字符:默认为\,能够指定 指定的时候用escape 符号指明便可,转义字符只能转义后面的一个字符    

eg:查看员工名字中包换一个_的员工id和工资

select id,last_name,salary from s_emp where last_name like '%\_%' escape '\';

20.is null:对null值操做特定义的操做符,不能使用=
eg:查看员工提成为为空的员工的id和名字

select id,last_name,commission_pct from s_emp where commission_pct is null

21.逻辑操做符,当条件有多个的时候使用
  and:且逻辑
  or:或逻辑
  注意:and逻辑比or逻辑要高
  not:非逻辑

函数:
单值函数
   1.字符函数
   2.日期函数
   3.转换函数
   4.数字函数
分组函数
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
22.字符函数
  LOWER 把字符转为小写
  UPPER 把字符转换为大写
  INITCAP 把字符串首字母转换为大写
  CONCAT 把俩个字符串链接在一块儿(相似以前的||的做用)
    select concat('hello','world') msg from dual;
    select 'hello'||'world' msg from dual;
  SUBSTR 截取字符串
    select last_name,substr(last_name,3) from s_emp;第二个参数从1开始为正;(从前日后)
    select last_name,substr(last_name,-1) from s_emp;第二个参数从-1开始为负;(从后往前)
   第三个字符表示截取多少个:
     select last_name,substr(last_name,-3,2) from s_emp;
     select last_name,substr(last_name,3,2) from s_emp;
  LENGTH 得到字符串长度
    select length('world')from dual;
  NVL 替换列中为null的值
    select last_name,nvl(commission_pct,0)from s_emp;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23.数字函数
  ROUND 四舍五入
    select round(45.923,2) from dual;保留到小数点后面2位
    select round(45.923,0) from dual;保留到个位 (个十百千万...)
    select round(45.923,-1) from dual;保留到十位 (个十百千万...)
  TRUNC 截取到某一位
    select trunc(45.929,2) from dual;截取到小数点后面2位
    select trunc(45.923,0) from dual;截取到个位 (个十百千万...)
    select trunc(45.923,-1) from dual;截取到十位 (个十百千万...)
  MOD 取余
    select mod(10,3) from dual;把10和3进行取余 (10除以3而后获取余数)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24.日期函数(sysdate关键字,表示系统的当前时间

   例如:显示时间:当前时间
   select sysdate from dual;
   注意:sysdate进行加减操做的时候,单位是天)

  MONTHS_BETWEEN 俩个日期之间相差多少个月(单位是月)
    select months_between(sysdate+30,sysdate) from dual;
    select months_between('01-2月-2019','01-2月-2019') from dual;
  ADD_MONTHS 返回一个日期数据:表示一个时间点,日后推x月的日期
    select add_months('01-2月-2019',2) from dual;
    select add_months(sysdate,4) from dual;
    注意:这个数字也能够是负数,表示往前推x月
  NEXT_DAY 返回一个日期数据:表示一个时间点后的下一个星期几在哪一天
    select next_day(sysdate,'星期五') from dual;
    select next_day('01-2月-2019','星期五') from dual;
    若是要使用'FRIDAY',那么须要把当前会话的语言环境修改成英文
    alter session set nls_language=english;
    alter session set nls_language='simplified chinese';
  LAST_DAY 返回一个日期数据:表示一个日期所在月份的最后一天
    select last_day(sysdate) from dual;当前日期所在月份的最后一天(月底) 15.16?
  ROUND 对日期进四舍五入,返回操做后的日期数据
    select round(sysdate,'MONTH') from dual;
    //这个写法是错误的
    //数字函数也有一个round
    //俩个ronnd函数有冲突
    //因此这里不能使用默认的日期格式
    select round('01-2月-2019','MONTH')
    from dual;
  TRUNC 对日期进行截取 和round相似,可是只舍弃不进位
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25.四.类型转换函数
  TO_CHAR 把日期或数字转换为字符
  TO_NUMBER 把字符转换为数字
  TO_DATE 把字符转换为日期
因此在平常的编程中若要向数据库中存一个日期,咱们可使用to_date函数
若要将一个日期数据以字符串形式从数据库中取出,咱们可使用to_char函数。
使用形式:fx(value,changed model);

附:建表语句

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

alter session set nls_language=english;

CREATE TABLE s_dept(
  id    NUMBER(7) CONSTRAINT s_dept_id_nn NOT NULL,
  name    VARCHAR2(25)    CONSTRAINT s_dept_name_nn NOT NULL,
  region_id    NUMBER(7),
  CONSTRAINT s_dept_id_pk PRIMARY KEY (id),
  CONSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id)
);

CREATE TABLE s_emp(
  id    NUMBER(7)    CONSTRAINT s_emp_id_nn NOT NULL,
  last_name    VARCHAR2(25)    CONSTRAINT s_emp_last_name_nn NOT NULL,
  first_name    VARCHAR2(25),
  userid    VARCHAR2(8),
  start_date    DATE,
  comments    VARCHAR2(255),
  manager_id    NUMBER(7),
  title    VARCHAR2(25),
  dept_id    NUMBER(7),
  salary    NUMBER(11, 2),
  commission_pct    NUMBER(4, 2),
  CONSTRAINT s_emp_id_pk PRIMARY KEY (id),
  CONSTRAINT s_emp_userid_uk UNIQUE (userid),
  CONSTRAINT s_emp_commission_pct_ck
  CHECK (commission_pct IN (10, 12.5, 15, 17.5, 20))
);

CREATE TABLE s_region(
  id    NUMBER(7)    CONSTRAINT s_region_id_nn NOT NULL,
  name    VARCHAR2(50)    CONSTRAINT s_region_name_nn NOT NULL,
  CONSTRAINT s_region_id_pk PRIMARY KEY (id),
  CONSTRAINT s_region_name_uk UNIQUE (name)
);

INSERT INTO s_dept VALUES (10, 'Finance', 1);
INSERT INTO s_dept VALUES (31, 'Sales', 1);
INSERT INTO s_dept VALUES (32, 'Sales', 2);
INSERT INTO s_dept VALUES (33, 'Sales', 3);
INSERT INTO s_dept VALUES (34, 'Sales', 4);
INSERT INTO s_dept VALUES (35, 'Sales', 5);
INSERT INTO s_dept VALUES (41, 'Operations', 1);
INSERT INTO s_dept VALUES (42, 'Operations', 2);
INSERT INTO s_dept VALUES (43, 'Operations', 3);
INSERT INTO s_dept VALUES (44, 'Operations', 4);
INSERT INTO s_dept VALUES (45, 'Operations', 5);
INSERT INTO s_dept VALUES (50, 'Administration', 1);

INSERT INTO s_emp VALUES (1, 'Velasquez', 'Carmen', 'cvelasqu',to_date('03-MAR-90 8:30', 'dd-mon-yy hh24:mi'), NULL, NULL, 'President',50, 2500, NULL);
INSERT INTO s_emp VALUES (2, 'Ngao', 'LaDoris', 'lngao','08-MAR-90', NULL, 1, 'VP, Operations',41, 1450, NULL);
INSERT INTO s_emp VALUES (3, 'Nagayama', 'Midori', 'mnagayam','17-JUN-91', NULL, 1, 'VP, Sales',31, 1400, NULL);
INSERT INTO s_emp VALUES (4, 'Quick-To-See', 'Mark', 'mquickto','07-APR-90', NULL, 1, 'VP, Finance',10, 1450, NULL);
INSERT INTO s_emp VALUES (5, 'Ropeburn', 'Audry', 'aropebur','04-MAR-90', NULL, 1, 'VP, Administration',50, 1550, NULL);
INSERT INTO s_emp VALUES (6, 'Urguhart', 'Molly', 'murguhar','18-JAN-91', NULL, 2, 'Warehouse Manager',41, 1200, NULL);
INSERT INTO s_emp VALUES (7, 'Menchu', 'Roberta', 'rmenchu','14-MAY-90', NULL, 2, 'Warehouse Manager',42, 1250, NULL);
INSERT INTO s_emp VALUES (8, 'Biri', 'Ben', 'bbiri','07-APR-90', NULL, 2, 'Warehouse Manager',43, 1100, NULL);
INSERT INTO s_emp VALUES (9, 'Catchpole', 'Antoinette', 'acatchpo','09-FEB-92', NULL, 2, 'Warehouse Manager',44, 1300, NULL);
INSERT INTO s_emp VALUES (10, 'Havel', 'Marta', 'mhavel','27-FEB-91', NULL, 2, 'Warehouse Manager',45, 1307, NULL);
INSERT INTO s_emp VALUES (11, 'Magee', 'Colin', 'cmagee','14-MAY-90', NULL, 3, 'Sales Representative',31, 1400, 10);
INSERT INTO s_emp VALUES (12, 'Giljum', 'Henry', 'hgiljum','18-JAN-92', NULL, 3, 'Sales Representative',32, 1490, 12.5);
INSERT INTO s_emp VALUES (13, 'Sedeghi', 'Yasmin', 'ysedeghi','18-FEB-91', NULL, 3, 'Sales Representative',33, 1515, 10);
INSERT INTO s_emp VALUES (14, 'Nguyen', 'Mai', 'mnguyen','22-JAN-92', NULL, 3, 'Sales Representative',34, 1525, 15);
INSERT INTO s_emp VALUES (15, 'Dumas', 'Andre', 'adumas','09-OCT-91', NULL, 3, 'Sales Representative',35, 1450, 17.5);
INSERT INTO s_emp VALUES (16, 'Maduro', 'Elena', 'emaduro','07-FEB-92', NULL, 6, 'Stock Clerk',41, 1400, NULL);
INSERT INTO s_emp VALUES (17, 'Smith', 'George', 'gsmith','08-MAR-90', NULL, 6, 'Stock Clerk',41, 940, NULL);
INSERT INTO s_emp VALUES (18, 'Nozaki', 'Akira', 'anozaki','09-FEB-91', NULL, 7, 'Stock Clerk',42, 1200, NULL);
INSERT INTO s_emp VALUES (19, 'Patel', 'Vikram', 'vpatel','06-AUG-91', NULL, 7, 'Stock Clerk',42, 795, NULL);
INSERT INTO s_emp VALUES (20, 'Newman', 'Chad', 'cnewman','21-JUL-91', NULL, 8, 'Stock Clerk',43, 750, NULL);
INSERT INTO s_emp VALUES (21, 'Markarian', 'Alexander', 'amarkari','26-MAY-91', NULL, 8, 'Stock Clerk',43, 850, NULL);
INSERT INTO s_emp VALUES (22, 'Chang', 'Eddie', 'echang','30-NOV-90', NULL, 9, 'Stock Clerk',44, 800, NULL);
INSERT INTO s_emp VALUES (23, 'Patel', 'Radha', 'rpatel','17-OCT-90', NULL, 9, 'Stock Clerk',34, 795, NULL);
INSERT INTO s_emp VALUES (24, 'Dancs', 'Bela', 'bdancs','17-MAR-91', NULL, 10, 'Stock Clerk',45, 860, NULL);
INSERT INTO s_emp VALUES (25, 'Schwartz', 'Sylvie', 'sschwart','09-MAY-91', NULL, 10, 'Stock Clerk',45, 1100, NULL);

INSERT INTO s_region VALUES (1, 'North America');
INSERT INTO s_region VALUES (2, 'South America');
INSERT INTO s_region VALUES (3, 'Africa / Middle East');
INSERT INTO s_region VALUES (4, 'Asia');
INSERT INTO s_region VALUES (5, 'Europe');

COMMIT;
相关文章
相关标签/搜索