1.建立实验表

  1. CREATE TABLE STUDENT
  2. (SNO VARCHAR2(3) NOT NULL,
  3. SNAME VARCHAR2(40) NOT NULL,
  4. SSEX VARCHAR2(20) NOT NULL,
  5. SBIRTHDAY DATE,
  6. CLASS VARCHAR2(20))
  7. /
  8. CREATE TABLE COURSE
  9. (CNO VARCHAR2(5) NOT NULL,
  10. CNAME VARCHAR2(10) NOT NULL,
  11. TNO VARCHAR2(10) NOT NULL)
  12. /
  13. CREATE TABLE SCORE
  14. (SNO VARCHAR2(3) NOT NULL,
  15. CNO VARCHAR2(5) NOT NULL,
  16. DEGREE NUMERIC(10, 1) NOT NULL)
  17. /
  18. CREATE TABLE TEACHER
  19. (TNO VARCHAR2(3) NOT NULL,
  20. TNAME VARCHAR2(20) NOT NULL, TSEX VARCHAR2(20) NOT NULL,
  21. TBIRTHDAY DATE , PROF VARCHAR2(60),
  22. DEPART VARCHAR2(10) NOT NULL)
  23. /
  24. INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'tom','man','',95033);
  25. INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'jon','man','',95031);
  26. INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'lily','woman','',95033);
  27. INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'mac','man','',95033);
  28. INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'mary','woman','',95031);
  29. INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'fuck','man','',95031);
  30.  
  31. INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-105' ,'computer science',825);
  32. INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-245' ,'operate system' ,804);
  33. INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('6-166' ,'digital circal' ,856);
  34. INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('9-888' ,'maths' ,100);
  35.  
  36. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-245',86);
  37. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-245',75);
  38. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-245',68);
  39. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-105',92);
  40. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-105',88);
  41. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-105',76);
  42. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'3-105',64);
  43. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'3-105',91);
  44. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'3-105',78);
  45. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'6-166',85);
  46. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'6-106',79);
  47. INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'6-166',81);
  48.  
  49. INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
  50. VALUES (804,'Mr Li','man','','js','computer');
  51. INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
  52. VALUES (856,'Mrs Zhang','man','','te','elecitric');
  53. INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
  54. VALUES (825,'Mrs Wang','woman','','ta','computer');
  55. INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)

  2.查询Score表中的最高分的学生学号和课程号。
select sno,cno from score where degree=(select max(degree) from score);

  3.查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
统计用分组:
select avg(degree) from score group by cno having count(cno)>5 and con like '3-%';

  4.create table grade(low   number(3,0),upp   number(3),rank   varchar(10));

SQL> insert into grade values(90,100,'A');

1 row created.

SQL> insert into grade values(80,89,'B');

1 row created.

SQL> insert into grade values(70,79,'C');

1 row created.

SQL> insert into grade values(60,69,'D');

1 row created.

SQL> insert into grade values(0,59,'E');

1 row created.

现查询所有同学的Sno、Cno和rank列。
计算使用子查询传递参数;
select Sno,Cno,rank from score,grade where degree between low and upp;
select sno,cno,(select rank from grade where sc.degree>low and sc.degree<upp) rank from score sc;

  5.查询score中选学两门以上课程的同学中分数为非最高分成绩的记录。
把限制拆开来看;
select * from score where degree not in (select max(degree) from score group by cno) and cno not in (select cno from score group by cno having count(*)<=2);

  6.查询选修某课程的同学人数多于5人的教师姓名。

多表分组(函数)转化为子查询分组;
select tname from teacher where tno in (select tno from score sc,course c where sc.cno=c.cno group by tno having count(*)>5);

  7.查询成绩比该课程平均成绩低的同学的成绩表。
select sname ,cname ,degree from student s,score sc,course c where sc.sno=s.sno and c.cno=sc.cno and degree<(select avg(degree) from score scc where scc.cno=sc.cno);

  8.查询每个班有哪些老师
等价挂载点问题;
班级转化为班里面的sno
老师转化为cno
然后加distinct即为一个班对应一个sno,一个老师对应一个cno

  9.查询“c001”课程比“c002”课程成绩高的所有学生的学号;
select * from score a,score b where a.sno=b.sno and a.cno='3-105' and b.cno='3-245' and a.degree>b.degree;
select * from score a where a.sno in (select b.sno from score b where a.cno='3-105' and a.sno=b.sno and b.cno='3-245' and a.degree>b.degree);

  10.查询没有学全所有课的同学的学号、姓名;
集合做差:

SQL> select * from student where sno in (select sno from (select stu.sno,c.cno from student stu cross join course c minus select sno,cno from score));

  11.查询和“s001”号的同学学习的课程完全相同的其他同学学号和姓名;
集合操作:构造伪满集;

  12.按各科平均成绩从低到高和及格率的百分数从高到低顺序
select avg(degree) ,(sum(case when degree>60 then 1 else 0 end)/count(*)) jige from score group by cno;

  13.查询各科成绩前三名的记录:(不考虑成绩并列情况)
按内部分组编号:
select sno,cno,degree,row_number() over (partition by cno order by degree desc) rn from score;

  14.查询全部学生都选修的课程的课程号和课程名
伪满集操作

  15.列出至少有一个雇员的所有部门
内连接的定义:部门表要在雇员表中出现:俩个表中有相互联系的数据

  16.列出按年薪排序的所有雇员的年薪
select (sal+nvl(comm,0))*12 as avn from emp order by avn

  17.列出薪金水平处于第四位的雇员
Select * from (Select ename,sal, rank() over (order by sal desc) as grade from emp) where grade=4

  18.找出不收取佣金或收取的佣金低于100的雇员
select * from emp where nvl(comm,0)<100;

  19.找出各月最后一天受雇的所有雇员
select * from emp where hiredate= last_day(hiredate);

  20.找出早于25年之前受雇的雇员
select * from emp where months_between(sysdate,hiredate)/12>25;
select * from emp where hiredate<add_months(sysdate,-12*25);

  21显示只有首字母大写的所有雇员的姓名
select ename from emp where ename=initcap(ename);

  22.显示不带有'R'的雇员姓名
Select ename from emp where ename not like ‘%R%’;
Select ename from emp where instr(ename,’R’)=0;

  23.以年、月和日显示所有雇员的服务年限
Select months_between(sysdate,hiredate)/12 as “年”, months_between(sysdate,hiredate) as “月”, sysdate-hiredate as “日” from emp

  24.显示每个员工每天是否有迟到和早退;
8:00--12:00 为迟到, 12:00--18:00为早退

  1. 打卡表 card
  2. SQL> create table card(
  3. cid number(20),
  4. ctime date,
  5. cuser number(20));
  6.  
  7. 人员表 person
  8. create table person(
  9. pid number(20),
  10. name varchar2(10)
  11. )
  12. --插入人员表的数据
  13. insert into person values(1,'a');
  14. insert into person values(2,'b');
  15.  
  16. --插入打卡的数据
  17. insert into card values(1,to_date('','yyyymmddhh24miss'),1);
  18. insert into card values(2,to_date('','yyyymmddhh24miss'),1);
  19. insert into card values(3,to_date('','yyyymmddhh24miss'),2);
  20. insert into card values(4,to_date('','yyyymmddhh24miss'),2);
  21.  
  22. insert into card values(5,to_date('','yyyymmddhh24miss'),1);
  23. insert into card values(6,to_date('','yyyymmddhh24miss'),1);
  24. insert into card values(7,to_date('','yyyymmddhh24miss'),2);
  25. insert into card values(8,to_date('','yyyymmddhh24miss'),2);
  26.  
  27. --分析: 先分组统计出每个人,每天的上班时间和下班时间 即(id,day,mindate,maxdate)
  28. select p.pid as id,
  29. to_char(c.ctime,'yyyymmdd') as day,
  30. to_char(min(c.ctime),'hh24mi') as mindate,
  31. to_char(max(c.ctime),'hh24mi') as maxdate
  32. from card c,person p where c.cuser = p.pid group by p.pid,to_char(c.ctime,'yyyymmdd');
  33. --把上面的分析做成一个视图,判断上班时间是否为迟到 下班时间是否为早退
  34. -- 10 改成
  35. to_char(c.ctime,'yyyymmdd')<=to_char(sysdate-10,'yyyymmdd')
  36.  
  37. select p.name as person_name,
  38. e1.day as work_day,
  39. e1.mindate as AM,
  40. e1.maxdate as PM,
  41. --判断迟到
  42. case
  43. when e1.mindate between '' and '' then 'yes'
  44. else 'no'
  45. end as later,
  46. --判断早退
  47. case
  48. when e1.maxdate between '' and '' then 'yes'
  49. else 'no'
  50. end as leave_early
  51. from
  52. --员工表
  53. person p,
  54. --上面那张视图表
  55. (select
  56. p.pid as id,
  57. to_char(c.ctime,'yyyymmdd') as day,
  58. to_char(min(c.ctime),'hh24mi') as mindate,
  59. to_char(max(c.ctime),'hh24mi') as maxdate
  60. from card c,person p
  61. where
  62. c.cuser = p.pid and
  63. to_char(c.ctime,'yyyymmdd')<=to_char(sysdate-1,'yyyymmdd')
  64. group by p.pid,to_char(c.ctime,'yyyymmdd')
  65. ) e1
  66. where p.pid = e1.id;

  25.删除一张表重复记录(ID 是自增唯一,重复记录:其他字段都是一样)
非常经典的一道面试题(可能存在很多数据,要求性能比较高)

1 louis 20
2 louis 20
3 jimmy 30
4 louis 20
------------------------------------------------------------------
delete from aa where id not in(select min(id) from aa group by name,age);

select a1.id
from a a1,
a a2
where a1.id>a2.id and a1.name=a2.name and a1.age=a2.age and a1.sex=a2.sex

sql 练习(1)的更多相关文章

  1. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  2. SQL Server 大数据搬迁之文件组备份还原实战

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...

  3. Sql Server系列:分区表操作

    1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...

  4. SQL Server中的高可用性(2)----文件与文件组

        在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...

  5. EntityFramework Core Raw SQL

    前言 本节我们来讲讲EF Core中的原始查询,目前在项目中对于简单的查询直接通过EF就可以解决,但是涉及到多表查询时为了一步到位就采用了原始查询的方式进行.下面我们一起来看看. EntityFram ...

  6. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  7. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  8. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

  9. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  10. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

随机推荐

  1. js获取url参数的方法

    js获取url参数的方法有很多. 1.正则分析 function getQueryString(name) { var reg = new RegExp("(^|&)" + ...

  2. PHP学习笔记三十二【Exception】

    <?php // $fp=fopen("a.txt","r"); // echo "ok"; if(!file_exists(&quo ...

  3. html链接

    1. <a href="/index.html">本文本</a> 是一个指向本网站中的一个页面的链接.</p><p><a hr ...

  4. scrollview不能滚动

    1. 图片视图上不能直接滚动,需要设置交互属性为YES _contentView = [[UIImageView alloc]initWithFrame:CGRectMake(0, _headerVi ...

  5. iOS系统相册的有关操作

    iOS中,我们选择相册中的资源和调用摄像头可以使用 :UIImagePickerController类来完成,不使用UI我们可以通过:ALAssetsLibrary类来使用相册资源. 一. ALAss ...

  6. Niagara AX之BajaScript资料哪里找

    四个步骤:(开篇:多谢陈工!) 1.Services下添加box->boxService: 2.在Apps下添加BajaScriptTutorialsApp: 3.登录用户的Web Profil ...

  7. activiti笔记一:流程图xml文件

    一. 流程图有两个基本要素组成:点和线 点:开始节点.结束节点.各种网关.各种事件 线:连接两点之间的sequenceFlow 二. 一般包含三个步骤:部署.启动.完成 三. 启动的时候,可以设置流程 ...

  8. 指令中 controller && controllerAs

    1, controller 他会暴露一个API,利用这个API可以在多个指令之间通过依赖注入进行通信. controller($scope, $element, $attrs, $tranclude) ...

  9. UML中九种图的理解

    1.用例图. 用例图是用来描述用户需求的,从用户的角度来描述系统的功能,并指出各个执行者.强调谁在使用,系统的执行者是谁. 2.类图. 用来定义系统中的类,包括描述类的结构和类之间的关系.类图的主要作 ...

  10. 关于阿里云ESC上go语言项目编译6l: running gcc failed: Cannot allocate memory

    (1)前段时间将自己的阿里云服务器上的系统由centos 6.5换为了ubuntu 14,其他的硬件配置都没有发生改变,将服务器上的数据恢复并且重新安装了golang的编译环境后,发现使用go bui ...