oracle数据库(关系型数据库1)
来源:互联网 发布:ardupilot 源码 分析 编辑:程序博客网 时间:2024/06/12 19:15
一.概念。 1.RDBMS(关系型数据库管理系统)
(1)对象或者关系的集合。
(2)基于关系的操作集合。
(3)因数据精确性和一致性而带来的数据完整性。
2.每个表由行和列组成
3.可以通过SQL来操作表中的数据。
4.表中的每一行数据可通过主键即primary key来唯一标识。(联合主键)
5.表与表之间可通过外键即foreign key来关联。
6.关系型数据库中的对象:
(1)表:存储的基本单元,由行和列组成。
(2)视图:由一个或多个表的数据子集的一逻辑表示。
(3)序列:用来产生主键。
(4)索引:提高查询速度。
(5)同义词:一个对象的别名。
(6)编程单元:包括过程、函数或包以及pl或者sql中的声明。
7.oracle的RDBMS也成为Oracle的服务器
oracle:
(1)一个存储数据的地方。
(2)能快速的获得数据。
(3)数据库安全性。
(4)分布式数据库。
(5)客户端和服务器的配置。
二.简化版常见SQL语句。 (1)l 命令可以查看当前缓存的SQL命令。
(2)/ 可以查看缓存的SQL查询结果
(3)修改日期语言设置:
alter session set nls_date_language=english;退出后又恢复
(4)清屏:clear scre;
(5)执行某个sql文件:@或者start文件地址
(6)查看表结构:desc 表名
(7)1.数据定义语言Data definition language (DDL)
create(创建表)
alert(修改表,像一些约束等)
drop(删除表、约束、用户)
rename(改名)
(8)2.数据操作语句Data manipulation
language(DML)
insert(插入数据)
update(修改)
delete(删除)
(9).取值语句 select
1.查询当前系统时间select sysdate from dual
2.查询所有表 select table_name from user_tables(oracle自带的)
(10).事物控制语句 Transaction control
commit(提交事务)
rollback(回滚事务)
savepoint(事物回滚点)**
(11).数据控制语句Data control language(DCL)
grant(分配权限)
revoke(回收权限)
SQL> select table_name from user_tables;
三.SELECT语句(查询) 1.select语法(不区分大小写):
select [distinct(不重复的记录)] {*,列名[别名],…} from 表名或者视图;
select后面可以跟列名、列的别名、通配符*(表示所有的列)
from子句后面可以跟上要查找的表名或者视图的名字
distinct:查找不重复的记录。修改列宽度(col id(列名) format 9999(显示四位数据);
例如:有两列,DISTINCT 列1,列2 :列1可以重复,但是列2不能重复。
col name format a20;显示20位字符的长度)
SQL> select * from users;
数字列值靠右对齐,字符串日期靠左对齐。
(1)算术表达式
查找的列可使用加减乘除进行计算
只能对两种数据类型:数字和日期
先乘除后加减,从左到右,可以通过括号改变优先级。
SELECT last_name,salary*12,commission_pct from s_emp;
(2)null值
在加减乘除中,如果某一项为null,那么结果为null
null表示不可用、为赋值、未知的或者不适用的,和零或者空格是不同的。
SELECT last_name,title,salary*commission_pct/100 COMM(salary*commission_pct/100的别名) from s_emp;
采用nvl()函数将null转换成某个数值
nvl(列名,’字符串’)或者nvl(列名,数值)
SELECT last_name,title,salary*nvl(commission_pct,0)/100 COMM(salary*commission_pct/100的别名) from s_emp;
例如:nvl(start_date,'01_JAN_95'); nvl(title,'No Title Yet'); nvl(salary,1000);
(3)列的别名
一个别名里包含了空格、特殊的字符或者要区分大小写,那就使用双引号。
||:代表字符串的链接
例如
SELECT first_name||last_name "Employees" from s_emp; SELECT first_name||''||last_name||','||title "Employees" from s_emp; //输出结果:Carmen Velasqueaz,President
四.排序和条件查询 1.order by:
SELECT [DISTINCT]{*,column[alias],…} from table [order by {column,expr,alias}[ASC|DESC]];
(1)order by子句在整个SELECT语句中的最后
(2)order by后面可以是列名、列的别名、表达式、列出现在SELECT关键字后列的顺序号。
(3)order by后面可以跟多列,表示先按第一列排序,如第一列有相同值再按第二列排序,如第二列有相同值,再按第三列排序…
(4)ASC表升序,可以省略,DESC表降序。
(5)NULL(空)值永远最大。
SELECT last_name EMPLOYEE,start_date from s_emp order by EMPLOYEE(别名) DESC;SELECT last_name EMPLOYEE,start_date from s_emp order by 2(代表序列号为2的start_date)等价于SELECT last_name EMPLOYEE,start_date from s_emp order by start_date;SELECT last_name EMPLOYEE,dept_id,salary from s_emp order by dept_id,salary DESC;//dept_id按升序排列,salary按降序排列
2.where子句
select [distinct]{*,column[alias],…}
from table
[where condition(s)]
[order by {column,expr,alias}[ASC|DESC]];
(1)对SQL语句返回的数据集进行筛选。
(2)紧跟在from子句后
(3)由一至多个限定条件组成,限定条件由表达式、字符串和字面值组成。
(4)所有字符串和日期要用单引号括起来,数值不需要单引号。
(5)日期在Oracle里有特定的格式,‘DD-MON-YY’(具体看日期的显示格式),否则作为一个字符串
注意:select last_name,dept_id,salary from s_emp where dept_id = 42;
和select last_name,dept_id,salary from s_emp where 42= dept_id ;两种写法都可以。
(6)where子句中的运算符
1.比较运算符:
=,>,>=,<,<=,!=,<>,^=
between…and…、in(list)、like、is null
not between、not in、not like、is not null
(1)between…and(包括起止值):
select first_name,last_name,start_date from s_emp where start_date between '09-may-91' and '17-jur-01';
(2)in(限定内容):
select id,name,region_id from s_dept where region_id in (1,3);//指定范围是1和3(in后边可以有空格也可以没有)
(3)模糊查询(通过like关键字和通配符
select last_name from s_emp where last_name like 'M%';//M开头的所有last_name(只能以M开头的,m开头的查不出来,可以将所有m转换成M)select last_name,start_date from s_emp where start_date like '%91';//%:0至多个字符select last_name from s_emp where last_name like '\_a%' escape '\';//_:单个字符 escape '\':表示\是转义字符;匹配字符就是以_a开头,后边匹配0或者多个字符。
(4)is null(查找某一列是否为空):
select id,name,credit_rating from s_customer where sales_rep_id is null;//不能使用=运算符
2.逻辑运算符
not and or(优先级not>and>or)可以通过括号改变优先级
(1)and(同时满足两个条件):
select last_name,salary,dept_id,title from s_emp where dept_id = 41 and title = 'Stock Clerk';
(2)or(满足一个条件):
select last_name,salary,dept_id,title from s_emp where dept_id=41 or title='Stock Clerk';
(3)and和or的优先级:
select last_name,salary,dept_id from s_emp where salary>=1000 and dept_id=44 or dept_id=42;//查询结果是编号是44号的员工,工资必须大于1000,或者是编号是22号,工资没有要求。
五.单行函数 1.函数简介:
(1)Oracle数据库中的函数:
a.对数据进行计算
b.数据统计
c.修改数据的显示
d.数据类型转换
(2)函数主要分为两类:
a.singlerow(单行函数)
b.multirow(多行函数也叫组函数,group函数)
(3)单行函数
字符函数、数值函数、日期函数、转换函数
(4)单行函数的使用
a.作用在单行(单条记录)上
b.每行都可返回一个结果
c.可操作数据项
d.接受参数并返回结果
e.修改数据类型
f.可以嵌套
function_name(column|expression,[arg1,arg2,…])
2.字符函数
(1)lower:转换成小写
(2)upper:转换成大写
(3)initcap:首字母变成大写,其余都小写
(4)concat:字符串的连接
(5)substr(str、start、end):字符串的截取
(6)length:求字符串的长度
(7)nvl:空值置换
select lower('YYYYYeTTy') from dual;//yyyyyetty select upper('YYYYYeTTy') from dual;//YYYYYETTY select initcap('yyYYYeTTy') from dual;//Yyyyyetty select concat('hello','sql') from dual;//hellosql select substr('hellosql',1,5) from dual;//从1开始截取其后5位(编号从1开始而不是0)hello select length('hellosql') from dual;//8
//查找last_name=patel,不区分大小写 select first_name,last_name from s_emp where upper(last_name)='PATEL';//统一将last_name这一列的数据转换成大写
` `3.字符函数
(1)round:四舍五入
(2)trunc:截取,不进行四舍五入
(3)mod:取余
round(49.923,2);//45.92,2代表精确到小数点以后的第二位 round(49.923,0);//46 round(49.923);//46 round(49.923,-1);//50,精确到整数位的十位 trunc(45.923,2);//45.92,截取到小数后的两位 trunc(45.923);//45 trunc(45.923,-1);//40,截取到十位 mod(1600,300)//100,取余
4.日期函数
(1)months_between(date1,date2):两个日期之间的月数
(2)add_months(date,n):在指定日期上增加月数(也可减少,将n设置为负数就可以)
(3)next_day(date,’friday’):指定日期的下一天(如:下一个星期五)是哪天
(4)last_day(data):指定日期的最后一天。
(5)round(date,’year’):对指定日期进行四舍五入,逢16日往月份进一,逢七月往年份进一。
(6)trunc(date,’year’):对指定日期进行截取(把小时分秒截取掉,从0开始)
在Oracle中日期包括世纪、年、月、日、小时、分、秒、毫秒(timestemp)。
默认显示DD-MON-YY
函数SYSDATE、SYSTIMESTAMP(更加精细)可以返回系统时间
通过dual表可以使用SYSDATE和SYSTIMESTAMP来查看系统时间
select months_between('01-SEP-95','11-JAN-94') from dual;//19.6774194 select add_months('11-JAN-94',6) from dual;//'11-JUL-94' select next_day('01-SEP-95','friday') from dual;//'08-SEP-95' select last_day('01-SEP-95') from dual;//'30-SEP-95' select round(to_date('25-MAY-95'),'MONTH') from dual;//01-JUN-95 select round(to_date('25-MAY-95'),'YEAR') from dual;//01-JAN-95 select trunc(to_date('25-MAY-95'),'MONTH') from dual;//01-MAY-95 select trunc(to_date('25-MAY-95'),'YEAR') from dual;//01-JAN-95 select trunc(to_date('25-MAY-95')) from dual;//25-MAY-95:默认按日截取 //to_char()将date类型按特定的格式转换成字符类型。 select trunc(to_char(to_date('25-MAY-95')),'DD-MON-YY hh24:mi:ss') from dual; //25-MAY-95 00:00:00 //to_date():将字符串类型的日期转换成日期类型
//查询最近一周购买的图书 select * from book where book_date between trunc(sysdate-7) and sysdate; //查询本周日归还的图书 select * from book where trunc(res_date)=trunc(next_day(sysdate,'SUNDAY'));//sysdate包含小时分秒 //查询最近一个月购买的图书 select * from book where book_date between trunc(add_months(sysdate,-1)) and sysdate; //查询本周购买的图书 select * from book where book_date between trunc(next_day(sysdate,'SUNDAY')-7) and sysdate;
5.转换函数
(1)to_char():将日期转换成字符串
to_char(date,’fmt’);第一个参数是日期,第二个参数是转换成的格式。
1.使用format制定日期的格式
2.使用fm来去除空格或者0
3.使用逗号分隔。
日期格式模型的元素:(可大写可小写)
1.year:英文年份
2.month:英文月份
3.mon:英文月份的缩写
4.day:星期几的英文单词
5.DY:星期几的前三个字母
6.ddsp:英文拼写的天
7.ddspth:英文拼写的第几天
8.d:一个星期的数字表示,星期天为1,星期六为7
9.dd:一个月的第几天
10.ddd:一年的第几天
11.yyyy:四位数的年
12.mm:二位数的月
13.hh24:24小时制 mi:分钟 ss:秒
14.AM:上午 PM:下午
注:YY显示两位的年,后两位。YYYY显示四位的年。所以,尽量用四位的年。
select to_char('2-mar-2007') from dual;//2-mar-2007(本身就是字符串日期,所以大小写不变) select to_char(to_date('2-mar-2007')) from dual;//2-MAR-2007(大写,将字符串日期转换成了日期型,所以输出的是大写) select to_char('2-mar-2007','year-month-day') from dual;//2-mar-2007(小写) select to_char('2-mar-2007','YEAR-MONTH-DAY') from dual;//2-MAR-2007(大写)
RR日期格式:
RR:0-49代表本世纪,50及以上代表上世纪(默认)。
YY:代表和当前时间所处的同一个世纪。
insert t_date into(1,to_date('23-FEB-90',dd-mm-rr));//1990-02-23 insert t_date into(1,to_date('23-FEB-17',dd-mm-rr));//2017-02-23 insert t_date into(1,to_date('23-FEB-17',dd-mm-yy));//2017-02-23 //当不指定RR或者YY,默认为RR格式
select last_name,start_date('fmddspth "of" MONTH YYYY fmHH24:MI:SS AM') HIREDATE from s_emp where start_date like '%91';
(2)to_char():将数值转换成字符串
to_char(number,’fmt’);
0:强制显示0来填充未满数据位数(实际的位数超出设定的位数,会报错)
9:代表一个数字 (一般使用这种方式,位数不满不会补)
$:设置一个浮点型的美元符号
L:使用本地货币符号
select 'Order'||to_char(id)|| 'was filled for a total of'|| to_char(total,'fm$9,999,999') from s_ord where date_shipped='21-SEP-92'; // Order 107 was filled for a total of $142,171
(3)to_number():将一个数值字符串转换成数值
to_number(char);
(4)to_date():将一个日期字符串转换成日期
to_date(char,’fmt’);
select to_number('23233') from dual;//23233 select to_date('10-september-1992','dd-month-yyyy') from dual;//10-sep-1992
(5)函数嵌套(从里往外执行)
- oracle数据库(关系型数据库1)
- Oracle数据库(关系型数据库2)
- Oracle数据库(关系型数据库3)
- 【Oracle数据库】关系型数据库的基本理论
- 数据库基础(1)关系型数据库
- Oracle 关系数据库
- oracle关系数据库模型
- 第一章 Oracle关系数据库
- oracle数据库----关系视图
- 数据库-关系型数据库
- ORACLE 学习一:关系型数据库
- Oracle-第一章 认识关系型数据库
- 【数据库】三大关系型数据库对比Oracle,MySQL,SQLServer
- 关系型数据库 (数据库类型)
- 数据库(二。关系型数据库)
- jdbc操作关系数据库(oracle)
- Oracle查询数据库主外键关系
- 数据库与关系型数据库
- CS Academy Round #30 (Div. 2 only) C.Constant Sum(树状数组,区间修改,单点查询模板)
- 关于dtd的简单内容
- 在Controller层无法注入Service层的对象
- Assets的使用和SoundPool播放音频
- Flask: 路由
- oracle数据库(关系型数据库1)
- jQuery的属性与样式之切换样式.toggleClass()
- eclipse 安装maven插件报错
- 文章标题
- POJ 1173 Bar Codes 笔记
- ubuntu安装搜狗输入法
- C++中vector总结
- 【开发手札】关于折腾esp8266的一些体会
- Array对象方法