【从零开始学习Oracle数据库】(1)建表与简单查询

3.SQL的简介:

1.3.2. 数据定义语言(DDL)

用于建立、修改、删除数据库对象,包括创建语句(CREATE)、修改语句(ALTER)、删除语句(DROP),比如使用CREATE
TABLE创建表,使用ALTER
TABLE修改表,使用DROPTABLE删除表等动作。这类语言不需要事务的参与,自动提交。

 

四.DBA( Database Administrator )

数据库管理员

1.数据库基本概念:

1.1.2. DB和DBMS

数据库(Database,简称DB)是按照数据结构来组织、存储和管理数据的仓库。

数据库管理系统(Database Management System,简称DBMS):管理数据库的软件。

数据库建立了数据之间的联系,使用结构化的方式组织和处理数据,能够统一、集中及独立的管理数据,使数据的存取独立于使用数据的程序,实现了数据共享。

数据库的典型特征包括:数据的结构化,数据间的共享,减少数据的冗余度,以及数据的独立性。

数据库成为数据的知识仓库,并对这些数据的存储、访问、安全、数据一致性、并发操作及备份恢复负责。

 

五.Table( 表 )

表是数据库存储的基本单元 , 对应亍现实世界中的实体对象 , 比如部门、职员等
, 表是一个二维结构 , 由行和列组成 , 横向为行(Row) , 也叫记(Record) ,
用来表示实体的数据 , 比如一个职员的相关信息。纵向为列(Column) ,
也叫作字段(Filed) , 用来表示实体的属性 ,
比如职员的薪水。在软件开发技术比如 Java 中 ,
现实世界的实体使用对象来描述 ,
所以数据表和对象之间存在一种对应关系。数据表相当亍类(Class) ,
数据表的行就是某个对象的实例(Instance)
,其中每个列都是对象实例的属性(Field)。

数据库(Database, DB)
数据库管理系统(Database Management System, DBMS)
数据库管理员( Database Administrator, DBA)
数据库系统( Database System, DBS )

1.3.1. 结构化查询语言

SQL(Structured Query Language) 是结构化查询语言的缩写。

SQL是在关系数据库上执行数据操作、检索及维护所使用的标准语言,可以用来查询数据,操纵数据,定义数据,控制数据,所有数据库都使用相同或者相似的语言。

SQL可分为:

  • 数据定义语言(DDL) : Data Definition Language
  • 数据操纵语言(DML) : Data Manipulation Language
  • 事务控制语言(TCL):Transaction Control Language)
  • 数据查询语言(DQL):Data Query Language
  • 数据控制语言(DCL) : Data Control Language

执行SQL语句时,用户只需要知道其逻辑含义,而不需要知道SQL语句的具体执行步骤。

 

七.练习Sql语句

  • 1.建表

--建表
-- 表名不能超过 30 个字符
-- 表名、列名是自由定义的
-- 所有的 SQL 语句都是以“ ; ”结尾
CREATE TABLE user_test(
            id  number(4),
            password char(6),
            name char(20),
            phone char(11),
            email varchar(20)
);
  • 2.修改表格的列

alter table user_test modify email varchar(50);
  • 3插入数据

insert into user_test values(1001,'123456','张三','13468857714','linglongxin24@163.com');

*4. 查询数据

SELECT * from user_test;
  • 5.数据准备
  • 创建部门表并插入数据

CREATE TABLE dept_test(
            dept_id NUMBER(2),
            dept_name CHAR(20),
            dept_location CHAR(20)
);

desc dept_test;

INSERT INTO dept_test VALUES(10,'developer','beijing');

INSERT INTO dept_test VALUES(20,'account','shanghai');

INSERT INTO dept_test VALUES(30,'sales','guangzhou');

INSERT INTO dept_test VALUES(40,'operations','tianjin');

SELECT * FROM dept_test;
  • 创建员工表并插入数据

CREATE TABLE emp_test(

            emp_id NUMBER(4),
            name VARCHAR(20),
            job VARCHAR(20),
            salary NUMBER(7,2),
            bonus NUMBER(7,2),
            hire_date DATE,
            manager NUMBER(4),
            dept_test_id NUMBER(2)
);

DESC emp_test;

SELECT * FROM EMP_TEST;

INSERT INTO emp_test VALUES(1001,'张无忌','Manager','10000','2000',TO_DATE('2010-01-12','yyyy-mm-dd'),1005,10);
INSERT INTO emp_test VALUES(1002,'刘苍松','Analyst', 8000 , 1000 ,TO_DATE('2011-01-12','yyyy-mm-dd'),1001,10);
INSERT INTO emp_test VALUES(1003,'李翊' ,'Analyst',9000 , 1000 ,TO_DATE('2010-02-11','yyyy-mm-dd'),1001,10);
INSERT INTO emp_test VALUES(1004,'郭芙蓉','Programmer',5000, NULL ,TO_DATE('2010-02-11','yyyy-mm-dd'),1001,10);

INSERT INTO emp_test VALUES(1005 , '张三丰' , 'President' ,15000 , NULL ,TO_DATE('2008-02-15','yyyy-mm-dd'),NULL,20);
INSERT INTO emp_test VALUES(1006 , '燕小六' , 'Manager' ,5000 ,400 , '01-FEB-09' , 1005 , 20);
insert into emp_test values(1007 , '陆无双' , 'clerk' ,3000 , 500 , '01-FEB-09' , 1006 , 20) ;
insert into emp_test values(1008 , '黄蓉' , 'Manager' ,5000 , 500 , '1-MAY-09' , 1005 , 30) ;
insert into emp_test values(1009 , '韦小宝' , 'salesman' ,4000 , null , '20-FEB-09' , 1008 , 30) ;
insert into emp_test values(1010 , '郭靖' , 'salesman' ,4500 , 500 , '10-MAY-09' , 1008 , 30) ;



SELECT * FROM emp_test;
  • 6.练习基本查询语句

--计算员工的名字、月薪和年薪?
SELECT name,salary,salary*12 year_salary
    FROM emp_test;

--计算员工的月收入?
--空值和任何数据做算数运算 , 结果为空(null)
--正确写法:如果 bunus 的值是 null , 则取 0
SELECT name,salary,bonus,salary+ nvl(bonus,0) month_salary
    FROM emp_test;

--指定字段揑入值
    INSERT INTO emp_test (emp_id,name) VALUES(1011,'于泽成');

--查询 emp_xxx 表 , 如果没有职位 , 显示'no position' , 如果有职位 , 显示员工的职位
SELECT name,NVL(job,'no positon') job
            FROM emp_test;

--查询 emp_xxx 表 , 如果没有入职时间 , 显示为 2016-12-12 , 否则原样显示
SELECT name,NVL(hire_date,TO_DATE('2016-12-12','yyyy-mm-dd')) hire_date
            FROM emp_test;

--连接字符串用CONCAT(str1,str2,...)和Oracle有区别,Oracle用||
SELECT emp_id,name||' job is '||job detail
            FROM emp_test;
--复制表
CREATE TABLE emp_test2 AS SELECT * FROM emp_test;
SELECT * FROM emp_test2;

--DISTINCT注意:distinct 必须( 只能 )跟在 select 后边,distinct 指所有列的唯一组合
--机构中有多少种职位?
SELECT DISTINCT job FROM emp_test;
--员工分布在哪些部门?
SELECT DISTINCT dept_test_id FROM emp_test;
--查询每个部门不重复的职位
SELECT DISTINCT job,dept_test_id FROM emp_test;

--薪水高亍 10000 元的员工数据?
SELECT * FROM emp_test WHERE salary>10000; 

--职位是 Analyst 的员工数据?SQL 语句大小写丌敏感 , 数据大小写敏感
SELECT * FROM emp_test WHERE LOWER(job)='analyst'; 

--薪水大亍 5000 并且小亍 10000 的员工数据?>=<=;between and
SELECT * FROM emp_test WHERE salary>=5000 AND salary<=10000; 
SELECT * FROM emp_test WHERE salary BETWEEN 5000 AND 10000; 

--入职时间在 2011 年的员工?
--错误写法
SELECT * FROM emp_test WHERE hire_date=TO_DATE('2011','yyyy'); 
--正确写法
SELECT * FROM emp_test WHERE hire_date BETWEEN TO_DATE('2011-01-01','yyyy-mm-dd') AND TO_DATE('2011-12-31','yyyy-mm-dd') ; 


--列出职位是 Manager 或者 Analyst 的员工
SELECT * FROM emp_test WHERE job IN('Manager','Analyst');

--列出职位中包含有 sales 字符的员工数据?
SELECT * FROM emp_test WHERE LOWER(job) LIKE '%sales%';

--列出职位中第二个字符是 a 的员工数据?
SELECT * FROM emp_test WHERE LOWER(job) LIKE '_a%' ;

--查询数据库中有多少个名字中包含 'EMP' 的表?
SELECT COUNT(*) FROM USER_TABLES WHERE TABLE_NAME LIKE '%EMP%';


SELECT * FROM emp_test;

-- 查询哪些员工没有奖金?
SELECT * FROM emp_test WHERE bonus IS NULL;

--薪水丌在 5000 至 8000 的员工?
SELECT * FROM emp_test WHERE salary NOT BETWEEN 5000 AND 8000;

--不是部门 20 和部门 30 的员工?
SELECT * FROM emp_test WHERE dept_test_id NOT IN(20,30);

insert into emp_test values(1012 , 'text_test' , 'salesman' ,4500 , 500 , TO_DATE('2011-01-01','yyyy-mm-dd') , 1008 , 30) ;
--如果要查询的数据中有特殊字符( 比如_或% ),
-- 在做模糊查询时 ,
-- 需要加上\符号表示转义 , 如果是Oracle并且用 escape 短语指明转义字符\mysql不用
SELECT name FROM emp_test WHERE name LIKE '%\_%' ESCAPE '\' ;

4.SQL常用的一些字符:

1.2.5. MySQL数据库概述

MySQL是一个开放源码的小型关系型数据库管理系统,开发者为瑞典MySQL
AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。

与其它的大型数据库例如Oracle、IBM
DB2等相比,MySQL自有它的不足之处,如规模小、功能有限等,但对于一般个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于
MySQL是开放源码软件,因此可以大大降低总体拥有成本,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

2008年1月16日,Sun正式收购MySQL。2009年4月20日,SUN被Oracle公司收购
。目前的最新版本是MySQL5.6.

 

一.常用数据库软件

  • 大型数据库
  • Oracle Oracle是著名的Oracle(甲骨文)公司的数据库产品 ,
    它是世界上第一个商品化的关系型数据库管理系统 ,
    也是第一个推出和数据库结合的第四代语言开发工具的数据库产品。Oracle
    公司的软件产品丰富 , 包括 Oracle 服务器产品 , Oracle
    开发工具和Oracle 应用软件。其中最著名的就是 Oracle 数据库 ,
    目前最新的版本是 Oracle11g。
  • DB2 DB2 是 IBM 的关系型数据库管理系统 , DB2 有很多丌同的版本 , 可
    以运行在从掌上产品到大型机丌同的终端机器上。DB2
    在高端数据库的主要竞争对手是 Oracle。
  • Sybase Sybase是美国Sybase公司研制的一种关系型数据库系统 ,
    是较早采用C/S 技术的数据库厂商 , 是一种典型的 UNIX 或 Windows NT
    平台上客户机/服务器环境下 的大型数据库系统 ,
    在国内大中型系统中具有广泛的应用。
  • 中小型数据库
  • Sql Server Microsoft SQL Server 是运行在 Windows NT 服务器上 , 支持
    C/S结构的数据库 管理系统。它采用标准 SQL 语言。 Mysql
    MySQL是一个小型关系型数据库管理系统 , 开发者为瑞典 MySQL AB公司。在
    2008年 1 月 16 号被 Sun 公司收购。而 2009 年 SUN 又被 Oracle 收购。
  • Mysql MySQL 体积小、速度快、总体拥有成本低 , 尤其是开放源码 ,
    许多中小型网站为了降低网站总体拥有成本而选择了 MySQL
    作为网站数据库。
  • 小型数据库
    Access Microsoft Office Access( 前名 Microsoft Access
    )是由微软发布的关联式数据库管理系统 , 是 Microsoft Office
    的成员之一。

Oracle Oralce、IBM DB2、MS SQL /Server、SyBase SyBase、IBM
Informix、MySQL、Access

 

六.Oracle支持的数据类型

  • 数字
  • number(n) 数字( 最长 n 位 )
  • number(n , m) 浮点数( 总长 n 为 , 小数点后 m 位 )
  • 例:number(7,2) 表示最大数为 99999.99
  • 字符串
  • char(n) 表示定长字符串( 方便查询 )最长放入 n 个字符 ,
    放入的数据如果不够 n 个字符则补空格 , 无论如何都占 n 个字符长度。
  • varchar(n) 表示变长字符串( 节省空间 )最长放入 n 个字符 ,
    放入的数据是几个长度就占多大空间
  • varchar2(n) Oracle 自己定义的变长字符串
  • 日期
  • date 日期
  • 二进制
  • BLOB 二进制数据 最大长度4G

4.1 连接运算符 ||
4.2 使用字段别名 as
4.3 去除重复行 distinct
4.4 比较运算符 > < (!= or <>) between and
4.5 查询结果排序 order by asc(desc)
4.6 模糊查询 like
(
% 表示零或多个字符
_ 表示一个字符
对于特殊符号可使用ESCAPE 标识符来查找
escape表示*后面的那个符号不当成特殊字符处理,就是查找普通的_符号
)
4.7 逻辑运算符 or and not
4.8 in操作 not in

1.1.4. 表的概念

在关系数据库中,数据被存放于二维数据表(Table)中。

一个关系数据库由多个数据表组成,数据表是关系数据库的基本存储结构,由行和列组成,行(Row)也就是横排数据,也经常被称作记录(Record),列(Column)就是纵列数据,也被称作字段(Field)。表和表之间是存在关联关系的。

 

二.RDBMS( Relational Database Management System )

关系型数据库管理系统是数据库软件中用来操纵和管理数据库的部分 ,
用亍建立、使用和维护数据库 , 简称 rdbms。它对数据进行统一的管理和控制 ,
以保证数据的安全性和完整性。