SQL 子查询,连接查询复习

use lianxi0720
go
--创建部门表
create table bumen
(
    bcode int primary key,--部门编号
    bname varchar(20),    --部门名称
    bceo varchar(20),     --部门负责人
    btel varchar(20),     --部门电话
)
go
--创建人员表
create table renyuan
(
    code int primary key identity(10001,1),--人员编号,自增长用identity,从10001开始,每次加1
    name varchar(20),                      --人员姓名
    sex varchar(20),                       --人员性别
    age int,                               --人员年龄
    bc int                                 --部门编号
)
go

--设置好外键关系之后来插入数据
--先插入部门的数据
insert into bumen values(1001,‘财务部‘,‘张三‘,1234567)
insert into bumen values(1002,‘销售部‘,‘李四‘,2345678)
insert into bumen values(1003,‘人事部‘,‘王五‘,3456789)
insert into bumen values(1004,‘技术部‘,‘赵六‘,4567890)
go

--查看所有信息
select * from bumen
--插入人员表的信息
insert into renyuan values(‘张三‘,‘男‘,33,1001)
insert into renyuan values(‘李四‘,‘女‘,27,1002)
insert into renyuan values(‘王五‘,‘男‘,25,1003)
insert into renyuan values(‘赵六‘,‘女‘,24,1004)

insert into renyuan values(‘王祖蓝‘,‘男‘,38,1001)
insert into renyuan values(‘马蓉‘,‘女‘,33,1002)
insert into renyuan values(‘王宝强‘,‘男‘,36,1003)
insert into renyuan values(‘杨颖‘,‘女‘,28,1004)

insert into renyuan values(‘郑凯‘,‘男‘,29,1001)
insert into renyuan values(‘范冰冰‘,‘女‘,40,1002)
insert into renyuan values(‘张伟‘,‘男‘,30,1003)
insert into renyuan values(‘蔡依林‘,‘女‘,37,1004)

go

--查看人员表所有信息
select * from renyuan
--查询年龄最大的认得部门名称
select MAX(age) from renyuan
select bc from renyuan where age=40
select bname from bumen where bcode=1002

--子查询,查询出的结果不是唯一值的时候把等号改成in
select bname from bumen where bcode=
(select bc from renyuan where code=
(select code from renyuan where age=
(select MAX(age) from renyuan)))

--按照升序把年龄排序后的前三个人的所有信息
select top 3 * from renyuan order by age
--按照升序把年龄排序后的第6,7,8个人的所有信息
select top 3 * from renyuan where code not in
(select top 5 code from renyuan order by age)
order by age

--分页查询,要求每页显示5条信息
--第一页
select top 5 * from renyuan
--第二页
select top 5 * from renyuan where code not in(select top 5 code from renyuan)
--第三页
select top 5 * from renyuan where code not in(select top 10 code from renyuan)
--总共有几页:count是int类型,5也是int类型,这样结果就会自动显示int类型,所以要把5改成5.0得到的结果取上线.
select CEILING(COUNT(*)/5.0) from renyuan
--查找销售部里面年龄大于35岁的人的全部信息
select * from renyuan where code in
(select code from renyuan where age>35 and bc=
(select bcode from bumen where bname=‘销售部‘))
--查看所有人员信息,将部门编号替代为部门名称
select code,name,sex,age,(select bname from bumen where bumen.bcode=renyuan.bc) as 部门 from renyuan

--连接查询
--将人员表中的信息全部查出,并且该部门编号为部门名称

--将每个人的主管添加上
select code,name,sex,age,(select bname from bumen where bumen.bcode=renyuan.bc) as 部门,
(select bceo from bumen where bumen.bcode=renyuan.bc)from renyuan
create database lianxi0903
go
use lianxi0903
go
--创建供应商表
create table gong
(
    gcode int primary key,--供应商编号
    gname varchar(20),    --供应商名称
    gtel varchar(20)      --供应商电话
)
go
--创建仓库表
create table cang
(
    ccode int primary key,--货品编号
    cname varchar(20),    --货品名称
    cshu int,             --货品数量
    cprice decimal(18,2), --货品价格
    cgc int               --货品供应商编号
)
go
--创建门店表
create table men
(
    mcode int primary key,--货品编号
    mname varchar(20),    --货品名称
    mshu int,             --货品数量
    mprice decimal(18,2)  --货品价格
)
go
--先建立主外键关系再插入数据

--首先插入供应商数据
insert into gong values(1001,‘蒙牛‘,‘1234567‘)
insert into gong values(1002,‘伊利‘,‘2345678‘)
insert into gong values(1003,‘得益‘,‘3456789‘)
go
--再插入仓库数据
insert into cang values(101,‘高钙纯牛奶‘,5,3,1001)
insert into cang values(102,‘蒙牛酸牛奶‘,6,2.5,1001)
insert into cang values(103,‘优酸乳‘,9,4,1001)

insert into cang values(104,‘伊利纯牛奶‘,4,3.5,1002)
insert into cang values(105,‘高钙酸牛奶‘,2,2.5,1002)
insert into cang values(106,‘大果粒‘,7,4.5,1002)

insert into cang values(107,‘得益纯牛奶‘,6,3,1003)
insert into cang values(108,‘红枣酸奶‘,5,2,1003)
insert into cang values(109,‘低脂酸奶‘,4,2.4,1003)
go
--再插入门店数据
insert into men values(101,‘高钙纯牛奶‘,5,3)
insert into men values(102,‘蒙牛酸牛奶‘,6,2.5)
insert into men values(103,‘优酸乳‘,9,4)

insert into men values(104,‘伊利纯牛奶‘,4,3.5)
insert into men values(105,‘高钙酸牛奶‘,2,2.5)
insert into men values(106,‘大果粒‘,7,4.5)

insert into men values(107,‘得益纯牛奶‘,6,3)
insert into men values(108,‘红枣酸奶‘,5,2)
insert into men values(109,‘低脂酸奶‘,4,2.4)
go

--查看所有信息
select * from men
--查询蒙牛供应商提供的商品中价格最低的商品的所有信息
select top 1 * from men where mname like(‘%蒙牛%‘) order by mprice

select * from men where mprice in
(select MIN(mprice) from men where mcode in
(select ccode from cang where cgc in
(select gcode from gong where gname=‘蒙牛‘)))
and mname like(‘%蒙牛%‘)

--将仓库表中的供应商编号替换为名称
select ccode,cname,cshu,cprice,(select gname from gong where gong.gcode=cang.cgc) as 供应商名称 from cang
--将商品的仓库编号,供应商编号添加上,并且供应商编号替换为名称
select mcode,mname,mshu,mprice,
(select ccode from cang where cang.ccode=men.mcode)as 仓库编号 from men

一、连接查询:通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

常用的两个链接运算符:

1.join   on

2.union

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,随后通过连接进行查询。

二、子查询,又叫做嵌套查询。

将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询。

子查询有两种类型:

一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数;

另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表。

时间: 2024-08-26 12:49:39

SQL 子查询,连接查询复习的相关文章

SQL多表连接查询

SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中不会这样建表,实际开发中这两个表会有自己不同的主键.) 一.外连接 外连接可分为:左连接.右连接.完全外连接. 1.左连接  left join 或 left outer join SQL语句:select * from student left join course on student.

SQL中的连接查询及其优化原则

连接查询是SQL的主要任务,只有很好的掌握了连接查询及其优化方法才算是掌握了SQL的精髓所在.最近在面试中遇到了有关连接查询的问题,感觉回答的不是很好,总结一下. 具体示例请参考:http://www.w3school.com.cn/sql/sql_join.asp 总结: 连接查询原理与代码优化:假如要对table1和table2两个表进行连接查询,则DBMS首先会在table1中找到第一个元组,然后从头开始扫描table2表,逐一查找与table1第一个元组相对应的table2的元组,找到后

MySql学习 - 查询/子查询/连接查询/联合查询

数据库查询 设定两张数据库表 第一个表格user包含: user_id username age sex 1 Alps1992 22 man 第二个表格toy包含 user_id toyname 1 OnePiece 普通查询: 查询关键字: AS, SUM, DESC, GROUP BY, ORDER BY, AVG, MIN, MAX, COUNT, LIMIT; 关键字查询例子 select * from user as u order by age limit 5; // as 用来做别

SQL多表连接查询(详细实例)

转自: http://www.dedecms.com/knowledge/data-base/sql-server/2012/0709/2872.html 本文主要列举两张和三张表来讲述多表连接查询.新建两张表:表1:student  截图如下:表2:course  截图如下:(此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键.)一.外连接外连接可分为:左连接.右连接.完全外连接.1.左连接  left join 或 left oute

SQL 表的连接查询

连接:join 表名 on 关联条件 关键问题,哪些表?哪些关系? 内连接:inner join,两表中完全匹配的数据 select table_2.sname,Table_1.classname from Table_2 inner join Table_1 on Table_2.classid=Table_1.classID--查询2号表的信息对应1号表的相关信息select T2.sname,T1.classname from Table_2 as T2 inner join Table_

MySql高级查询--连接查询

前言 我们使用SQL查询不能只使用很简单.最基础的SELECT语句查询.如果想从多个表查询比较复杂的信息,就会使用高级查询实现. 常见的高级查询包括多表连接查询.内连接查询.外连接查询与组合查询等,今天我们先来学习最常用.面试也很容易被问到的连接查询. 我们今天以一个简单的学生信息表(学生ID.学生姓名.学生性别)与一个学生成绩表(学生ID.学生成绩.成绩等级)作演示: student_info表: student_score表: 一.内连接(INNER JOIN) 1.等值连接 概述:指使用等

MySQL复杂查询:连接查询+取某个类型的最大值

本文链接:https://blog.inchm.cn/default/38.html 需求 假设有一个考试,比如CET(包括CET-4和CET-6),学生可以多次报考刷分.现在某教育单位要从考试结果中把每个学生的CET-6最高分拿出来,然后进行一个排名. 表结构 现在有两个数据表:student 和 exam_result,分别表示学生的基本信息和每次考试结果(包括CET-4和CET-6的结果). 这里不考虑表结构的优化和完整,只给出必要字段. student: 字段名 含义 id ID(主键)

数据库数据的查询----连接查询

关系型数据库中允许表和表之间存在关系,这种关系可以把两个甚至多个表的数据联系在一起.利用这种关系,可以查询出某种符合条件的数据,这些数据将是一套符合实际业务逻辑的数据,而数据中这些表和表之间的关系将不存在.换句话说,获取真实世界的原始数据后,根据某种规则吧它们拆分成各种独立的数据,加入想从数据库中再次获取数据,那么需要依靠当初拆分的规则.而这种规则也可以看成表和表之间的联系,要再次实现这种联系,需要用到连接查询.连接分为内连接.外链接和全连接,还有一种叫做自连接,其中最常用的是内连接和外连接.

MySQL多表查询 三表查询 连接查询的套路

多表查询 * 当我们的一条记录 分散不同的表中时,就需要进行多表查询 例如 一对一 一对多 多对多 1.笛卡尔积查询 意思是将两个表中的所有数据 全部关联在一起   例如 a表 有2条 b表有3条   一共6条   会产生大量的错误数据 需要用添加来过滤select *from 表1,表2,....... where 过滤条件?连接查询内连接查询 inner jon   select *from 表1 join 表2 on 关系过滤条件   两边的数据必须完全匹配成功才显示     select

SQL 中的连接查询

关于SQL的应用,肯定离不开查询,而相对复杂的查询,总是离不开对表的连接,单个表操作的并不罕见,但是在应用环境大多数的查询都是针对2.3个表甚至更多的表7,至于连接,有内连接.外链接.交叉连接之分,每种连接方式都有各自的查询关键字去执行.此时犹记学时对这些概念含糊不分,不知所谓,总是认为课本的知识玄幻深奥,概念晦涩难懂,当然我也时常归咎于是本校师生随手“复印”的教材. 一. 内连接(通过关联信息匹配数据) 1.等值连接(=,有重复)  2.不等值连接(不等式.大小于)   3.自然连接(=,无重