日期:2019/5/16
内容:Oracle 11g Express;
TODO-LIST:
- 索引操作
一、基本操作
- 建表
- 修改列属性
把NUMBER(38)改为NUMBER(3)
- 显示用户scott所有的表
- 显示表内容
二、入门操作
- 定义外码
- 修改记录
三、修改操作
基本格式:UPDATE <table> set <col>=<value> [where condition]
- 把"sinkinben"的COMM修改为ALLEN的COMM
- 把"sinkinben"的(SAL, COMM, DEPTNO)修改为ALLEN的(SAL, COMM, DEPTNO)
解法1:
解法2:
四、查询操作
- 求出生日期
- 大小写输出
- 指定列的别名
- 去重(即Π操作)
- 条件查询
s
- 排序(默认升序)
(先sdept降序,sdept同则sage升序)
五、函数操作
- 查询学生总人数
- 查询选了课的人数(需要去重)
- 计算3号课程的平均分
- 查询3号课程最高分
- 查询201215121的选课的总学分
先看看201215121选了课的信息
总学分
六、分组Group By
- 查询各个课程的选课人数
- 查询选修>=2门课的学号
七、Scott账户练习题
- 计算COMM为null/not null的人数
- 每种职业的平均工资
- 平均工资>=2000的职业
- 找出research部门的empno和ename
where加上条件dept.dname = "RESEARCH"
join解法
- 找各人的上司(MGR的name)
join解法
- 连接示例
内连接:不保留任何悬浮元组。(不写left,right,full,inner则默认是inner)
外连接:分为left,right,full
左外连接
右外连接
- 嵌套查询示例
查找RESEARCH部门的ename
工资最高的ename
- 计算每个人一年的工资(包括月薪*12和佣金comm)
一种错误解法:某些人的comm为null,任何分量+null结果恒为null
解决办法:当comm为null则12*sal+0。
NVL(X,Y)函数:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
- 找SAL前三
- 错误解法1
select sal from emp where rownum between 1 and 3 order by desc;
错误原因:此语句先选出前3行再排序
- 半正确解法:先排序,再选前3,利用select子句
在最大值5000有多个的情况下,需要在第2行加distinct
- 完全正确解法:添加一个SAL=5000的记录,找SAL前三的ENAME
- 找SAL第二的ENAME
基本配置
- 调整显示宽度
- 修改为全英文环境
ALTER SESSION SET NLS_LANGUAGE=american;
- 显示数据库实例名字
select INSTANCE_NAME from v$instance;