一.引言
1.为什么要学习数据库?(对数据进行持久化(persistence)存储)
-变量,数组,对象,集合
缺点:不能长久保存数据
-文件,通过io读写
缺点:无法控制并发,效率低
-数据库解决上述问题
存储大量数据,长久保存,支持并发,数据安全,访问简单
2.数据库的分类
-关系型数据库:Oracle | DB2 | MySql |SqlSever
-对象型数据库: Object Database
-非关系型数据库:Redis | mongDB
二.数据库的安装
二.Oracle数据的安装
计算名配置:C:oraclexeapporacleproduct10.2.0serverNETWORKADMIN
OracleServiceXE:Oracle数据库的核心服务
OracleXETNSListener:Oracle数据库的对外服务
-
使用数据库
-
sqlplus--基于Dos界面
-
i-sqlplus--基于浏览器
-
PLSql--第三方工具
-
三.Oracle数据库的相关概念
-
Oracle数据库:关系型数据库管理系统---RDBMS
-
数据库:存储和管理数据(database)--DB
-
用户:hr
-
表:table,真正存储和管理数据
-
行: row,代表数据库的一条数据,对象(Object),实体(entity),记录(record)
-
列:column,代表所有数据的一个属性,单元格(一个对象的一个属性),字段(Field),键(Key)
-
主键:primary key,一行数据的唯一标识
-
四.基本查询
1.简单查询
--(双短杠表示单行注释)
/**/(多行注释)
--查询表内所有信息
select * from employees;
/*
常见错误
表或者视图不存在:表名写错了
未找到要求的FROM关键字,无效的sql语句:查询结构不完整
*/
/*
不建议使用*(星号)
使用星号的时候
1.项匹配成每一列的名字,然后再查询
2.会找出无用数据,降低查询效率
3.可读性比较差
*/
--开发使用查询所有列名称
select Employee_id,First_name,Last_name,Email,phone_number from Employees;
--查询部分列信息
--查询工号 名字 工资信息
select employee_id,first_name,salary from employees;
--对列数据进行运算 + -
select employee_id,salary*12 from employees;
--给列起别名 (as可以省略 文字之间有空格需要用双引号引起来)
select employee_id as 编号,salary as 工资 from employees;
select salary "工 资" from employees
--链接多列 ||
--查询员工全名
select first_name||'.'||last_name from employees;
注:如果需要连接字面值(字符常量),需要使用‘字符串常量’
2.排序
--基本语法
select...from 表名 order by 排序条件
--按照工资降序查询员工信息
select * from employees order by salary desc;
注解:asc(默认)升序排序 desc降序排序
--按照工资升序查询员工信息,工资相同按照入职时间排序
select * from employees order by salary,hire_datee;
注解:如果order by后有两个字段,表示如果按照第一个个字段排序完成后,第一个字段相同
的情况下,按照第二个字段进行排
3.条件查询
基础语法
select ...from...where...
原理:将基表加入缓存,然后使用基表的么欸一条数据与过滤做运算,满足显示,不满足删除
比较查询 >< >= <= != =
--查询工号为105的员工信息 select * from employees where employee_id=105;
多条件查询and or
--查询部门编号为80且工资大于12000的员工信息 select * from employees where department_id =80 and salary>12000; --查询部门编号为60,80,90 select * from employees department_id =60 or department_id =80 or department_id =90;
空值判断 is [not] null
--查询部门经理为空的员工信息 select * from mployees where manager_id is null; --提成不为空的员工信息
select * from employees where commission_pct is not null
区间处理[not] between and 闭区间
--查询工资大于8000小于10000的员工
select * from employees where salary between 8000 and 10000;
枚举查询[not] in
--查询部门编号为60,80,90的员工 select * from employees where salary in(60,80,90);
模糊查询[not]like
--查询姓氏以"K"的员工信息 --%: 表示任意字符0—n select *from employees where last_name like 'K%'; -- _:表示单个字符 select * from employees where last_name like '___k';
分支查询
--显示数据工资大于10000为高收入,工资>6000为中等收入,工资<=6000为低等工资 select employee_id,first_name,salary, case when from employees;