2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开
测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库
这oracle比sql安全,强大多了,所以你需要学习,最重要的,你要是考网络警察公务员,这玩意你不会就别去报名了,耽误时间!
考网警特招必然要考操作系统,计算机网络,由于备考时间不长,你可能需要速成,我就想办法自学速成了,课程太长没法玩
刷题笔记系列文章:
【1】Oracle数据库:刷题错题本,数据库的各种概念
【2】操作系统,计算机网络,数据库刷题笔记2
【3】数据库、计算机网络,操作系统刷题笔记3
【4】数据库、计算机网络,操作系统刷题笔记4
【5】数据库、计算机网络,操作系统刷题笔记5
子查询先做最内层
最内层:
从客户表中,找纽约的用户id
所以锁定范围在纽约
然后第二个括号
在订单表中查这些顾客id的订单总量
主查询展示id和订单总量,
整个命令的含义:就是说展示orders表中,订单总量大于纽约的订单总量最小值的那些id和订单数量
妥了,很简单的
any是任意一个,最小值
all是全部,最大值
好说
结果就是
好说
第一个小括号去掉,无所谓
第二个小括号去掉,无所谓
第三个外面的小括号去掉,无所谓
中间的小括号去掉,无所谓
都是乘法,没啥大不了
所以没有影响的
优先级:()最大,先乘除后加减
优先级相同,从右往左,右边优先
定义约束的格式,要清楚哦
表级约束
列级约束
作用于一列
第一种,定义列直接后面跟约束:
SQL> create table test4(stuno number primary key);
SQL> create table test4(stuno number not null);
SQL> create table test4(stuno number unique);
SQL> create table test4(stuno number default 1);
SQL> create table test4(stuno number check(sunno>3));
表已创建。
unique不适用于null哦!!!!!!
SQL> create table test4(id number primary key,name varchar(20) not null unique,address varchar(20) default 'guangzhou' check(length(address)>1), other varchar(20) unique);
表已创建。
SQL> insert into test4(id,address,other) values(1,default,'a');
insert into test4(id,address,other) values(1,default,'a')
*
第 1 行出现错误:
ORA-01400: 无法将 NULL 插入 ("HR"."TEST4"."NAME")
你想插入name为null那是不行的
因为限定了name是非空且唯一的
SQL> insert into test4(id,name,address,other) values(2,'a',default,null);
unique可以为null而且不是唯一哦
随你
SQL> insert into test4(id,name,address,other) values(3,'c',default,null);
已创建 1 行。
看见没有,unique对null是无效的哦
SQL> insert into test4(id,name,address,other) values(4,'c',default,null);
insert into test4(id,name,address,other) values(4,'c',default,null)
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (HR.SYS_C0011645)
但是你看关于name的限定,一个非空,一个唯一,c就不能重复哦
SQL> set linesize 200;
SQL> select * from test4;
ID NAME ADDRESS OTHER
---------- ---------------------------------------- ---------------------------------------- ----------------------------------------
1 a guangzhou a
3 c guangzhou
SQL>
目前就这个样子了
注意,有多个约束时
default必须放第一个!!!!!!!!!
SQL> create table test5(id number primary key,name varchar(20) not null unique,address varchar(20) check(length(address)>1) default 'aaaa', other varchar(20) unique);
create table test5(id number primary key,name varchar(20) not null unique,address varchar(20) check(length(address)>1) default 'aaaa', other varchar(20) unique)
*
第 1 行出现错误:
ORA-00907: 缺失右括号
你瞅瞅check在default前面就不行
多个约束,必须default在前面
!!!
别的约束可以随意换!
主键约束和唯一约束,报错都是唯一约束失败,因为主键非空且唯一。
好说
表级约束:
constraint 约束名字 约束类型(字段)
好处是可以同时放好多字段,而不是每个字段都去给它限定
SQL> create table test5(id number,name varchar(20),address varchar(20),other varchar(20),constraint pk_id primary key(id),constraint uq_name_address unique(name,address));
表已创建。
constraint uq_name_address unique(name,address));
constraint 跟约束的名字,跟约束的类型,加括号(中间是约束的字段)
表级方式,可以加外键哦
命名方式也很简单
A表的a字段,B表的b字段
constraint 跟约束的名字,跟约束的类型,加括号(A表的a字段)参考references B表(b字段)
所以;
A references后面表名(字段),没有括号,不行
B 没有明确说我是哪种约束类型
C有约束类型怎么放最后了,gg
D约束类型放前面可以,后面跟约束名字,和参考表,OK的
SQL> create table dept40(id number, d_id number, constraint dept40_fk foreign key(d_id) references dept50(id));
create table dept40(id number, d_id number, constraint dept40_fk foreign key(d_id) references dept50(id))
ORA-02270: 此列列表的唯一关键字或主键不匹配
反正这种是标准格式,唯独D可以
将日期转换为字符标准格式
函数就是tochar
A括号里面是一个今天日期-受雇日期,得天数,你没法转化为日期格式啊
SQL> select sysdate-(sysdate-1) from dual;
SYSDATE-(SYSDATE-1)
-------------------
1
SQL> select to_date(sysdate-(sysdate-1)) from dual;
select to_date(sysdate-(sysdate-1)) from dual
*
第 1 行出现错误:
ORA-01840: 输入值对于日期格式不够长
看见了吗,2天日期减完没法转日期了,数字怎么转
B括号里面是日期,不需要转化为日期
SQL> select to_date('20220202','yy-mm-dd') from dual;
TO_DATE('20220
--------------
02-2月 -22
to_date的本意是将字符串格式的日期,转化为日期,本身是日期没法转的
SQL> select to_date(to_char(sysdate,'yy-mm-dd'),'yy-mm-dd') from dual;
TO_DATE(TO_CHA
--------------
01-12月-22
你看,我把今天的日期转字符串,你再通过这种方式转日期,就OK了
很简单的
C括号里面是日期,可以转化为字符串,格式OK【很正确】
C正确哦!
D已经是天数,没法转化为字符串,和A类似
delete from
才是删除哦
SQL> insert into test5 values(1,'1','11','1');
已创建 1 行。
SQL> delete test5;
已删除 1 行。
卧槽,还可以这么搞???????????????
所以答案选择C哦,语法没问题
语法上可以,但是不建议这么玩哦
最好是delete from
其实直接delete也行的,我记得清华那个老师讲过,就是整体删除,问题不大的。
C默认名字也行吧
DOK的
那就优先D
别名:不能是关键字
要用关键字,那需要双引号“”
空格需要双引号
单引号没法玩空格的
B正确哦
C有空格
initcap,首字母大写
SQL> select 12*salary initcap("annual salary") from employees;
select 12*salary initcap("annual salary") from employees
*
第 1 行出现错误:
ORA-00923: 未找到要求的 FROM 关键字
这里不能用函数作为别名
你只能这样搞
SQL> select 12*salary "Annual salary" from employees;
Annual salary
-------------
156000
null不是啥东西,不能用=
必须用is
傻逼玩意题目
链接:https://www.nowcoder.com/questionTerminal/31980656cbf44c21a7fb906b04866ae7
来源:牛客网
ARP和RARP 是网络层的协议,但是它所工作的内容是链路层的。。。具体来说应该是在网络层。
地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确定其物理地址的一种协议。
因IPv4和以太网的广泛应用,其主要用作将IP地址翻译为以太网的MAC地址,但其也能在ATM和FDDIIP网络中使用。
从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。
链接:https://www.nowcoder.com/questionTerminal/31980656cbf44c21a7fb906b04866ae7
来源:牛客网
ARP协议,ICMP是网络层,
UDP,TCP是传输层,
FTP和HTTP是应用层
网卡和适配器也在数据链路层哦!记住了
目前VPN隧道协议主要有4种:
点到点隧道协议PPTP、**PPP协议,**操蛋
第二层隧道协议L2TP、
网络层隧道协议IPSec以及SOCKS v5协议。
其中,PPTP和L2TP工作在数据链路层,
IPSec工作在网络层,SOCK v5工作在会话层。
傻逼题目
链接:https://www.nowcoder.com/questionTerminal/4095014364554d15892b15e3c2be957b
来源:牛客网
网卡:网络适配器在接收和发送各种帧时,不使用计算机的CPU,此时计算机的CPU可以处理其他任务;
不然我造你干嘛呢????
收到有差错的帧时,就把帧直接丢弃不通知计算机;
收到正确的帧时,使用中断通知计算机,并交付协议栈中的网络层;
当计算机发送IP数据报时,由协议栈把IP数据报向下交付给适配器,组装成帧发送到局域网。
大型广域网和远程计算机网络大都采用网状拓扑结构
其目的在于,通过邮电部门提供的线路和服务,将若干个不同位置的局域网连接在一起
gg
双绞线100米,同轴电缆185–500米,光纤:几十几百公里(单模>多膜
这题目几百年前的了吗不懂
1000字节——用啥类型,这个要了解
alter table 表名字 字段 修改后的类型
变长的varchar2是变长的
char是定长
varchar2变长,字节单位
nvarchar2变长,字符单位
所以
desc test5;
名称 是否为空? 类型
----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
ID NOT NULL NUMBER
NAME
VARCHAR2(20)
ADDRESS
VARCHAR2(20)
OTHER
VARCHAR2(20)
test5的字段基本都是varchar2
我们将name改变长1000的类型
SQL> alter table test5 modify(name varchar2(1000));
表已更改。
SQL> desc test5;
名称 是否为空? 类型
----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
ID NOT NULL NUMBER
NAME
VARCHAR2(1000)
ADDRESS
VARCHAR2(20)
OTHER
VARCHAR2(20)
easy,反正该看的看,这些都要搞清楚。
number(p,s)
p整数位
s小数位
number(38,0)=integer
数据库操作语言:增删改【DML】 查【DQL是查询】,delete,insert into
DDL定义语言:创建,修改表,删除表,视图啥的alter啥的,drop
DCL控制语言:grant,revoke,deny
这仨函数很强的
trunc截取小数点后的几位
如果是-1,-2,-3,就往前面截取,-1就是个位数直接废成0
-2是十位个位废成0
-3是百位十位个位都废成0
懂?
SQL> select trunc(123.567,1) from dual;
TRUNC(123.567,1)
----------------
123.5
SQL> select trunc(123.567,-1) from dual;
TRUNC(123.567,-1)
-----------------
120
SQL> select trunc(123.567,-2) from dual;
TRUNC(123.567,-2)
-----------------
100
SQL> select trunc(123.567,-3) from dual;
TRUNC(123.567,-3)
-----------------
0
那么本题:
SQL> select mod(1600,10) from dual;
MOD(1600,10)
------------
0
SQL> select trunc(0,-1) from dual;
TRUNC(0,-1)
-----------
0
SQL> select round(0,2) from dual;
ROUND(0,2)
----------
0
懂了吧
四舍五入一个道理,只不过舍掉那个大于=5,需要向前进位1
round和trunc都可以 用于日期的骚操作
数字默认整数,你保留几个都是0
不用屁股加0了
子查询
从客户表中查Smith的cust_id
然后去订单中查cust_id的订单
查Smith的订单
显然这题目选D 啊
子查询有俩Smith
主查询就不能用=
而应该是in
这很好说
数据库:关系型sql类型–二维表结构
nosql型:非关系型
组的结果过滤,having
where是过滤行
group by分组
order by排序
oracle默认账户:
scott/tiger
system/manager
sys/change_on_install
默认端口号
oracle:1521
mysql:3306
sqlserver:1433
事务操作,只对DML有效,对增删改查有效,对DDL【create啥的】,DCL无效【因为他们自动commit】
有savepoint,那就去savepoint
单一个rollback,那就返回上一次commit之后那行。
我解析,
1建表
3插入数据,copy来
4 s1
5将字段name的所有名字全部改为大写,无所谓
6 s2
7删除里面的数据
8恢复数据,去s2,等于没干
9删除180id的数据行
10将表name字段所有名字全部改为James
11恢复数据,去s2,等于没干
12将id为180的那行名字改为james
13 rollback是,返回到上一次commit那里,那就是直接返回到第3行………………
故里面没有数据哈哈哈哈哈哈哈,很骚吧!!!!!!!!!!!!
因此本题选A
这是oracle特有的,全连接——不对
不论e表,是否有部门,都要展示,e在左边,那就是左链接哦!!!!
左右链接,都是mysql和oracle公有的
select name,depid from employees e left outer join departments d on e.depid=d.depid;
F正确哦
B对的
count咋可能小数呢
不是求数据
总和是sum
这波好说
B
月薪不可能为null哦
序列是不需要特定表用的
可以供给给所有表使用哦——B错
C默认只有自己和管理员,其他用户不可用
D谁创建谁可以用,不见得一定要管理员
E不会自动,需要你手动用
——这玩意接触得很少
create sequence myseq increment by 2 start with 10000 maxvalue 100000
伪列
nextval下一个值
curraval当前值
SQL> create sequence myseq increment by 2 start with 10000 maxvalue 100000;
序列已创建。
SQL> select myseq.nextval,id from test3;
NEXTVAL ID
---------- ----------
10000 1
10002 3
10004 4
SQL>
nextval默认指向那个没用过的序列
hr用户可以创建,普通用户需要授权的
create sequence的权限
只能是创建序列的用户或者管理员才能修改
修改序列,只会影响修改之后的数据,以前用过了的序列不能动了
用了123,后面改了2间隔,那修改之后就是5,前面的不动
select any sequence
其他用户要查询我hr创建的序列,你要用,还得授权才行
还是default
number没法玩,status是需要char
当初说过,create or replace,是建立在你已经有了表的情况下,还行,否则不行的
创建表和sequence时,不能加or replace
下面可以:
function, procedure,package,type,synonym,view,trigger
所以E是答案
部门名称
自己写一个语句,就不用一个个查了
链接字段:department_id
员工和经理,得用自连接,因为经理也是员工
select last_name ename,last_name mname,department_name from employees e inner join employees b on e.manager_id = b.employee_id inner join departments d on e.department_id = d.department_id;
三张表,第一张自连接:自连接的条件很重要,第一张看员工的经历id,拿去对应经理表的员工id
还有一张普通链接
都可以用inner join
前后把各自的条件写清楚。
内连接的话,是不展示没有部门的员工名字哦
left outer join也行的
没问题
反正e表放左边即可
因为是所有员工,所以没有部门的也要展示
美滋滋!
提示:重要经验:
1)
2)学好oracle,操作系统,计算机网络,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。