【从零开始学习Oracle数据库】(1)建表与简单查询
一.常用数据库软件
- 大型数据库
- 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 的成员之一。
二.RDBMS( Relational Database Management System )
关系型数据库管理系统是数据库软件中用来操纵和管理数据库的部分 , 用亍建立、使用和维护数据库 , 简称 rdbms。它对数据进行统一的管理和控制 , 以保证数据的安全性和完整性。
三.SQL(Structured Query Language)
SQL( Structured Query Language )语言是用来在关系数据库上执行数据操作、检索及维护所使用的标准语言 , 是一个综合的、通用的关系数据库语言。大多数数据库都使用相同或者相似的语言来操作和维护数据库。SQL 语言可以用来查询数据 , 操纵数据 , 定义数据 , 控制数据 , 使软件开发人员、数据库管理员都可以通过 SQL 语言对数据库执行特定的操作。
四.DBA( Database Administrator )
数据库管理员
五.Table( 表 )
表是数据库存储的基本单元 , 对应亍现实世界中的实体对象 , 比如部门、职员等 , 表是一个二维结构 , 由行和列组成 , 横向为行(Row) , 也叫记(Record) , 用来表示实体的数据 , 比如一个职员的相关信息。纵向为列(Column) , 也叫作字段(Filed) , 用来表示实体的属性 , 比如职员的薪水。在软件开发技术比如 Java 中 , 现实世界的实体使用对象来描述 , 所以数据表和对象之间存在一种对应关系。数据表相当亍类(Class) , 数据表的行就是某个对象的实例(Instance) ,其中每个列都是对象实例的属性(Field)。
六.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
七.练习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_salaryFROM emp_test;--计算员工的月收入?
--空值和任何数据做算数运算 , 结果为空(null)
--正确写法:如果 bunus 的值是 null , 则取 0
SELECT name,salary,bonus,salary+ nvl(bonus,0) month_salaryFROM emp_test;--指定字段揑入值INSERT INTO emp_test (emp_id,name) VALUES(1011,'于泽成');--查询 emp_xxx 表 , 如果没有职位 , 显示'no position' , 如果有职位 , 显示员工的职位
SELECT name,NVL(job,'no positon') jobFROM emp_test;--查询 emp_xxx 表 , 如果没有入职时间 , 显示为 2016-12-12 , 否则原样显示
SELECT name,NVL(hire_date,TO_DATE('2016-12-12','yyyy-mm-dd')) hire_dateFROM emp_test;--连接字符串用CONCAT(str1,str2,...)和Oracle有区别,Oracle用||
SELECT emp_id,name||' job is '||job detailFROM 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 '\' ;
【从零开始学习Oracle数据库】(1)建表与简单查询相关推荐
- 【从零开始学习Oracle数据库】(3)函数与子查询和连接查询
#-- --查询语句的基本格式 --select 字段 1 , 字段 2 , 字段 3 , 表达式 , 函数 , ... --from 表名 --where 条件 --group by 列名 --ha ...
- 【从零开始学习MySql数据库】(3)函数与子查询和连接查询
#查询语句的基本格式 #select 字段 1 , 字段 2 , 字段 3 , 表达式 , 函数 , ... #from 表名 #where 条件 #group by 列名 #having 带组函数的 ...
- 【SQL Server数据库】建库、建表、简单查询语句(一)
记录数据库原理实验所用到的代码. 创建数据库 创建名称为XSGL_CP的数据库. create database XSGL_CP --设置主文件的逻辑名称.文件名.初始大小.最大文件大小限制.需要增加 ...
- Oracle数据库之多表查询
oracle安装参照: Oracle数据库之安装教程 Oracle数据库总结: Oracle数据库之基本查询 Oracle数据库之单行函数 Oracle数据库之多行函数 Oracle数据库之多表查询 ...
- oracle批量把小写转换成大写,oracle数据库批量将表名小写转大写
ORACLE10g数据库,Sqlserver通过DTS导出数据到ORACLE后.查询表数据时输入: select * from "表名" ; 查询数据执行正常. 如果输入:sele ...
- 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...
如何把excel里的表导入到oracle里 使用第三方工具吧,toad之类的 一个excel表格中有多个sheet,如何将其导入oracle数据库 户和要用DBA 最简单得建用户: create us ...
- virtualbox中安装xp系统、安装oracle数据库到虚拟机的xp系统中、主机连接oracle、备份xp系统、oracle数据库的一些基本概念(学习oracle数据库的准备工作)-day01
目录 1. 安装virtualbox 1.1 什么是virtualbox 1.2 安装virtualbox 1.3 virtualbox跑xp系统 1.4 让虚拟机的xp与外面的系统网络互通 2. 安 ...
- oracle数据库系统学习,Oracle数据库学习第二天
1.伪表,伪列 1.1.伪表dual 概念: 就是一个不真实存在的虚拟表.伪表的作用就是用来构造一个符合sql规则的select语句.简单来说,伪表就是为让select语句不出现错误. 应用场景 用来 ...
- oracle临时表经常被锁_数据库学习——Oracle 数据库了解与使用
一. 数据库相关概念 1 什么是数据库 所谓的数据库其实就是数据的集合.用户可以对集合中的数据进行新增.查询.更新.删除等操作.数据库是以一定方式储存在一起.能与多个用户共享.具有尽可能小的冗余度.与 ...
最新文章
- cv dnn识别动作规范 open_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
- html:(17):img标签和表单标签
- java xms xmx 默认值_JVM启动参数-Xmx的默认值是多少?
- JVM学习-操作数栈(Operand Stack-官方翻译)
- Tomcat VirtualWebappLoader 配置
- java贝塞尔函数插值_空间插值分析算法综述
- T检验、卡方检验、F检验
- RT-Thread柿饼控件(2)-- Button
- 判断图片路径是否404
- 计算机应用的知识能力和素质,信息素质与计算机应用能力
- PHP正则表达式修饰符
- 使用Eric构建使用Caffe应用程序
- CC1310F128RSMR Sub-1GHz射频微控制器 - MCU 433MHz 868MHz 915MHz ULP Wireless MCU
- 易经八卦在程序世界中的体现
- 薄饼核心函数swapExactTokensForTokens
- requirejs html缓存,requirejs 缓存问题
- python编写存储过程_python call 存储过程
- 简单记录一下开机自启动软件失效,无法自启的问题
- 数据结构及计算机网络
- 为什么要推进STEAM教育?