我的Oracle学习笔记----- select语句补充

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的Oracle学习笔记----- select语句补充相关的知识,希望对你有一定的参考价值。

一、多表查询

  多表查询是指从多个有关联的表中查询数据,其语法与单表查询类似。一般来说,多表查询的表要用连接联系起来,如果没连接,则查询结果是这多个查询表的笛卡尔积(注释1)。

 

模拟查询雇员姓名和所在部门名称:

  select [雇员姓名],[部门名称] from [雇员表] a,scott,[部门表] b where a.[部门编号]=b.[部门编号];

上例中,为每一个查询表指定了别名,便于SQL语句的书写。

  

模拟查询在”sales“部门工作的雇员其雇员姓名

  select [雇员姓名] from [雇员表] a,scott,[部门表] b where a.[部门编号]=b.[部门编号] AND b.[部门名称]=‘sales’;

 

二、嵌套查询

  嵌套查询指一个select查询中包含一个以上的子查询,所谓的子查询,是指嵌套在另一个select、insert、update或delete语句中的select查询语句。子查询的语法与select语法类似,但有所限制,如子查询不能含有order by和into等关键字。

 

模拟查询”sales“部门的雇员姓名:

  select [雇员姓名] from [雇员表] where [部门编号] in(select [部门编号] from [部门表] where [部门名称]=‘sales‘);

其中,in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。

 

模拟查询在雇员表中比平均工资高的雇员名单:

  select [雇员姓名] from [雇员表] where [雇员工资] >(select AVG([雇员工资]) from [雇员表]);

上例中的AVG函数用来计算平均工资。

 

三、函数查询

  SELECT查询语句可以使用函数,下面列出了SQL语句中常用的一些函数。

1)集合函数

MIN    计算最小值

MAX    计算最大值

AVG    计算平均值

SUM    求和

COUNT   计算符合条件的记录总数

 

2)数值函数

ABS(X)    计算X的绝对值

MOD(X,Y)   计算X除以Y的余数

CEIL(X)    计算大于等于参数X的最小整数

FLOOR(X)  计算小于等于参数X的最大整数

POWER(X,Y)计算以X为底的Y次幂

EXP(X)    计算e的X次幂(e=2.71828183....)

SQRT(X)   计算X的平分根

LN(X)      计算X的自然对数

ROUND(X)  四舍五入

SIN(X)    计算X的正弦值

COS(X)    计算X的余弦值

 

3)字符串函数

LENGTH(S)        获取字符串S的长度

CONCAT(S1,S2)      字符串连接,返回将S2添加到S1后面形成的字符串

LOWER(S)        将字符串S全部大写

UPPER(S)         将字符串S全部小写

SUBSTER(S,m,n)    截取子串,返回S中从m位置开始,长度为n的子串

REPLACE(S1,S2,S3)    将字符串S1中出现的S2都替换成S3,然后返回剩余的字符串,S3默认NULL,则所有S1中的S2字符都被删除

INSTR(S,c)         获取字符c在字符串S中首次出现的位置

 

4)日期函数

SYSDATE          获取日期和时间

MONTHS_BETWEEN     获取两个日期之间的月份间隔

ADD_MONTHS        在指定日期上添加月份

NEXT_DAY          指定日期的下一天

LAST_DAY          本月最后一天 

 

5)类型转换函数

TO_NUMBER    转化为数值类型

TO_DATE      转化为日期类型

TO_CHAR      转化为字符类型

HEX_TO_RAW    十六进制转二进制

RAW_TO_HEX    二进制转十六进制

 

模拟查询雇员的总人数:

  select COUNT(*) from [雇员表];

 

查询2个日期之间的月份间隔:

  select MONTHS_BETWEEN(TO_DATE(‘2010/01/01‘‘yyyy/mm/dd‘),TO_DATE(‘2011/05/20‘‘yyyy/mm/dd‘)) as "月份间隔" from dual;

dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。

常用日期数据格式(该段为摘抄)

 

Y或YY或YYY 年的最后一位,两位或三位 Select to_char(sysdate,’YYY’) from dual; 002表示2002年 

SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate,’SYEAR’) from dual; -1112表示公元前111 2年 

Q 季度,1~3月为第一季度 Select to_char(sysdate,’Q’) from dual; 2表示第二季度① 

MM 月份数 Select to_char(sysdate,’MM’) from dual; 12表示12月 

RM 月份的罗马表示 Select to_char(sysdate,’RM’) from dual; IV表示4月 

Month 用9个字符长度表示的月份名 Select to_char(sysdate,’Month’) from dual; May后跟6个空格表示5月 

WW 当年第几周 Select to_char(sysdate,’WW’) from dual; 24表示2002年6月13日为第24周 

W 本月第几周 Select to_char(sysdate,’W’) from dual; 2002年10月1日为第1周 

DDD 当年第几, 1月1日为001,2月1日为032 Select to_char(sysdate,’DDD’) from dual; 363 2002年1 2月2 9日为第363天 

DD 当月第几天 Select to_char(sysdate,’DD’) from dual; 04 10月4日为第4天 

D 周内第几天 Select to_char(sysdate,’D’) from dual; 5 2002年3月14日为星期一 

DY 周内第几天缩写 Select to_char(sysdate,’DY’) from dual; SUN 2002年3月24日为星期天 

HH或HH12 12进制小时数 Select to_char(sysdate,’HH’) from dual; 02 午夜2点过8分为02 

HH24 24小时制 Select to_char(sysdate,’HH24’) from dual; 14 下午2点08分为14 

MI 分钟数(0~59) Select to_char(sysdate,’MI’) from dual; 17下午4点17分 

SS 秒数(0~59) Select to_char(sysdate,’SS’) from dual; 22 11点3分22秒 

提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。 

 


注释1----笛卡尔积:

在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。A表示所有声母的集合,B表示所有韵母的集合,那么A和B的笛卡尔积就为所有可能的汉字全拼。


 

以上是关于我的Oracle学习笔记----- select语句补充的主要内容,如果未能解决你的问题,请参考以下文章

oracle 学习笔记

Oracle学习笔记

Oracle学习笔记

Oracle学习笔记

Oracle学习笔记—— 游标

Oracle数据库学习笔记