-建表-
SQL> create table score(
? 2? name varchar(50),
? 3? kecheng varchar(50),
? 4? fenshu number(3)
? 5? );
插入数据
SQL> insert into score(name,kecheng,fenshu) values(‘张三‘,‘语文‘,81);
1 row inserted
SQL> insert into score(name,kecheng,fenshu) values(‘张三‘,‘数学‘,78);
1 row inserted
SQL> insert into score(name,kecheng,fenshu) values(‘李四‘,‘语文‘,76);
1 row inserted
SQL> insert into score(name,kecheng,fenshu) values(‘李四‘,‘数学‘,90);
1 row inserted
SQL> insert into score(name,kecheng,fenshu) values(‘王五‘,‘语文‘,81);
1 row inserted
SQL> insert into score(name,kecheng,fenshu) values(‘王五‘,‘数学‘,100);
1 row inserted
SQL> insert into score(name,kecheng,fenshu) values(‘王五‘,‘英语‘,88);
1 row inserted
SQL> select * from score;
NAME???????????KECHENG?????????????????FENSHU
----------------- ----------------------- ------
张三?????????? 语文??????????????????????? 81
张三?????????? 数学??????????????????????? 78
李四?????????? 语文??????????????????????? 76
李四????? ??? 数学??????????????? ????90
王五?????? ??? 语文????????????????????????81
王五?????????? 数学??????? ?? 100
王五?????????? 英语??????????????????????? 88
7 rows selected
SQL> select name from score group by name having min(fenshu)>80;
NAME
--------------------------------------------------
王五
SQL> select distinct name from score where name not in(
? 2? select name from score
? 3? where fenshu<80);
NAME
--------------------------------------------------
王五
SQL> create table students1
? 2? (
? 3? 自动编号 number(5),
? 4? 学号 number(10),
? 5? 姓名 varchar(40),
? 6? 课程编号 varchar(60),
? 7? 课程名称 varchar(160),
? 8? 分数 number(3)
? 9? );
Table created
SQL> insert into students1 values(1,2005001,‘张三‘,0001,‘数学‘,69);
1 row inserted
SQL> insert into students1 values(2,2005002,‘李四‘,0001,‘数学‘,69);
1 row inserted
SQL> insert into students1 values(3,2005001,‘张三‘,0001,‘数学‘,69);
1 row inserted
SQL> commit;
Commit complete
SQL> select * from students1;
?自动编号???学号 姓名 课程编号 课程名称 分数
----------------------------------------
?1?? 2005001 张三 1 数学 69
?2????2005002 李四 1 数学 69
?3??? 2005001 张三 1 数学 69
SQL> delete from students1 where 自动编号 not in(
2 select min(自动编号)
3 from students1
4 group by 学号,课程编号);
1 row deleted
SQL> delete from students1 where rowid not in(
? 2? select min(rowid)
? 3? from students1
? 4? group by 学号,课程编号);
1 row deleted
SQL> select * from team;
NAME
------------
a
b
c
d
SQL> select * from team a,team b
2 where a.name<>b.name;
NAME NAME
--------- ---------
a b
a c
a d
b a
b c
b d
c a
c b
c d
d a
d b
d c
12 rows selected
SQL> select * from team a,team b
2 where a.name
高的科目,
注意: testdb中有很多科目,都有1-12月份的发生额
SQL> select * from testdb;
? ACCID OCCMONTH? DEBITOCCUR
------- -------- -----------
??? 101??????? 1????????? 34
??? 101??????? 2????????? 35
??? 101??????? 3????????? 36
??? 101??????? 4????????? 37
??? 102??????? 1????????? 44
??? 102??????? 2????????? 45
??? 102??????? 3????????? 46
??? 102??????? 4????????? 47
??? 103??????? 1????????? 44
??? 103??????? 2????????? 45
??? 103??????? 3????????? 36
??? 103??????? 4????????? 37
12 rows selected
SQL> select distinct accid from testdb where accid not in(
? 2? select b.accid
? 3? from testdb a,testdb b
? 4? where a.accid=‘101‘
? 5? and b.accid<>a.accid
? 6? and a.occmonth=b.occmonth
? 7? and a.debitoccur>=b.debitoccur)
? 8? and accid<>‘101‘;
? ACCID
-------
??? 102
SQL> select * from a;
YEAR MONTH AMOUNT
---- ----- ------
1991???? 1??? 1.1
1991???? 2??? 1.2
1991???? 3??? 1.3
1991???? 4??? 1.4
1992???? 1??? 2.1
1992???? 2??? 2.2
1992???? 3??? 2.3
1992???? 4??? 2.4
8 rows selected
????? YEAR???????? M1???????? M2???????? M3???????? M4
---------- ---------- ---------- ---------- ----------
????? 1991??????? 1.1??????? 1.2??????? 1.3??????? 1.4
????? 1992??????? 2.1??????? 2.2??????? 2.3??????? 2.4
SQL> select 1991 year,1.1 m1,1.2 m2,1.3 m3,1.4 m4 from dual
? 2? union all
? 3? select 1992 year,2.1 m1,2.2 m2,2.3 m3,2.4 m4 from dual;
????? YEAR???????? M1???????? M2???????? M3???????? M4
---------- ---------- ---------- ---------- ----------
????? 1991??????? 1.1??????? 1.2??????? 1.3??????? 1.4
????? 1992??????? 2.1??????? 2.2??????? 2.3??????? 2.4
SQL> select year,
? 2? max(case month when 1 then amount end) m1,
? 3? max(case month when 2 then amount end) m2,
? 4? max(case month when 3 then amount end) m3,
? 5? max(case month when 4 then amount end) m4
? 6? from a group by year;
YEAR???????? M1???????? M2???????? M3???????? M4
---- ---------- ---------- ---------- ----------
1991??????? 1.1??????? 1.2??????? 1.3??????? 1.4
1992??????? 2.1??????? 2.2??????? 2.3??????? 2.4
SQL> select * from
? 2? (select year,amount m1 from a where month=1)
? 3? natural join
? 4? (select year,amount m2 from a where month=2)
? 5? natural join
? 6? (select year,amount m3 from a where month=3)
? 7? natural join
? 8? (select year,amount m4 from a where month=4);
YEAR?? M1?? M2?? M3?? M4
---- ---- ---- ---- ----
1991? 1.1? 1.2? 1.3? 1.4
1992? 2.1? 2.2? 2.3? 2.4
title文章标题
last_time修改时间
username修改人姓名
source文章来源
pin_name作者笔名
SQL> select * from article_history;
TITLE LAST_TIME USERNAME SOURCE PIN_NAME
--------------------------------------------------------
1 2019/12/4 1 s cnblog s
2 2019/12/4 1 l cnblog l
1 2019/12/4 1 s cnblog s
2 2019/12/4 1 l cnblog l
1 2019/12/5 9 s cnblog s
SQL> select title,username,last_time from article_history where
(title,last_time) in(
? 2? select title,max(last_time)
? 3? from article_history
? 4? group by title);
TITLE???????????????USERNAME????????????????LAST_TIME
---------------------------------------------------------
2? ?l???? 2019/12/4 1
1 ?s???? 2019/12/5 9
SQL> create table aa
? 2? (
? 3? key varchar(100),
? 4? value varchar(100)
? 5? );
Table created
SQL>
SQL> create table bb
? 2? (
? 3? key varchar(100),
? 4? value varchar(100)
? 5? );
Table created
SQL>
SQL> insert into aa values(‘aa‘,‘gond‘);
1 row inserted
SQL> insert into aa values(‘bb‘,‘tend‘);
1 row inserted
SQL> insert into aa values(‘cc‘,‘ailie‘);
1 row inserted
SQL> insert into bb values(‘aa‘,‘geng‘);
1 row inserted
SQL> insert into bb values(‘bb‘,‘dlis‘);
1 row inserted
SQL> insert into bb values(‘dd‘,‘lista‘);
1 row inserted
SQL> select * from aa;
KEY??????????????????VALUE
--------------------------------
aa????????????????????gond
bb????????????????????tend
cc????????????????????ailie
SQL> select * from bb;
KEY?????????????????????? VALUE
----------------------------------
aa???????????????????????geng
bb???????????????????????dlis
dd???????????????????????lista
SQL> update bb b
? 2? set value=(select value from aa a where b.key=a.key)
? 3? where exists(select 1 from aa a where b.key=a.key);
2 rows updated
SQL> merge into bb b
? 2? using aa a
? 3? on(b.key=a.key)
? 4? when matched then
? 5??? update
? 6??? set b.value=a.value;
2 rows merged
SQL> select sno 学号,sname 姓名,class 所属班级 from students;
学号?????? 姓名???????????????? 所属班级
---------- -------------------- -----
108??????? 曾华???????????????? 95033
105??????? 匡明???????????????? 95031
107??????? 王丽???????????????? 95033
101??????? 李军???????????????? 95033
109??????? 王芳???????????????? 95031
103??????? 陆君???????????????? 95031
6 rows selected
SQL> select cno 课程编号,cname 课程名称 from courses;
课程编号 课程名称
----- --------------------
3-105 计算机导论
3-245 操作系统
6-166 数据电路
9-888 高等数学
SQL> select sno 学号,cno 课程编号,score 成绩 from scores;
学号? 课程编号?????????????????????? 成绩
----- -------------------- ------------
103?? 3-245??????????????????????? 86.0
105?? 3-245??????????????????????? 75.0
109?? 3-245??????????????????????? 68.0
103?? 3-105??????????????????????? 92.0
105?? 3-105??????????????????????? 88.0
109?? 3-105??????????????????????? 76.0
101?? 3-105??????????????????????? 64.0
107?? 3-105??????????????????????? 91.0
108?? 3-105??????????????????????? 78.0
101?? 6-166??????????????????????? 85.0
107?? 6-106??????????????????????? 79.0
108?? 6-166??????????????????????? 81.0
12 rows selected
SQL> select sno,sname from students where sno in(
? 2? select sno from scores where cno=(
? 3? select cno from courses where cname=‘计算机导论‘));
SNO??????? SNAME
---------- --------------------
103??????? 陆君
105??????? 匡明
109??????? 王芳
101??????? 李军
107??????? 王丽
108??????? 曾华
6 rows selected
SQL> select sname,class from students where sno in(
? 2? select sno from scores where cno=‘3-245‘);
SNAME??????????????? CLASS
-------------------- -----
陆君???????????????? 95031
匡明???????????????? 95031
王芳???????????????? 95031
SQL> select sname,class from students where sno not in(
? 2? select sno from scores where cno=‘6-166‘);
SNAME??????????????? CLASS
-------------------- -----
匡明???????????????? 95031
陆君???????????????? 95031
王芳???????????????? 95031
王丽???????????????? 95033
SQL> select count(distinct sno) from scores;
COUNT(DISTINCTSNO)
------------------
???????????????? 6
SQL> select sno,class from students where sno in(
? 2? select sno
? 3? from scores
? 4? group by sno having count(1)<=3);
SNO??????? CLASS
---------- -----
101??????? 95033
105??????? 95031
109??????? 95031
103??????? 95031
108??????? 95033
107??????? 95033
6 rows selected
SQL> create table aplus(
? 2? id number(6)
? 3? );
Table created
SQL>
SQL> insert into aplus values(1);
1 row inserted
SQL> insert into aplus values(1);
1 row inserted
SQL> insert into aplus values(2);
1 row inserted
SQL> insert into aplus values(2);
1 row inserted
SQL> insert into aplus values(2);
1 row inserted
SQL> insert into aplus values(3);
1 row inserted
SQL> insert into aplus values(3);
1 row inserted
SQL> insert into aplus values(3);
1 row inserted
SQL> insert into aplus values(3);
1 row inserted
SQL> select * from aplus;
ID
-------
1
1
2
2
2
3
3
3
3
9 rows selected
SQL> select id
? 2? from aplus
? 3? group by id
? 4? having count(1)>3;
???? ID
-------
????? 3
注意当月已销售额是指本月第一天到现在的总和
SQL> create table sales(
? 2? pid number(10),
? 3? sale_date date,
? 4? amount number(16)
? 5? );
Table created
SQL> insert into sales
values(1,to_date(20191201,‘yyyy/mm/dd‘),7789);
1 row inserted
SQL> insert into sales
values(2,to_date(20101201,‘yyyy/mm/dd‘),2589);
1 row inserted
SQL> insert into sales
values(1,to_date(20191202,‘yyyy/mm/dd‘),6921);
1 row inserted
SQL> insert into sales
values(2,to_date(20101202,‘yyyy/mm/dd‘),3501);
1 row inserted
SQL> insert into sales
values(1,to_date(20191203,‘yyyy/mm/dd‘),7249);
1 row inserted
SQL> insert into sales
values(2,to_date(20101203,‘yyyy/mm/dd‘),3511);
1 row inserted
SQL> select * from sales;
PID SALE_DATE AMOUNT
----------- ----------- -----------------
1 2019/12/1 7789
2 2010/12/1 2589
1 2019/12/2 6921
2 2010/12/2 3501
1 2019/12/3 7249
2 2010/12/3 3511
6 rows selected
SQL> select pid,sale_date,amount,amount/sum_a
? 2? from (select a.pid,a.sale_date,a.amount,
? 3? (select sum(b.amount) from sales b where a.pid=b.pid) sum_a
? 4? from sales a);
??????? PID SALE_DATE????????????? AMOUNT AMOUNT/SUM_A
----------- ----------- ----------------- ------------
????????? 1 2019/12/1??????????????? 7789 0.3547064984
????????? 2 2010/12/1??????????????? 2589 0.2696594104
????????? 1 2019/12/2??????????????? 6921 0.3151782868
????????? 2 2010/12/2??????????????? 3501 0.3646495156
????????? 1 2019/12/3??????????????? 7249 0.3301152147
????????? 2 2010/12/3??????????????? 3511 0.3656910738
6 rows selected
原文:https://www.cnblogs.com/inmeditation/p/11991727.html