20141104数据库join,union

use new

go

--------常用方法-----查销售部里年龄大于35 的人全部信息-------

select *from haha  where age >35 and bumen =(select code from bumen where bumen =‘销售部‘)

--------偏方exists(认识她,会用她就好)哈哈哈-------------

select *from haha  where age >35 and exists (select * from bumen where bumen.code=haha .bumen and bumen .bumen =‘销售部‘)

--把haha 表中bumen 命名为‘部门名’并且显示bumen 里的信息(后面又添加了ceo信息)-select name ,sex ,age,(select bumen  from bumen where bumen.code=haha.bumen )as 部门名,(select ceo from bumen where bumen.code=haha.bumen ) as CEO from haha

--可以select 查询,再命名新列 ,作为添加列

select haha .name ,sex,age,bumen.bumen,ceo from haha,bumen

where haha.bumen=bumen.code

--表格中有的信息列  可以直接添加

select haha.name,sex,age,bumen.bumen ,ceo  from haha

join bumen on haha.bumen =bumen .code

--join 添加列  (注意表达方式)

-------------以上是三种方法,注意表达格式!---------

---join 添加的表on  两个表的连接关系 ---

insert into haha values (16,‘发顺丰‘,‘男‘,41,5)

insert into bumen values (6,‘安保部‘,‘看家‘,null,null)

--插入两行信息为了,方便观察jion xxx  on xxx 作用!

select haha .name ,sex,age,bumen .bumen ,ceo,zhineng from haha

join  bumen on haha .bumen =bumen .code

--

select haha .name ,sex,age,bumen .bumen ,ceo,zhineng from haha

full  join  bumen on haha .bumen =bumen .code

-- full把两份表要提取的信息全部显示,不管信息在两个表中是不是有关系!

select haha .name ,sex,age,bumen .bumen ,ceo,zhineng from haha

left  join  bumen on haha .bumen =bumen .code

-- left 会把左边的表haha要提取的信息全部显示,并且按原顺序排列,不管信息在两个表中是不是有关系!

select haha .name ,sex,age,bumen .bumen ,ceo,zhineng from haha

right join  bumen on haha .bumen =bumen .code

--right 会把右边的表bumen要提取的信息全部显示,并且按原顺序排列,不管信息在两个表中是不是有关系!

-------------联合查询(纵向添加表信息)添加----------

select *from haha where age >40

union                           --要求两个表数据类型对应一样

select *from haha where age <30

--(显示表列名,显示的第一个表列名!两个表的相同信息,连接后自动去重!)

select name,bumen from haha

union

select ceo,code from bumen

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

--创建学生信息表:学号、姓名、班级、性别、语文教师编号、数学教师编号、英语教师编号

create table xuesheng

(

code int ,

name varchar(20),

banji varchar(20),

sex varchar(20),

yuhao int,

shuhao int,

yinghao int,

)

go

insert into xuesheng values(1,‘周一‘,‘2班‘,‘男‘,1001,1007,1009)

insert into xuesheng values(2,‘郑二‘,‘1班‘,‘女‘,1001,1007,1009)

insert into xuesheng values(3,‘张三‘,‘3班‘,‘男‘,1001,1007,1009)

insert into xuesheng values(4,‘李四‘,‘2班‘,‘男‘,1001,1007,1009)

insert into xuesheng values(5,‘王五‘,‘3班‘,‘女‘,1001,1007,1009)

insert into xuesheng values(6,‘赵六‘,‘1班‘,‘男‘,1001,1007,1009)

insert into xuesheng values(7,‘田七‘,‘1班‘,‘男‘,1001,1007,1009)

insert into xuesheng values(8,‘孙八‘,‘3班‘,‘女‘,1001,1007,1009)

insert into xuesheng values(9,‘钱九‘,‘2班‘,‘男‘,1001,1007,1009)

insert into xuesheng values(10,‘吴王‘,‘3班‘,‘男‘,1001,1007,1009)

insert into xuesheng values(11,‘勾践‘,‘2班‘,‘女‘,1001,1007,1009)

insert into xuesheng values(12,‘西施‘,‘1班‘,‘男‘,1001,1007,1009)

select *from xuesheng

--创建教师表:教师编号、姓名、课程、性别、出生日期

create table jiaoshi

(

code int ,

name varchar(20),

kecheng varchar(20),

sex  varchar(20),

shengri varchar(20),

)

go

insert into jiaoshi values(1001,‘赵文‘,‘语文‘,‘男‘,‘1989-09-16‘)

insert into jiaoshi values(1007,‘李数‘,‘数学‘,‘女‘,‘1993-09-1‘)

insert into jiaoshi values(1009,‘张外‘,‘英语‘,‘男‘,‘1988-09-9‘)

select *from jiaoshi

--update jiaoshi set kecheng =‘英语‘where code =1009

--修改的使用方法update haha set bumen=1 where bumen =‘销售部‘

--drop table jiaoshi --删除表

--delete jiaoshi where code =1001--删除表中的列

--创建分数表:语文分数、数学分数、英语分数、学生学号

create table fenshu

(

code  int,

yufen decimal(18,2),

shufen decimal(18,2),

yingfen decimal(18,2),

)

go

insert into fenshu values (1,98,97,99)

insert into fenshu values (2,87,76,88)

insert into fenshu values (3,59,68,99)

insert into fenshu values (4,88,99,77)

insert into fenshu values (5,88,70,97)

insert into fenshu values (6,88,47,69)

insert into fenshu values (7,74,87,77)

insert into fenshu values (8,98,97,99)

insert into fenshu values (9,90,46,99)

insert into fenshu values (10,98,100,99)

insert into fenshu values (11,90,91,79)

insert into fenshu values (12,98,57,99)

select *from fenshu

--分别插入虚拟数据,之后进行查询操作:

--1.查询此次考试语文成绩最高的学生的信息

select top 1  * from fenshu order by yufen desc--找到语文最高分的信息

select  *from  xuesheng where code =

(select top 1 code from fenshu order by yufen desc)

--2.查询此次考试数学成绩最低的学生的任课教师的信息

select top 1 *from fenshu order by shufen

select *from xuesheng where code =(select top 1 code from fenshu order by shufen  )

select *from jiaoshi where code =(select shuhao from xuesheng where code =(select top 1 code from fenshu order by shufen  ))

--3.查询汇总成为一个表:各门课分数、学生姓名、班级、任课教师的姓名

select xuesheng .name ,banji,fenshu.yufen,shufen,yingfen,(select name from jiaoshi where code =(select distinct yuhao from xuesheng) )as 语文老师,(select name from jiaoshi where code =(select distinct shuhao from xuesheng))as 数学老师,(select name from jiaoshi where code =(select distinct yinghao from xuesheng))as 英语老师 from xuesheng

join fenshu on xuesheng.code=fenshu.code

join jiaoshi on xuesheng.yuhao=jiaoshi.code

--在新建的虚拟表里,可以用(select ……)as xxx 任意插入信息列!例如,

select name ,sex ,age,(select bumen  from bumen where bumen.code=haha.bumen )as 部门名,(select ceo from bumen where bumen.code=haha.bumen ) as CEO from haha

--4.查询每个班里数学最高分

--select xuesheng.name,banji,fenshu.shufen from xuesheng

join fenshu on xuesheng.code =fenshu.code

group by banji -–此时xuesheng.name、fenshu.shufen都无效,因为不是聚合函数或者group by 里面不包含。

select banji,zuigaoshu from

(select banji,name,(select MAX(shufen)from fenshu)as zuigaoshu  from xuesheng) group by banji

--新建的虚拟表语句 加(),就代表一个新的表!就可以进行操作。

select banji ,MAX(shufen) as 每班中数学最高分 from xuesheng

join fenshu on xuesheng .code=fenshu .code

group by banji -–此时显示按照班级分组的最高数学成绩

--分组放在最后!聚合函数只能对表的列作用,对虚拟的select语句要在(select……)中查询!

$$$$$$$$老师解法$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

select class,MAX(math) from student

join score on student.code = score.stucode

group by class

select max(math),class from score  --按照第一列所在表 ,写要查询的表

join student on student.code = score.stucode

group by class

select max(math),class from

(select math,(select class from student where student.code = score.stucode) as class from score) as newtable

group by class   --在()作用下,查询select 语句

--5.查询语文课程平均分最高的班级的老师的信息

select *from xuesheng

select *from jiaoshi

select *from fenshu

select *from jiaoshi where code =(

select distinct yuhao from xuesheng where banji=(select top 1 banji from fenshu

join xuesheng on fenshu.code=xuesheng.code

group by banji order by AVG(yufen) desc)

)

$$$$$$$$$老师解法$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

select *from teacher where code=(

select top 1 chteacher from student where class=(

select top 1 class  from student

join score on score.stucode = student.code

group by class order by AVG(chiese) desc   )

)

时间: 2024-10-03 08:02:16

20141104数据库join,union的相关文章

数据库(join) 内连接、外连接、笛卡尔积

今天,重刷了刷leetcode数据库的题目,对数据库连接查询做一个记录. 数据库(join) 内连接.外连接.笛卡尔积 内连接(自身连接) 内连接有隐式内连接和显示内连接两种: 隐式(无join),from后跟多个表名,生成的中间临时表是全部笛卡尔积.最后用where条件筛选 例如: select A.Name from Employee as A, Employee as B where A.ManagerId=B.Id and A.Salary>B.Salary 显示(有join),中间临时

数据库join方式分析

前言    不管是博客园还是CSDN,看到很多朋友对数据库的理解.认识还是没有突破一个瓶颈 ,而这个瓶颈往往只是一层窗纸,越过了你将看到一个新世界.    04.05年做项目的时候,用SQL Server 2000,核心表(大部分使用频繁的关键功能每 次都要用到)达到了800万数据量,很早以前查过一些相关表,有的达到了3000多万,磁 盘使用的光纤盘,100G空间,每周必须备份转移数据,否则100G空间一周会满掉,这个 系统几年来,目前仍然保持非常良好的性能.还听说过朋友的SQL Server

数据库join种类

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.      内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.         2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.      在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:      1)LEFT  JOIN或LEFT OUTER JOIN      左向外联接的结果集包

数据库中union 与union all 的区别

union 将两个表连接后删除其重复的项: union all 将两个表连接都不删除其重复的项. 数据库中,UNION和UNION ALL都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果.实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION.如: select * from users1 union select * from user2 这个

sql inner join , left join, right join , union,union all 的用法和区别

Persons 表: Id_P LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing "Orders" 表: Id_O OrderNo Id_P 1 77895 3 2 44678 3 3 22456 1 4 24562 1 5 34764 65 1.inner

sql 高级 (二)(Alias(别名) sql join UNION 和 UNION ALL)

Alias(别名) eg(使用表名称别名): select po.orderid,p.lastname,p.firstname from persons as p,product_orders as po where p.lastname='adams' and p.firstname='john'(使用别名) select product_orders.orderid,persons.lastname,persons.firstname from persons,product_orders

Spark SQL 之 Join 实现

原文地址:Spark SQL 之 Join 实现 Spark SQL 之 Join 实现 涂小刚 2017-07-19 217标签: spark , 数据库 Join作为SQL中一个重要语法特性,几乎所有稍微复杂一点的数据分析场景都离不开Join,如今Spark SQL(Dataset/DataFrame)已经成为Spark应用程序开发的主流,作为开发者,我们有必要了解Join在Spark中是如何组织运行的. SparkSQL总体流程介绍 在阐述Join实现之前,我们首先简单介绍SparkSQL

Postgres数据库基本介绍

最近一直在做一个和PostgreSQL数据库相关的项目,把自己在这个过程中学习的知识记录下来.关于PostgreSQL数据库网上已经有太多的相关介绍了,为了博文的系统性还是先看一下维基百科对PostgreSQL数据库的介绍吧. PostgreSQL是自由的对象-关系型数据库服务器(数据库管理系统),在灵活的BSD-风格许可证下发行.它在其他开放源代码数据库系统(比如MySQL和Firebird),和专有系统比如Oracle.Sybase.IBM的DB2和Microsoft SQL Server之

SQL JOIN 简单介绍

前言 本文还是秉持之前一贯的写作风格,以简单易懂的示例帮助大家了解各种join的区别. 为什么需要join 为什么需要join?join中文意思为连接,连接意味着关联即将一个表和多个表之间关联起来.在处理数据库表的时候,我们经常会发现,需要从多个表中获取信息,将多个表的多个字段数据组装起来再返回给调用者.所以join的前提是这些表之间必须有关联字段. join的分类 join分为两种,inner join和outer join,其中outer join分为三种,left outer join,