【Oracle】曾经的Oracle学习笔记(1-3) 数据库常见用语,常见命令,创建测试表

一、数据库的登录

二、数据库常用语

三、测试表的创建,测试数据初始化

四、常见命令介绍

五、测试

user:jeffrey
sn:jeffrey


user:system
sn:jeffrey

浏览器中输入:
http://127.0.0.1:8080/apex
管理员登陆
user:sys
sn:jeffrey

打开服务列表:
win+r打开运行框,输入services.msc
OracleServiceXE服务一定要是打开的,要不然oracle根本登录不了。
OracleXETNSLintener服务是在我们使用JDBC的时候需要打开的一个服务。

创建数据库用户:
user:briup
sn:briup

-------------------------
打开服务列表:
运行框中输入services.msc

----------------------------------------------
登录oracle的几种方法
sqlplus user/sn 直接用user身份登录
sqlplus 然后根据提示输入用户名,密码


用dba的身份登录到oracle数据库
命令行中输入:
sqlplus "/as sysdba"

注:如果命令不识别,那么就需要配置一下环境变量path,把sqlplus.exe文件所在目录的路径配置在path中

show user


在dos中创建用户:
create user 用户名 identified by 密码;
create user briup identified by briup;

给用户授权
grant connect,resource to briup;

给账户解锁
alter user briup account unlock;


conn user; 切换到用户user

conn jeffrey as sysdba; //从jeffrey用户切换到sysdba的身份登录
grant create table,create view to jeffrey;//给jeffrey授权创建view的权限
conn jeffrey/jeffrey; //切换到以jeffrey的身份登录,用户名/密码

如果发现用户被锁定了那么就给账户解锁
alter user briup set account unlock;


查看当前登录用户
show user

在sqlplus中清屏:
$cls (Windows平台下面)
!clear (Unix平台下面)

$cls 清屏
exit 退出
----------------------------------
sql语句的基本格式:

select ...
from ..
where ...
group by ...
having ...
order by ..


-------------------------------
oracle中的Object:
Table View Sequence Index Synonym

---------------------------------------------------------
sql 第四代编程语言
特点:只关心做什么,不关心怎么做

sqlplus: 是一个工具,可以把sql语句拿到oracle中切执行,并且显示执行结果。

PL/SQL:可以在sql的基础加入逻辑控制单元
---------------------------------------------------、

使用sql语言在oracle中可以做哪些事情:


数据库操纵语言
Data manipulation language (DML)
INSERT, UPDATE, DELETE


数据库定义语言
Data definition language (DDL)
CREATE, ALTER, DROP, RENAME, TRUNCATE


数据库控制语言
Data control language (DCL)
GRANT, REVOKE

数据库查询:
SELECT

数据库事务:
COMMIT, ROLLBACK, SAVEPOINT

------------------------------------------------------------
登录数据库:

sqlplus
直接回车输入然后根据提示输入用户名和密码


sqlplus 用户名
然后根据提示输入密码


sqlplus 用户名/密码
然后回车就可以了

---------------------------------------------------------------

查看当前用户下面有哪些表可以操作

select table_name
from user_tables;

注:sql语句中的字母大小写是不敏感

SELECT TABLE_NAME
FROM USER_TABLES;
这个和上面的小写的sql语句结果是一样的

但是oracle中的字符串就会大小写敏感
'Hello' 和 'hello' 是不同的


查看某张表(例如,s_emp表)中的列名和列的属性
desc s_emp;

在sql语句最后要加上分号;
要不然这个sql语句不会被执行。

--------------------------
sql语句的基本格式:

select ...
from ..
where ...
group by ...
having ...
order by ..
---------------------------
s_region 地区表
s_dept 部门表
s_emp 员工表

改变语言环境,以保证接下来插入日期能被识别
alter session set nls_language=english;

注:在建表插入数据之前,先把当前会话(session)的语言环境设置为英文,因为在下面的插入数据的操作中需要插入英文格式的日期数据.
alter session set nls_language=english;

************************************************
建表命令

第一张表 s_region

建表语言:

CREATE TABLE s_region
(id NUMBER(7)
CONSTRAINT s_region_id_nn NOT NULL,
name VARCHAR2(50)
CONSTRAINT s_region_name_nn NOT NULL,
CONSTRAINT s_region_id_pk PRIMARY KEY (id),
CONSTRAINT s_region_name_uk UNIQUE (name));


第一张表中插入数据:

INSERT INTO s_region VALUES (
1, 'North America');
INSERT INTO s_region VALUES (
2, 'South America');
INSERT INTO s_region VALUES (
3, 'Africa / Middle East');
INSERT INTO s_region VALUES (
4, 'Asia');
INSERT INTO s_region VALUES (
5, 'Europe');
COMMIT;


第二张表: s_dept
建表语句:

CREATE TABLE s_dept
(id NUMBER(7)
CONSTRAINT s_dept_id_nn NOT NULL,
name VARCHAR2(25)
CONSTRAINT s_dept_name_nn NOT NULL,
region_id NUMBER(7),
CONSTRAINT s_dept_id_pk PRIMARY KEY (id),
CONSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id));

第二张表插入数据:

INSERT INTO s_dept VALUES (
10, 'Finance', 1);
INSERT INTO s_dept VALUES (
31, 'Sales', 1);
INSERT INTO s_dept VALUES (
32, 'Sales', 2);
INSERT INTO s_dept VALUES (
33, 'Sales', 3);
INSERT INTO s_dept VALUES (
34, 'Sales', 4);
INSERT INTO s_dept VALUES (
35, 'Sales', 5);
INSERT INTO s_dept VALUES (
41, 'Operations', 1);
INSERT INTO s_dept VALUES (
42, 'Operations', 2);
INSERT INTO s_dept VALUES (
43, 'Operations', 3);
INSERT INTO s_dept VALUES (
44, 'Operations', 4);
INSERT INTO s_dept VALUES (
45, 'Operations', 5);
INSERT INTO s_dept VALUES (
50, 'Administration', 1);
COMMIT;


第三张表 s_emp

CREATE TABLE s_emp
(id NUMBER(7)
CONSTRAINT s_emp_id_nn NOT NULL,
last_name VARCHAR2(25)
CONSTRAINT s_emp_last_name_nn NOT NULL,
first_name VARCHAR2(25),
userid VARCHAR2(8),
start_date DATE,
comments VARCHAR2(255),
manager_id NUMBER(7),
title VARCHAR2(25),
dept_id NUMBER(7),
salary NUMBER(11, 2),
commission_pct NUMBER(4, 2),
CONSTRAINT s_emp_id_pk PRIMARY KEY (id),
CONSTRAINT s_emp_userid_uk UNIQUE (userid),
CONSTRAINT s_emp_commission_pct_ck
CHECK (commission_pct IN (10, 12.5, 15, 17.5, 20)));

第三张表插入数据:

INSERT INTO s_emp VALUES (
1, 'Velasquez', 'Carmen', 'cvelasqu',
to_date('03-MAR-90 8:30', 'dd-mon-yy hh24:mi'), NULL, NULL, 'President',
50, 2500, NULL);
INSERT INTO s_emp VALUES (
2, 'Ngao', 'LaDoris', 'lngao',
'08-MAR-90', NULL, 1, 'VP, Operations',
41, 1450, NULL);
INSERT INTO s_emp VALUES (
3, 'Nagayama', 'Midori', 'mnagayam',
'17-JUN-91', NULL, 1, 'VP, Sales',
31, 1400, NULL);
INSERT INTO s_emp VALUES (
4, 'Quick-To-See', 'Mark', 'mquickto',
'07-APR-90', NULL, 1, 'VP, Finance',
10, 1450, NULL);
INSERT INTO s_emp VALUES (
5, 'Ropeburn', 'Audry', 'aropebur',
'04-MAR-90', NULL, 1, 'VP, Administration',
50, 1550, NULL);
INSERT INTO s_emp VALUES (
6, 'Urguhart', 'Molly', 'murguhar',
'18-JAN-91', NULL, 2, 'Warehouse Manager',
41, 1200, NULL);
INSERT INTO s_emp VALUES (
7, 'Menchu', 'Roberta', 'rmenchu',
'14-MAY-90', NULL, 2, 'Warehouse Manager',
42, 1250, NULL);
INSERT INTO s_emp VALUES (
8, 'Biri', 'Ben', 'bbiri',
'07-APR-90', NULL, 2, 'Warehouse Manager',
43, 1100, NULL);
INSERT INTO s_emp VALUES (
9, 'Catchpole', 'Antoinette', 'acatchpo',
'09-FEB-92', NULL, 2, 'Warehouse Manager',
44, 1300, NULL);
INSERT INTO s_emp VALUES (
10, 'Havel', 'Marta', 'mhavel',
'27-FEB-91', NULL, 2, 'Warehouse Manager',
45, 1307, NULL);
INSERT INTO s_emp VALUES (
11, 'Magee', 'Colin', 'cmagee',
'14-MAY-90', NULL, 3, 'Sales Representative',
31, 1400, 10);
INSERT INTO s_emp VALUES (
12, 'Giljum', 'Henry', 'hgiljum',
'18-JAN-92', NULL, 3, 'Sales Representative',
32, 1490, 12.5);
INSERT INTO s_emp VALUES (
13, 'Sedeghi', 'Yasmin', 'ysedeghi',
'18-FEB-91', NULL, 3, 'Sales Representative',
33, 1515, 10);
INSERT INTO s_emp VALUES (
14, 'Nguyen', 'Mai', 'mnguyen',
'22-JAN-92', NULL, 3, 'Sales Representative',
34, 1525, 15);
INSERT INTO s_emp VALUES (
15, 'Dumas', 'Andre', 'adumas',
'09-OCT-91', NULL, 3, 'Sales Representative',
35, 1450, 17.5);
INSERT INTO s_emp VALUES (
16, 'Maduro', 'Elena', 'emaduro',
'07-FEB-92', NULL, 6, 'Stock Clerk',
41, 1400, NULL);
INSERT INTO s_emp VALUES (
17, 'Smith', 'George', 'gsmith',
'08-MAR-90', NULL, 6, 'Stock Clerk',
41, 940, NULL);
INSERT INTO s_emp VALUES (
18, 'Nozaki', 'Akira', 'anozaki',
'09-FEB-91', NULL, 7, 'Stock Clerk',
42, 1200, NULL);
INSERT INTO s_emp VALUES (
19, 'Patel', 'Vikram', 'vpatel',
'06-AUG-91', NULL, 7, 'Stock Clerk',
42, 795, NULL);
INSERT INTO s_emp VALUES (
20, 'Newman', 'Chad', 'cnewman',
'21-JUL-91', NULL, 8, 'Stock Clerk',
43, 750, NULL);
INSERT INTO s_emp VALUES (
21, 'Markarian', 'Alexander', 'amarkari',
'26-MAY-91', NULL, 8, 'Stock Clerk',
43, 850, NULL);
INSERT INTO s_emp VALUES (
22, 'Chang', 'Eddie', 'echang',
'30-NOV-90', NULL, 9, 'Stock Clerk',
44, 800, NULL);
INSERT INTO s_emp VALUES (
23, 'Patel', 'Radha', 'rpatel',
'17-OCT-90', NULL, 9, 'Stock Clerk',
34, 795, NULL);
INSERT INTO s_emp VALUES (
24, 'Dancs', 'Bela', 'bdancs',
'17-MAR-91', NULL, 10, 'Stock Clerk',
45, 860, NULL);
INSERT INTO s_emp VALUES (
25, 'Schwartz', 'Sylvie', 'sschwart',
'09-MAY-91', NULL, 10, 'Stock Clerk',
45, 1100, NULL);
COMMIT;


*****************************************************

s_region地区表

ID 地区的编号
NAME 地区的名字


s_dept部门表

ID 部门编号
NAME 部门名字
REGION_ID 部门所在地区编号

s_emp 员工表

ID 员工的编号
LAST_NAME
FIRST_NAME
USERID
START_DATE 入职时间
COMMENTS
MANAGER_ID 这个员工的领导的id号
TITLE 职位
DEPT_ID 所在部门编号
SALARY
COMMISSION_PCT 提成率

----------------------------------------------------

查找
select last_name from s_emp;

调整列名下面分割线的长度(非数字列)
col last_name for a15; //调节last_name 这列的a(小横线)到15格

查看多列数据用逗号隔开
注:这个逗号一定要是英文输入法下面的逗号
select column1,column2,column3...
from 表;

查看表中所有的列用*
select *
from 表;


给查询的某一列起一个别名(显示用的,并不改变数据库中的表列名),空格隔开
select last_name,salary sal from s_emp; //将salary列名显示为sal

--------------------------------------------------------
调整列名下面分割线的长度(非数字列)
col last_name for a15;

查看某一列上面设置的格式
col last_name

清空某一列上面设置的格式
col last_name clear

select last_name
from s_emp;

查看多列数据用逗号隔开
注:这个逗号一定要是英文输入法下面的逗号
select column1,column2,column3...
from 表;

例如:
select id,last_name,dept_id,salary
from s_emp;

查看表中所有的列用*
select *
from 表;

select *
from s_emp;


给查询的某一列起一个别名

select last_name name
from s_emp;


select id myId,last_name MyName,salary MySalary
from s_emp;

DISTINCT
distinct //作用:可以用来去除重复的数据,注:数据是否重复是按照当前显示的一行是否完全一样判定的。

select dept_id
from s_emp;


select distinct dept_id
from s_emp;


在查询的过程中可以加入加减乘除
Add +
Subtract -
Multiply *
Divide /


select salary
from s_emp;


select salary*12 salaryOfYear
from s_emp;

select ((salary+1000)*20-50000)/15-20000
from s_emp;


select last_name,first_name
from s_emp;

||是可以连接俩个字符串的值或者是俩个字符串列上面的值。
select first_name||last_name full_name
from s_emp;

select 'hello'||'world'
from dual;

dual 哑表
注:dual是oracle中的一张表,每一个用户都可以使用。当前我们直接查询一个运算式子或者是日期的时候就可以用这张表。

函数
nvl(列名,替换的新值) //作用:能帮我们把某一列上面是null的值替换为另一个值

select last_name,nvl(commission_pct,0) from s_emp;


练习:查询一个s_emp表中所有人的工资,如果是销售人员,那么就把他的工资加上提成之后再显示(在原来基础工资的基础加入上提成)
select last_name,salary+salary*(nvl(commission_pct,0)/100) from s_emp;

-------------------------------------------------------------
sql语句中的【小技巧】

在sql*plus工具中,会有一个buffer(缓存),这个buffer中只能存放一条sql语句(不管这条sql语句多少行),buffer中会存放着我们最近一次执行过的一条sql语句。


L或者l //大写或小写都可以list,显示buffer中存放的sql语句
/ //这一命令可以执行buffer中的sql语句
2 //选择buffer中的第二行
a //在buffer中的sql语句的某一行(选择的那一行)后面增加内容,a后面跟的内容
i //在buffer中的sql语句中的某一行(选择的那一行)下面插入一行,i后面跟的内容
del //删除某一行(选择的那一行)
c/ma/me //将某一行(选择的那一行)中的ma替换成me
2 新代码 //将buffer中第2行中的代码全部重写为新代码
save LL.sql //将buffer中的额内容保存到文件LL.sql中,文件在登录sql前的路径存放。
clear buffer //清空缓冲区
start LL.sql //执行文件LL.sql中保存的命令。
@LL.sql //执行文件LL.sql中保存的命令。
edit LL.sql //修改LL.sql文件,使用系统中默认的编辑器打开
get LL.sql //显示LL.sql文件中存储的命令。

spool spool.sql //将接下来的操作记录在spool.sql文件中直到spool off
spool off //记录结束
--------------------------------------------
将salary列中的数字显示为9,999的形式,如2391显示为2,391
col salary for $9,999
select salary from s_emp;

将不足的显示为0,如4399显示为004,399
col salary for $099,999.99
将货币符号显示为本地的
col salary for L099,999.99


修改数字列显示的格式:

将来这个数字按照这样的格式来显示
col salary for $9,999.99
例如:2500 ---> $2,500.00

这个表示将来数字一定要显示成整数为6位,不够6位的前面补0
col salary for $099,999.99
例如:2500 ---> $002,500.00


L表示使用本地的货币符号来表示
col salary for L099,999.99
例如:2500 ---> ¥002,500.00


--------------------------------
order by 排序

默认是升序
select last_name,salary
from s_emp
order by salary;

加上desc后就会变为降序
select last_name,salary
from s_emp
order by salary desc;

通过日期排序
select last_name,salary,start_date
from s_emp
order by start_date;

通过字符串排序
select last_name,salary
from s_emp
order by last_name;

按要查询的第2个列进行排序
select last_name,salary
from s_emp
order by 2;


where子句: 条件查询

select last_name
from s_emp
where dept_id = 41;


= > >= < <=

BETWEEN ... AND...

例如:
注:这时候也包括41和50这个俩个部门
select last_name,dept_id
from s_emp
where dept_id between 41 and 5

语言环境此时为中文,所以日期用中文格式
select last_name,start_date
from s_emp
where start_date between '03-3月-90'
and '17-6月-91';

语言环境改为英文
alter session set nls_language=english;
语言环境改为简体中文
alter session set nls_language='simplified chinese';


IN(list)

例如:
查询41,42,43,44,45部门中的员工信息
select last_name,dept_id
from s_emp
where dept_id in(41,42,43,44,45)

LIKE

一般用作模糊查询
%代表可能有0个或者多个字符
_代表有一个字符
escape可以忽略某些字符
/相当于转义符号

查询名字的首字母是N的员工信息
select last_name,salary
from s_emp
where last_name like 'N%';

查询名字中以_g开头的员工信息
select last_name,salary
from s_emp
where last_name like '/_g%' escape'/';

IS NULL

例如:
select last_name,commission_pct
from s_emp
where commission_pct is null;

AND
OR

例如:
salary<1450
salary>1100
dept_id = 41

select last_name,salary,dept_id
from s_emp
where dept_id=41 or salary>1100 and
salary<1450

注:and的优先级比or高

NOT

!= <> ^=
这三个都是不等于的意思


NOT BETWEEN
NOT IN
NOT LIKE
IS NOT NULL

ANY

例如:
select last_name,salary
from s_emp
where salary > any(3000,2000,1000,500);
相当于以下语句
where salary>3000
or salary>2000
or salary>1000
or salary>500

ALL

例如:
select last_name,salary
from s_emp
where salary > all(3000,2000,1000,500);
相当于以下语句
where salary>3000
and salary>2000
and salary>1000
and salary>500


--------------------------------------
函数
分两类:
单值函数

组合函数/聚合函数/组函数


单值函数
---------
1.字符串函数

LOWER 把一个字符串或者字符串类型的列上面的值转换成小写
例如:
select lower('HELLO')
from dual;
select lower(last_name)
from s_emp;

UPPER 把一个字符串或者字符串类型的列上面的值转换成大写

INITCAP 把一个字符串或者字符串类型的列上面的值转换成首字母大写,其他字符小写
例如:
select initcap('hELLOWoRld')
from dual;

结果显示: Helloworld

CONCAT 链接俩个字符串或者字符串列上面的值.
例如:
select concat('hello','world')
from dual;
select concat(last_name,first_name)
from s_emp;

SUBSTR 截取字符串
例如:
第一个参数:要被截取的字符串
第二个参数:从哪个位置来说截取(下标从1,2,3....)
第三个参数:要截取的字符串长度
select substr('hello',1,1)
from dual;
select substr(last_name,1,2)
from s_emp;

LENGTH 返回字符串或者字符串列上面值的长度
例如:
select length('hello')
from dual;

NVL


2.数字函数

ROUND 四舍五入
第一个参数:要操作的数字
第二个参数:需要保留的位数
正数表示保留小数点右边多少位。
0表示保留到个位,默认这个参数值就是为0
-1表示保留到十位,以此类推
例如:
select round(45.923,2)
from dual; --->45.92

select round(45.923,0)
from dual; --->46

select round(45.923)
from dual; --->46

select round(45.923,-1)
from dual; --->50

TRUNC 和ROUND的用法一样,唯一不同的就是这个TRUNC函数只会舍去值而不会进位,不管那位上是0或者是9都不会进位。

MOD 取余
例如:
select mod(50,30)
from dual; --->20


3.日期函数

oracle表示日期的第一种方式:
关键字sysdate表示当前的日期时间
sysdate的单位是天
例如:
select sysdate
from dual;

sysdate+365表示从当前时间往后推1年
(sysdate+365)整体代表的是一个日期
select sysdate+365
from dual;

sysdate+1/24表示从当前时间往后推1小时
(sysdate+1/24)整体代表的是一个日期
select sysdate+1/24
from dual;
oracle中表示日期的第二种方式:
用一个字符串来表示一个日期,只不过这个字符串要按照oracle默认的日期格式来写。
例如
'14-MAY-90'
'14-5月-90'
注:要和session的语言环境一致

oracle中表示日期的第三种方式:
借助于日期转换函数来获得一个日期数据
to_date('string','date_format')

MONTHS_BETWEEN 俩个日期之间相差多少个人,返回的结果单位是月
例如:
select months_between(sysdate,sysdate+365)
from dual; --->12

ADD_MONTHS 在给定的一个日期点上面往后退一个1月,返回的结果是一个日期数据
例如:
select add_months(sysdate,1)
from dual;

NEXT_DAY 表示基于当前给定日期情况下,下一个星期几是多少号,返回的结果是一个日期数据
例如:
select next_day(sysdate,'MONDAY')
from dual;

中文session
select next_day(sysdate,'星期一')
from dual; --->01-7月 -13

LAST_DAY 基于给定日期所在的月份,返回这个月份最后一天的日期,返回结果是一个日期数据
例如:
select last_day(sysdate)
from dual;

ROUND 对日期进行四舍五入
例如:
这样是错误的,因为oracle会把这个日期当做一个数字,因为数字函数里面也有round这个函数。
select round('25-MAY-95','month')
from dual;

这个是正确的
select round(to_date(...),'month')
from dual;
select round(sysdate-53,'month')
from dual;
保留到月份结论:
不管是28天还是29、30、31,
16号的都是进位,15都是舍去。

select round(sysdate+82,'year')
from dual;
保留到年的结论:
7月1号以后的时间才会进位

TRUNC 和round类似,但是只会舍去不会进位。


4.字符串、数字、日期相互转换的函数

to_char 把日期或者数字转换为字符串
to_char(date,'date_format')
例如:
select to_char(sysdate,'ddd-Month-Year HH24:mi:ss')
from dual;

千年虫
yy rr

select to_char(3500,'$0999,999')
from dual;

to_number 把字符串转化为数字
例如:
select to_number('20')
from dual;

to_date 把一个字符串转换为日期
to_date('string','date_format')
例如:
select to_date('2013/4/10','yyyy/mm/dd')
from dual;



注意:单值函数之间是可以相互嵌套使用的.
例如:
select concat(lower('HELLO'),upper('world'))
from dual;

组合函数/聚合函数/组函数

group by子句: 分组
having子句: 条件筛选


常用的组函数:
avg 平均值
count 计数
sum 求和
max 最大值
min 最小值

查询s_emp表中所有员工的工资总和
select sum(salary)
from s_emp;


查询s_emp表中所有员工的平均工资
select avg(salary)
from s_emp;


查询s_emp表一共有多少个员工
select count(*)
from s_emp;


查询s_emp表中最大工资数是多少
select max(salary)
from s_emp;


查询s_emp表中最小工资数是多少
select min(salary)
from s_emp;

--------------------------------------------------------
group by子句: 分组
having子句: 条件筛选

where和having的区别:
这个俩个都可以作为条件筛选语句,但是where后面不能出现组函数,having语句后面可以出现组函数


查询一张表的时候,如果没有分组,直接使用了组函数,那么就会默认整张表的所有数据就是一个小
组,那么这个组函数就会直接作用到整张表上。

如果进行了group by分组,那么会把整张分为若干个小组,然后组函数会分别作用到每一个小组上,
最后每一个小组都会有自己的一个结果(比如说求的平均值或求的总和)。


一般情况,组函数都会结合group by子句来使用


查询s_emp表中每一个部门的员工的工资总和

select dept_id,sum(salary)
from s_emp
group by dept_id
order by dept_id;


查询s_emp表中每一个部门的员工的工资总和,并且只显示出工资总和大于2000的部门

select dept_id,sum(salary)
from s_emp
group by dept_id
having sum(salary)>2000
order by dept_id;

这样写是错误的!!!!where 后面不能跟组函数
select dept_id,sum(salary)
from s_emp
where sum(salary)>2000
group by dept_id
order by dept_id;


查询每一个部门的平均工资

select dept_id,avg(salary)
from s_emp
group by dept_id
order by avg(salary);

注:order by是可以用组函数执行结果进行排序的


查询s_emp表中最大的工资数

select max(salary)
from s_emp;

原文地址:https://www.cnblogs.com/jinhuazhe2013/p/5192080.html