我的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语句补充的主要内容,如果未能解决你的问题,请参考以下文章