数据库第七周练习
Q1 在学生选修表 SC 与课程表 C 放置一些数据,写一条 SQL 求出选修了 C 表所列全部课程 的学生名单
思想:选出学生选课数等于总课程数
1234567select * from s where S# in(select S# from sc group by S#having count(*) = ( /*该学生的选修的课程门数 = 所有课程的门数*/select count(*) from c));
Q2在 SC 表中加入大量数据,然后用 pivot 函数将它转为宽表 SCwide。再用 unpivot 函数将 SCwide 转为窄表
1234567create table SCwide asselect * from scpivot(sum(g)for C# in ('C1' C1,'C2' C2,'C3' C3,'C4' C4,'C5' C5));
12345select * from scwideunpivot(g for C# in (C1,C2,C3,C4,C5))
Q3用 1 条 SQL 语句建立以下统计表格,分 ...
SQL书写规范
一、SQL 书写规范
1、
语句中出现的所有表名、字段名全部小写,系统保留字、内置函数名、Sql
保留字大写。
2、 连接符
or、in、and、以及=、=等前后加上一个空格。
3、 对较为复杂的 sql
语句加上注释,说明算法、功能。
注释风格:注释单独成行、放在语句前面。
(1) 应对不易理解的分支条件表达式加注释;
(2) 对重要的计算应说明其功能;
(3)
过长的函数实现,应将其语句按实现的功能分段加以概括性说明;
(4) 每条 SQL
语句均应有注释说明(表名、字段名)。
(5)
常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选)
(6) 可采用单行/多行注释。(-- 或 /* */ 方式)
4、 SQL 语句的缩进风格
(1) 一行有多列,超过 80
个字符时,基于列对齐原则,采用下行缩进
(2) where
子句书写时,每个条件占一行,语句令起一行时,以保留字或连接符开始,连接符右对齐。
5、 多表连接时,使用表的别名来引用列。
6、
供别的文件或函数调用的函数,绝不应使用全局变量交换数据;
7、
查找数据库表或视图时,只能取出确实需要的那些字段, ...
数据库第六周练习
1.整合三个以上的表123456789101112131415create table t1 (id char(1), g number(3));create table t2 (id char(1), g number(3));create table t3 (id char(1), g number(3));INSERT INTO t1 VALUES('A',70);INSERT INTO t1 VALUES('B',80);INSERT INTO t1 VALUES('C',75);INSERT INTO t1 VALUES('D',90);INSERT INTO t2 VALUES('B',70);INSERT INTO t2 VALUES('D',50);INSERT INTO t2 VALUES('E',60);INSERT INTO t3 VALUES('A',90);INSERT INTO t3 VALUES('B',90);INSERT INTO t3 VALUES('E',55);INSERT INTO t3 VALUES('F',93);commit;
1sel ...
数据库第五周练习
构造一个很大的表(几百万行以上级别),用 delete
删除里面的大部分行,比较 rollback 和 commit
所花时间,哪个更快?(提示:通过设置 sqlplus
环境变量观察语句运行时间)
12345set timing on;delete from simuhw2 where rownum <= 200000;roll back;delete from simuhw2 where rownum <= 200000;commit;
image-20220318174233621
image-20220318174317447
可以看到,rollb
ack的时间明显比commit长。
给在波士顿,纽约,芝加哥,达拉斯的员工分别加薪 300,500,380,210
美元(要求 1 条语句完成)
123SELECT E.* , DECODE(E.DEPTNO,10,E.SAL+500,20,E.SAL+210,30,E.SAL+380,E.SAL+380) SAL2FROM emp E;
image-202203181811197 ...
数据库第四周练习
第一题
a
创建以下 3 个表,要求所有的约束都要建立约束名
学生表:学号,姓名,所属系,年龄。其中学号为主键,姓名要求非空约束
课程表:课程号,课程名,先行课号。其中课程号为主键,课程名要求非空约束
学生成绩表:学号,课程号,成绩。其中学号与课程号为联合主键,学号为外键,参照学生表的学号属性;课程号为外键,参照课程表的课程号属性。分数要求在
0-100 之间
123456create table s (s# varchar2(8),sn varchar2(8) ,sd varchar2(20),sa number(3),constraint S_CHECK check (sn is not NULL),primary key(s#));
image-20220311164750999
12345create table c (c# varchar2(8),cn varchar2(10) ,pc# varchar2(8),constraint C_CHECK check (cn is not NULL), primary key (c#));
...
RMD使用外链图片教程
在使用R
Markdown时插入本地图片十分方便,只需输入格式为![图片说明](图/片/路/径),注意图片路径中为正斜杠而不是反斜杠,包含文件名本身。如果图片所在位置就在项目所在文件夹,在文件名前加点与斜杠,如![图片说明示例](./fig.png)
如果想控制图片的显示尺寸,可以用下面的方式:
123```{r echo=FALSE, fig.cap="插入本地图片", out.width = '30%'}knitr::include_graphics("./fig.png")```
显示为:
image-20220305161100182
在上面的方法中,将路径名改为网址,还可以插入来自网络的图片(以及本地或网络的gif动图),如
123```{r echo=FALSE, fig.cap="来自网络的图片", out.width = '30%'}knitr::include_graphics("https://d33wubrfki0l68.cloudfront.net/aee91187a9c6811a802ddc524c3271302893a149/a7003/i ...
数据库第三周练习
SQL语句练习
显示员工的姓名和雇佣时间,要求中文时间格式,即“2012 年 9 月 26
日”这样的形式(要求不出现 09 月,把 0 去掉)
1select to_char(HIREDATE,'yyyy"年"fmmm"月"dd"日"'),ENAME from emp;
image-20220304142332474
显示员工的姓名和总收入,总收入以美元符号$开头,带小数点后两位
1select ENAME,to_char(NVL(COMM,0)+SAL,'$99999.99') from emp;
image-20220304142612112
假设每位员工在进入公司满 10 年后的第一个 4 月 1
日,会给他发放“优质服务奖”,请列出每位员工的获奖时间
1select to_char(case when extract(month from (ADD_MONTHS(HIREDATE,120))) < 4 then ADD_MONTHS(trunc(ADD_MONTHS(HIREDATE,120),'yyyy'),3) else ADD_MONT ...
数据库第二周笔记
SQL函数
字符型函数
RPAD和LPAD
靠左/右对齐
1select lpad(ename,10,' '),sal from emp;
image-20220302220036481
1select rpad(ename,10,'.')||sal from emp;
image-20220302220107942
LOWER,UPPER和INITCAP
lower:全变小写
upper:全大写
INITCAP:第一个变大写,其他不变
大小写转换
1select initcap(lower(ename)),sal from emp;
image-20220302220131159
LENGTH & SUBSTR
列出名字最后一个字母
1select ename,substr(ename,length(ename),1) from emp;
LTRIM和RTRIM
左/右截断函数,从左/右开始检查,直到检查到不符合则停止
形式借用,建立虚表
1select * from dual;
image-2022030222070907 ...
数据库第二周练习
环境变量设置
将SQLPLUS提示符改为SQL=
在sqlplus中输入命令:
1set sqlprompt "SQL="
image-20220225142139201
若要实现永久修改,需要在shell中输入命令
1vim $ORACLE_HOME/sqlplus/admin/glogin.sql
·
在其中加入
1set sqlprompt "SQL="
即可实现永久修改。
去掉输出结果的列头
在sqlplus中输入
1set heading off
image-20220225142617923
SQL语句练习
列出工资在 2000-3000 之间(包括临界值)并且没有提成的员工
1select * from emp where SAL between 2000 and 3000 and COMM is NULL;
image-20220225143205349
列出和 JONES 同一部门的员工名字
1select ENAME from emp where DEPTNO = (select DEPTNO from emp ...
scott账户解锁及权限配置教程
本文将介绍Linux下添加Oracle11g
scott账户,以及对于权限配置。
scott 账户解锁
使用sysdba登录:
sys登录
执行sql文件,'@'表示在sqlplus执行脚本完成后自动断开连接
1@$ORACLE_HOME/rdbms/admin/utlsampl.sql
切换为scott用户
1sqlplus scott/tiger
切换scott用户
验证,提取emp表
1select * from emp;
提取emp表
解锁View功能
做Oracle的实验,需要导入导出视图,在默认设置下,scott下没有视图功能,故需要创建。
若用scott直接创建,则显示“ORA-01031:
权限不足”,因此需要赋予权限,方法如下。
使用sys用户登录,后输入命令
1grant create view to scott;
image-20220311151850880
切换scott用户,验证
12conn scott/tiger;creat view vtop as select * from emp order by sal ...