加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ORACLE----多表查询语句练习

发布时间:2020-12-12 13:44:23 所属栏目:百科 来源:网络整理
导读:一.建表 1.建立两张表CLASSINFO,STUDENTINFO. --建表CLASSINFO; CREATE TABLE CLASSINFO ( CLASSID NUMBER ( 2 ) PRIMARY KEY ,CLASSNAME VARCHAR ( 10 ) NOT NULL ); --建表STUDENTINFO; CREATE TABLE STUDENTINFO ( STUDENTID NUMBER ( 2 ) PRIMARY KEY

一.建表

1.建立两张表CLASSINFO,STUDENTINFO.

--建表CLASSINFO;
CREATE
TABLE CLASSINFO ( CLASSID NUMBER(2) PRIMARY KEY,CLASSNAME VARCHAR(10) NOT NULL);
--建表STUDENTINFO;
CREATE
TABLE STUDENTINFO ( STUDENTID NUMBER(2) PRIMARY KEY,STUDENTNAME CHAR(10) NOT NULL,STUDENTSEX CHAR(2) CHECK(STUDENTSEX= OR STUDENTSEX=),STUDENTAGE NUMBER(2) NOT NULL,STUDENTTEL NUMBER(11) UNIQUE,STUDENTADDRESS VARCHAR(20) DEFAULT 上海,classid number(2) REFERENCES classinfo(classid));

2.在两张表中插入数据。

--表CLASSINFO;
INSERT
INTO CLASSINFO (CLASSID,CLASSNAME) VALUES( 1,六班); INSERT INTO CLASSINFO (CLASSID,CLASSNAME) VALUES( 2,七班);
INSERT INTO STUDENTINFO  VALUES (1,Timmy,,20,13285601693,suzhou,1 ); 
ALTER TABLE STUDENTINFO MODIFY  (STUDENTNAME  CHAR(10) );--这里是来修改STUDETNAME字段的数据类型的长度。
INSERT INTO STUDENTINFO  VALUES (2,Lizmer,25,18056947153,anhui,1 ); 
INSERT INTO STUDENTINFO  VALUES (3,Gray,30,18056996153,hubei,2 ); 
INSERT INTO STUDENTINFO  VALUES (4,Roger,31,18056886153,henan,2 );

3.在两张表中添加字段。

ALTER TABLE CLASSINFO ADD (Teacher char(20));
ALTER TABLE CLASSINFO ADD (Leader char(20));
ALTER TABLE STUDENTINFO ADD (SCORE NUMBER(20));
ALTER TABLE STUDENTINFO ADD (Teacher char(20));

4.在新添加的字段中添加数据。

UPDATE CLASSINFO SET Teacher=刘A where  CLASSID=2;
UPDATE CLASSINFO SET Leader=陈B where  CLASSID=2;
UPDATE STUDENTINFO SET Teacher=张I where  STUDENTID=4;
UPDATE STUDENTINFO SET Leader=汤J where  STUDENTID=4;
UPDATE STUDENTINFO SET SCORE=100 where  STUDENTID=5;

5.表CLASSINFO和STUDENTINFO如下所示。

?

ps:score字段的添加和插入数据参考上例。

二.高级多表数据查询

2.1?RANK() OVERORDER BY/ DENSE_RANK() OVERORDER BY/?RANK() OVER PARTITION BY??ORDER BY;

##我们通常将group by叫做分组,而partition by称作分区,分组返回通常是一行,partition by返回的是多行。
SELECT STUDENTINFO.*,DENSE_RANK() OVER(ORDER BY STUDENTINFO.SCORE DESC ) AS RANKS 
  FROM STUDENTINFO;
SELECT STUDENTINFO.*,RANK() OVER(ORDER BY STUDENTINFO.SCORE DESC ) AS RANKS 
  FROM STUDENTINFO;
SELECT RANK() OVER(PARTITION BY STUDENTNAME ORDER BY STUDENTINFO.SCORE DESC ) AS RANKS 
  FROM STUDENTINFO;--这里解释一下,假如Timmy有两次得分记录,那么上述语句就是对Timmy的得分排序。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读