1、数据库的介绍
1.1、数据库简介
1.1.1、数据处理技术的发展
人工管理阶段: 20世纪50年代中期之前
以科学计算为主
批处理方式
文件系统阶段: 20世纪50年代末~60年代中后期
缺点: 数据冗余
数据不一致
数据联系弱
数据库阶段: 20世纪60年代末~至今
大三标志性:
1968年,IBM公司推出了 IMS
1968年,DBTG给出了一系列报告,给出了数据库领域的标准和规范
1970年,IBM公司的研究员,E.F.Codd 发表了大量论文,首次提出关系性数据库的概念。
特点:
采用复杂的结构化的数据模型
数据库系统为用户提供了方便的用户接口
数据库控制功能:并发控制、数据库恢复、数据的完整性(准确)、安全性。
系统更为灵活
信息处理方式不再以程序为中心,而是以数据为中心。
1.1.2、数据库技术的几个术语
数据(Data):数据库中的存储对象,包括文字、图形、视频、音频
数据库(DataBase):是长期存储在计算机内、有组织、可共享的大量数据的集合。
数据库管理系统(DataBase Manager System): 处于用户和操作系统之间的一层数据库软件
科学的组织和存储数据,高效的获得和维护数据。
数据库系统(DBS):是指在计算机系统中引入数据库后的系统构成的。
由数据库、数据库管理系统(及其开发工具)、应用系统和数据库管理员(DBA)构成。
1.1.3、关系型数据库
用二维表保存数据的数据库
表头、行、列、字段、字段的值
1.2、主流的关系型数据库产品
商业型
Oracle Oracle(甲骨文) 10g
DB2 IBM
SQL server 微软
开源:
Mysql Oracle
1.3、SQL语言
SQL(Structured Query Language):结构化查询语句
SQL是在关系型数据库上执行数据操作、检索以及维护使用的标准语言,可以用来查询数据、操作数据、定义数据,控制数据等。
SQL分为:
DQL(数据查询语句):select
用来从数据库中查询需要的数据。使用最广泛、语法最复杂的语句。
DML(数据操作语句):insert delete update
用来改变数据库表中的数据。
DEL(数据定义语句):create drop alter
用来创建、删除、更改数据库对象
TCL(事务控制语句):commit rollback savepoint
用来维护数据库中数据的一致性
DCL(数据控制语句):grant revoke create user
用于执行权限的授予和回收,创建用户等。
1.4、运程登入
1.4.1、开发工具
sqlplus:命令提示符下的工具
Oracle sql developer: 图形化的工具
1.4.2、远程登入的步骤
1)登入服务器
telnet ip
login:
password:
2)登入服务器上的数据库
sqlplus:
enter user-name:
enter password:
成功:
SQL>
1.5、查看表结构
语法:
desc 表名[;] --sqlplus命令
--语法中的[]表示其中的内容是可选项
--查看员工表的表结构
desc s_emp;
SQL> desc s_emp;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(7)
LAST_NAME NOT NULL VARCHAR2(25)
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)
Name:字段名
Null:是否允许为空
NOT NULL:不允许为空
Type:数据类型
NUMBER(p,s) --数值类型
p: 1<=p<=38 默认38 有效位数
s: -84<=s<=127 默认0 精确到小数点后几位
有效位:从左边第一个非0数字开始的位数
s的情况:
s>0:精确到小数点后s位,并进行四舍五入,然后检查有效位是否<=p
s<0:精确到小数点前|s|位,并四舍五入,然后检查有效位是否<=p+|s|
s=0:整数
VARCHAR2(n) --字符串类型 变长字符串 1~4000Bytes 查询效率低,占用空间小 没有默认
CHAR(n) --字符串类型 定长字符串 1~2000Bytes 查询效率高,占用空间大 n默认为1
DATE --日期类型
2、select语句
2.1、三个概念
选择:部分行、全部列
投影:全部行、部分列
表连接:查询的数据来自于多张表时,需要把多张表关联起来,再进行查询。
2.2、select语句
1) 基本查询语句
2) where子句
3) order by子句
4) 单行函数
5) 多表查询
6) 组函数和分组
7) 子查询
3、基本查询语句
select … from …;
3.1、查询一个字段
select 字段名 from 表名;
–列出所有员工的工资
select salary from s_emp;
3.2、查询多个字段
select 字段名1,字段名2,… from 表名;
–查询员工的编号、名字和工资
select id,first_name,salary from s_emp;
3.3、查询表中的所有字段
select 字段列表 from 表名;
字段列表用 * 代替
select * from s_emp;
3.4、表中字段的算数运算 一般指的是数值类型
+ - * /
– 列出员工的年收入
select id,first_name,14*salary + 1000 from s_emp;
3.5、字段或表达式的别名
语法:
字段或表达式[as]别名
–为字段和表达式命名别名
select id,first_name,14*salary+1000 as “year salary” from s_emp;
select id,first_name,14*salary+1000 “year salary” from s_emp;
–使用双引号把别名括起来,就可以使用关键字,别名变为大小写敏感
3.6、oracle中的字符串
3.6.1、字符串的表示方式
使用单引号,比如:’a’、’Hello World!’
3.6.2、字符串的拼接
||–字符串的拼接符号
‘Hello’||’World’
–把员工表中的first_name和last_name拼接起来
select first_name||’ ‘||last_name name from s_emp;
–把员工表中的first_name和last_name拼接起来,中间加入单引号
‘作为SQL中的转意字符
select first_name||””||last_name name from s_emp;
–列出员工的年收入,加上提成
select id,first_name,(14*salary+1000)*(1 + nvl(commission_pct,0)/100) “year salary” from s_emp;
–NULL值出现在表达式中,会造成表达式的结果为NULL。
处理NULL值的函数: nvl
nvl(par1,par2):如果说第一个参数不为空,返回par1;如果第一个参数为空,返回par2。
par1,par2的数据类型可以是任意类型,但是必须相互匹配。
3.8、排重显示
可以使用 distinsct 去掉查询结果集中的重复行
–列出所有的职位
select distinct title from s_emp;
–多列排重
select distinct title,dept_id from s_emp;
4、where子句
4.1、作用
根据条件,从表中筛选数据行。符合条件的行被挑选出来,不符合条件的行被过滤掉。
select 字段列表 from 表名 where 条件;
4.2、数值类型的条件
–列出工资高于1500的员工的编号,名字和工资
select id,first_name,salary from s_emp where salary>1500;
4.3、字符串类型的条件
–列出名字为’Ben’的员工的信息。
select id,first_name,salary from s_emp where first_name = ‘Ben’;
注意:sql中不区分大小写,但是字符串类型的值是区分的。
sql中没有==符号
4.4、oracle中的比较运算符
< >= <= !=(<>、^=)
4.5、sql提供的运算符
4.5.1、表示一个闭区间
字段 between par1 and par2
–列出工资在[1100,1450]范围内的员工的信息
select id,first_name,salary from s_emp where salary between 1100 and 1450;
4.5.2、表示一个列表
字段名 in(值1,值2,…)
–列出部门编号为31 35 41 45 50
select id,first_name,dept_id,salary from s_emp where dept_id in(31,35,41,45,50);
4.5.3、模糊查询
学生名中包含’龙’的学生的信息
like ‘模式’
模式中可以包含通配符:
%:匹配任意长度的任意字符
_:匹配一个任意字符
–列出员工的first_name包含’a’的员工
select id,first_name,salary from s_emp where first_name like ‘_a%’;
–user_tables:数字字典 保存当前用户的所有标的信息,由系统进行管理,用户只有查看的权限
select table_name from user_tables where table_name like ‘%_%’ escape ‘\’;
使用escape制定转意字符
where 字段 like ‘模式’ escape ‘转意字符’
4.5.4、NULL值的判断
–列出领导编号为NULL为员工的信息
select id,first_name,MANAGER_ID from s_emp where MANAGER_ID=NULL;
–NULL的判断不能使用比较运算符。
select id,first_name,manager_id from s_emp where manager_id is NULL;
4.6、sql中的逻辑运算符
与 或 非
and or not
4.6.1、使用逻辑与改写闭区间的案例
select id,first_name,salary from s_emp where salary>1100 and salary<1500;
4.6.2、使用逻辑或改写列表的案例
select id,first_name,salary from s_emp where dept_id=31 or dept_id=35 or dept_id=50;
4.6.3、对立面
<=
< >=
= !=
between par1 and par2 not between par1 and par2
in not in /注意NULL/
like not like
is null is not null
select id,COMMISSION_PCT from s_emp where COMMISSION_PCT is not NULL;
5、order by子句
5.1、order by子句的位置和作用
select 字段列表 from 表名 where 筛选条件… order by 子句;
order by 在一条select语句的最后,对结果集进行排序.
语法:
order by 排序标准 排序方式[,排序标准 排序方式,…]
排序标准值得是用于排序的字段或表达式
其中,排序方式有两种:
asc: 升序 缺省方式
desc: 降序
5.2、对工资进行降序排序,显示id,first_name,salary
select id,first_name,salary from s_emp where 1=1 order by salary desc;
5.3、多列排序
select id,first_name,salary from s_emp where 1=1 order by salary desc,id;
5.4、排序时NULL处理
select id,first_name,salary from s_emp where 1=1 order by manager_id;
排序时,默认把NULL值作为最大值处理。