Oracle第六课
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle第六课,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3873字,纯文字阅读大概需要6分钟。
内容图文
![Oracle第六课](/upload/InfoBanner/zyjiaocheng/866/62ce9b1d2e5a498482fe633427efedaa.jpg)
Oracle第六课
一、第五课课后作业讲解
-
SQL优化时,对于索引的数据类型是有要求的,比如列的类型是char型,查询条件就必须是char型,如果是数字型,则索引失效
age列建了索引,它是char型,where age>18,此处18是数字,索引失效
Java中的age必然是int型,number
-
表结构不合理
-
创建班级表
CREATE TABLE t_clazz(ID NUMBER(10) PRIMARY KEY,
NAME VARCHAR(20) NOT NULL); -
创建学生表
CREATE TABLE t_student(ID NUMBER(12) PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
sex NUMBER(1) CHECK(sex=1 OR sex = 0) NOT NULL,
age NUMBER(2) NOT NULL,
clazz NUMBER(10) REFERENCES t_clazz(ID)); -
两表连接的方式
-- 内连接
SELECT s.*,c.* FROM t_student s INNER JOIN t_clazz c ON s.clazz=c.id;
SELECT s.id SID,s.name sname,sex,age,clazz,c.name cname FROM t_student s,t_clazz c WHERE s.clazz=c.id;
-- 左外连接
SELECT s.id SID,s.name sname,sex,age,clazz,c.name cname FROM t_student s LEFT OUTER JOIN t_clazz c ON s.clazz=c.id;
-- 右外连接
SELECT s.id SID,s.name sname,sex,age,clazz,c.name cname FROM t_student s RIGHT OUTER JOIN t_clazz c ON s.clazz=c.id;
-- 全连接
SELECT s.id SID,s.name sname,sex,age,clazz,c.name cname FROM t_student s FULL JOIN t_clazz c ON s.clazz=c.id; -
在oracle中特有的通俗的写法
-- 内连接
select xx from a,b where a.id=b.id;
-- 右连接,主表是不带加号的表
-- 右连接
select xx from a,b where a.id(+)=b.id
-- 左连接
select xx from a,b where a.id =b.id(+);
二、函数
-
虚表:dual,做测试用的表
-
函数
-
单行函数
-
字符函数:ascii(x)
SELECT ASCII('a') FROM dual;
-
拼接字符串:concat('a','b')
SELECT CONCAT('a','b'),'a'||'b' FROM dual;
-
找字符串中某个字符的位置,位置从1开始
-- 找字符c的位置
SELECT INSTR('abcdefg','c') FROM dual;
-- 从第4个字符开始找
SELECT INSTR('abcdefgc','c',4) FROM dual;
-- 从第一个开始找,找第一个出现的c
SELECT INSTR('abcdefgc','c',1,2) FROM dual; -
返回字符串的长度:length
SELECT LENGTH('aaaa') FROM dual;
-
将字符全转换成小写或大写
-- 将字符全转换成小写,或大写
SELECT LENGTH('aaaa'),LOWER('aBcD'),UPPER('aBcD') FROM dual; -
替换:replace
-- 替换
SELECT REPLACE('abc123','1','a') FROM dual; -
截取字符串:replace
-- 截取字符串
-- 从1开始截取3个
SELECT SUBSTR('abcdef',1,3) FROM dual; -
去掉左边的字符(默认是空格):LTRIM,去掉右边的RTRIM,去掉两边的TRIM
SELECT LTRIM(' abc '),rTRIM(' abc ')
,TRIM(' abc '),TRIM('1' FROM '1111a1b1c11') FROM dual; -
数字函数
-- 取绝对值
SELECT ABS(-1) FROM dual;
-- 取大于或等于x的最小值
SELECT CEIL(-1.1),CEIL(1.9) FROM dual;
-- 取小于或等于x的最大值
SELECT FLOOR(-1.1),FLOOR(1.2) FROM dual;
-- 四舍五入,第二个值用来指定保留几位小数
SELECT ROUND(3.45),ROUND(3.45,1) FROM dual;
-- 直接截断,没有y的话取整,不会四舍五入
SELECT TRUNC(7.25),TRUNC(7.25,1) FROM dual;
-- 取余
SELECT MOD(5,2) FROM dual; -
日期函数
-- 当前日期
SELECT SYSDATE FROM dual;
-- 增加一月
SELECT add_months(SYSDATE,1) FROM dual;
-- 返回data所在月的最后一天的日期
SELECT last_day(SYSDATE) FROM dual;
-- 四舍五入日期
SELECT ROUND(SYSDATE),ROUND(SYSDATE,'month'),ROUND(SYSDATE,'year') FROM dual;
-- 月份差
SELECT e.*,months_between(SYSDATE,hiredate),trunc(months_between(SYSDATE,hiredate)) FROM emp e WHERE empno IN(7369,7499);
-- 当前日期的下个星期一是几号
SELECT next_day(SYSDATE,'星期一') FROM dual;
-- 从员工表中提取员工的入职月份
SELECT EXTRACT(MONTH FROM hiredate) FROM emp;
-- 截断:trunc
SELECT TRUNC(SYSDATE,'day') FROM dual; -
应用
-- 工作年限
SELECT trunc(months_between(SYSDATE,hiredate)) FROM emp;
-- 找到工作年限最长的员工
SELECT t.empno,t.maxs_date FROM (SELECT e.*,TRUNC(months_between(SYSDATE,hiredate)) maxs_date FROM emp e) t WHERE t.maxs_date IS NOT NULL AND ROWNUM = 1;
-- 给工作年限超过两年的员工sal增加100元
SELECT t.*,t.sal+100 sal2 FROM (SELECT e.*,trunc(months_between(SYSDATE,hiredate)/12) work_YEAR FROM emp e WHERE hiredate IS NOT NULL) t WHERE t.work_YEAR>2;
-- sql语句执行:先from,再where,再select -
转换函数
-- 索引类型如果不一致会失效,age列是number,age=to_number('1')
-- 日期到字符
SELECT to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM dual;
-- 字符到日期
SELECT to_date('2021-01-20 12:08:28','yyyy-mm-dd hh24:mi:ss') FROM dual;
-- 字符到数字
SELECT to_number('142') FROM dual;
-- 数字到字符
SELECT 1,to_char(1) FROM dual;
-
-
内容总结
以上是互联网集市为您收集整理的Oracle第六课全部内容,希望文章能够帮你解决Oracle第六课所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。