`

约束+典型的查询+几种常见的联结

阅读更多
1.约束
alter table student
  add constraint pk_stu_stuId primary key(stuId)


alter table student
  add constraint ck_stu_stuAge  check(stuAge>0)
 
alter table student
  add constraint uq_stu_stuName  unique(stuName)


alter table student
  add constraint fk_stu_stuCid  foreign key(stuCid) references   class(cid)
 
2查询简述
除了cross join 不可以加on外,其他的join连接必须加上on关键字。

--说明:student 有m条记录,class有n条记录数,两表有t条记录的id匹配.注意:比如Student表有一条记录的id为4,在class表中有10条id为4的记录,则至少有10条记录匹配。所以,即使是内连接,得到的记录也可能大于两表记录之和
(1)--内连接:join,inner join
--内连接:只返回两表连接列的匹配项
--以下三种查询结果一样。
--显示t条记录
select * from student s inner join  class c on s.classid=c.id;
select * from student s       join  class c on s.classid=c.id; 
select * from student s ,class c where s.classid=c.id;         

(2)笛卡尔乘积:cross join
笛卡尔乘积的连接:不加任何条件时,得到M*N的结果集(注:如果在cross  join 后面加where条件,就会与inner join  on的结果一样了)
--以下两种查询结果一样
--显示m*n条记录

select * from student s cross join class c;
select * from student ,class;


(3)左外连接:left join
左外连接:列出左边的表的全部,以及右边表符合条件的,不符合条件的以空值代替。
注:下面两个结果一样。哪个带加号,即哪个需要条件符合,下面的是左连接。
--显示m条记录

select * from student s left join class c on s.classid=c.id;
select * from student s,class c where s.classid=c.id(+);

(4)右外连接
--显示n条记录
select * from student s right join class c on s.classid=c.id;

(5)全外连接:full join(完全外连接) (在右边表最多只有一个符合条件时,记录数为:max in (M ,N)条记录到M+N条记录之间)
  产生M+N的结果集并列出两表的全部的,不符合条件的,以空值代替
--显示m+n-t条记录
select * from student s full join class c on  s.classid=c.id
.







3.查询(19个经典查询)

select * from (
  select emp.*,rownum as rn  from emp  where   rownum<=10  order by sal desc
)b where b.rn>=5

--2. 查询各部门工资最高的员工信息
select * from emp;

select *  from dept;

select * from emp where (deptno,sal) in (
select deptno, max(sal)  from emp group by  deptno
)

--3查询每个部门工资最高的前2 名员工 
--此题十分经典  !!!!!!!!!!!!!!!!!!!!!!!!!!
select * from emp a  where (select count(*) from emp where  sal>a.sal and deptno=a.deptno ) <2
order by   a.deptno


--4. 查询出有3 个以上下属的员工信息
  select * from emp where empno in(
    select b.empno from emp a inner join emp b on a.mgr=b.empno group by  b.empno having count(*)>=3
  )
 
--5. 查询所有大于本部门平均工资的员工信息()
  select * from emp  a  where sal > (select avg(sal) from emp where deptno=a.deptno)


--6. 查询平均工资最高的部门信息
select * from dept where deptno in(
select deptno from emp group by deptno  having avg(sal)>=all (
  select avg(sal) from emp group by deptno
)
)

--7. 查询大于各部门总工资的平均值的部门信息
select * from dept where deptno in (
select deptno from emp  group by deptno having avg(sal)>(select avg(sal) from emp )
)

--8. 查询大于各部门总工资的平均值的部门下的员工信息
select * from emp where sal >(  select avg(sal) from emp)

--9、查询出工资成本最高的部门的部门号和部门名称
select deptno,dname from dept where deptno in (
    select deptno from emp group by deptno  having sum(sal)>=all(
     select sum(sal) from emp group by deptno
  )
)


--10、查询出工资不超过2500的人数最多的部门名称
SELECT dname FROM DEPT WHERE DEPTNO IN (
  select deptno from emp where sal<=2500 group by deptno  HAVING COUNT(*)>=ALL (
  select count(*) from emp where sal<=2500 group by deptno
)
)


--11、查询出没有下属员工的人的名字和他的职位
select ename,job from emp where empno not in (
    select distinct  a.mgr from emp a,emp b where  a.mgr is not null
)

--12、查询出人数最多的那个部门的部门编号和部门名称
select deptno,dname from dept where deptno in (
select deptno from emp  group by deptno  having count(*) >=all (
select count(*) from emp  group by deptno
)
)


--13、查询出没有员工的那个部门的部门编号和部门名称(要求用两种方法,其中一种要用集合运算)
--方法一
select deptno,dname  from  dept where deptno not in (
select distinct deptno from emp 
) 
--方法二

select deptno,dname  from  dept where   deptno in (
select distinct  deptno from dept  --所有的部门号
minus
select distinct deptno from emp   --存在的
)


--14、查询出员工名字以A打头的人数最多的部门名称和员工名字


select b.dname,a.ename from emp  a inner join dept b on  a.ename like 'A%' and a.deptno =b.deptno and a.deptno in (
select deptno  from emp where  ename like 'A%' group  by deptno having count(*) >=all(
select count(*)  from emp where  ename like 'A%' group  by deptno
)
)




--15、现在公司要给员工增加工龄工资,规则是:30*工作年限,请按以下格式显示下面结果:  
      部门名称 员工姓名 原工资 增加额度 新工资
select b.dname 部门名称,a.ename 员工姓名,a.sal 原工资,
floor( months_between(sysdate,hiredate)/12)*30 增加额度,
floor( months_between(sysdate,hiredate)/12)*30+a.sal 新工资  from emp a 
  inner join  dept b on a.deptno =b.deptno;

--16、针对DEPT和EMP表,查询出下面格式的结果并要求按部门编号和工资降序排列。
      部门名称  员工姓名  工资
      select b.dname,a.ename,a.sal from
       emp a left  join dept b on   a.deptno=b.deptno order by a.deptno desc,a.sal desc;
     

--17、针对DEPT和EMP表,查询出下面格式的结果。
      部门编号  部门名称  部门工资最小值  部门工资最大值  部门工资平均值  部门工资合计值
     select b.deptno,b.dname,min(sal),max(sal),avg(sal),sum(sal)
      from emp a inner join dept b on a.deptno=b.deptno group by b.deptno,b.dname

--18、针对DEPT和EMP表,查询出SMITH所在部门的部门名称、部门工资平均值。(要求使用子查询)
select a.dname,b.avgsal from  dept a inner join (
  select deptno,avg(sal) avgsal  from emp where deptno in(
   select deptno from emp where ename='SMITH'
)group by deptno
)b on a.deptno =b.deptno


--19、针对DEPT和EMP表,查询出下面格式的结果。(要求使用外连接,没有员工的部门名也要显示。 员工姓名如果是空值,要求用“不存在”代替;如果工资是空值,要求用0代替。) 
      部门名称  员工姓名  工资
     
      select a.dname, NVL( b.ename,'不存在') ,NVL(b.sal,0) from dept a  full join emp b on a.deptno = b.deptno
     
     
分享到:
评论

相关推荐

    SQL ASP+联结数据库

    ASP是一种微软开发的服务器端脚本环境,它允许开发者创建交互式的Web应用程序。在本例中,我们将讨论如何使用ASP与SQL数据库进行连接,并通过C#语言处理数据。 首先,看到标题"SQL ASP+联结数据库",我们可以理解这...

    逻辑联结词&#8226;典型例题[精选].doc

    常见的逻辑联结词有“或”(or)、“且”(and)、“非”(not)、“如果…那么…”(if…then…)以及“既…又…”等。 1. “或”(或逻辑):表示至少有一个命题为真时,整个复合命题为真。例如,在例2中,命题...

    逻辑联结词典型例题.doc

    逻辑联结词典型例题

    SQL查询中外联结的使用.pdf

    综上所述,外联结是一种非常重要的SQL查询操作,它能够帮助我们处理在多表查询中可能出现的不完整信息问题,确保数据的完整性和查询的准确性。通过理解并掌握外联结的不同类型和用法,可以有效提升数据库查询的效率...

    斜联结管数控加工和工艺(论文+DWG图纸+开题报告).zip

    斜联结管是一种在机械工程、航空航天以及汽车制造等领域广泛应用的结构件,其设计和制造过程中涉及到了多种复杂的工艺和数控技术。这篇论文的主题聚焦于斜联结管的数控加工和工艺,通过深入探讨和实践,旨在提升加工...

    三相变压器联结组的实用判别法.pdf

    本文提出的实用判别法是一种新方法,其主要特点是将联结组的识别简化为几个基本联结组的判别,然后通过匹配标准联结组的相应标签来确定其他联结组。这种方法操作简单、快速,便于现场使用。 为了理解三相变压器联结...

    02D501-2《等电位联结安装》

    等电位联结作为一种重要的电气安全措施,在现代建筑与设施中扮演着不可或缺的角色。它能够有效地减少因电流差引起的电压降,确保人员及设备的安全。02D501-2《等电位联结安装》是针对这一技术的具体应用指南,主要...

    过盈联结的设计、计算与装拆

    过盈联结作为一种机械连接方式,在现代机械设计和制造领域扮演着重要角色。这种联结方法主要依赖于两个配合零件之间的过盈配合来传递载荷,它不需要额外的锁紧装置,因此具有结构简单、承载能力大、抗冲击和振动性能...

    SQL 必知必会 12 - 联结表1

    此外,某些数据库管理系统可能对每个联结约束中表的数量有限制。 此外,联结有时可以替代子查询,以提高查询性能。例如,一个嵌套的子查询可以被转换为联结操作,使得数据检索更加直接和高效。 总的来说,理解并...

    等电位联结目的及规范要求.ppt

    等电位联结分为三种类型:总等电位联结(MEB)、局部等电位联结(LEB)和辅助等电位联结(SEB)。MEB是整个建筑范围内的联结,通过连接PE母排、公用设施管道、建筑金属结构等,降低整个建筑内的接触电压和电位差。...

    行业分类-物理装置-一种三相变压器联结组别状态的验证方法.zip

    验证三相变压器联结组别的方法主要包括以下几种: 1. 直流电阻法:通过测量各相绕组的直流电阻,结合理论计算,可以初步判断联结组别。但这种方法只能提供间接信息,不能直接确定组别。 2. 变比测试法:使用变比...

    sql常见面试题目经典精选汇总.docx

    本资源汇总了 SQL 面试中常见的题目,涵盖了基本的查询、嵌套查询、联结查询、分组查询、聚合函数等多方面的知识点。通过学习这些题目,可以帮助读者更好地理解和掌握 SQL 语言的使用。 知识点一:嵌套查询 嵌套...

    CH6+几个典型的代数系统+6.2+3+环域格布尔代数

    在"CH6 几个典型的代数系统 6.2 3 环域格布尔代数"这个主题中,我们将探讨一些核心概念,包括环、域、格和布尔代数。 首先,让我们从代数系统的概念开始。代数系统是由一个集合以及定义在这个集合上的一个或多个...

    确定三相变压器联结组标号的判定图

    本文介绍了一种简便有效的确定三相变压器绕组联结组别的方法——判定图法,并通过具体的实例说明了该方法的具体应用。传统的确定方法通常需要借助复杂的相量图来分析一、二次绕组之间的相位差,这种方法对于现场工作...

    一文读懂机器学习:基本概念、五大流派与九种常见算法.docx

    机器学习基本概念、五大流派与九种常见算法 机器学习是人工智能领域的一个子领域,通过对大量数据的分析和学习,来发现数据中的模式和规律,并使用这些模式和规律来做出预测和决策。机器学习是人工智能领域的一部分...

    行业文档-设计装置-一种建筑采光板联结装置.zip

    常见的联结装置有固定式和可调节式两种。固定式装置适用于对光线需求稳定的场景,而可调节式装置则可以根据季节变化或用户需求调整采光板的角度,实现更灵活的采光效果。 四、采光板联结装置的材料选择 材料的选择...

    等电位联结安装图集

    等电位联结是一种重要的电气安全措施,主要目的是减少电气设备和建筑物金属部分之间的电压差,从而保护人员免受电击危险。等电位联结安装图集是专门用于指导等电位联结系统设计、安装及验收的技术资料,对于确保电气...

Global site tag (gtag.js) - Google Analytics