子查询,分页查询,连接查询

use student
create table bumen
(
bcode int primary key,
bname varchar(50),
bzhi varchar(50)
)
go
create table ren
(
code int identity(1,1),
name varchar(50),
age int,
sex char(10),
cid varchar(50),
bumen int
)
go
insert into bumen values(1001,‘人事部‘,‘负责人员面试考核‘)
insert into bumen values(1002,‘市场部‘,‘负责开拓市场‘)
insert into bumen values(1003,‘销售部‘,‘负责产品销售‘)
insert into bumen values(1004,‘生产部‘,‘负责产品生产‘)
insert into bumen values(1005,‘质检部‘,‘负责产品质量检验‘)
go

insert into ren values(‘张三‘,24,‘男‘,‘370303199903044440‘,1002)
insert into ren values(‘李四‘,25,‘女‘,‘370303199905044440‘,1001)
insert into ren values(‘王五‘,26,‘男‘,‘370303199907044440‘,1002)
insert into ren values(‘赵六‘,27,‘女‘,‘370303199908044440‘,1001)
insert into ren values(‘冯七‘,28,‘男‘,‘370303199909044440‘,1003)
insert into ren values(‘钱大‘,29,‘女‘,‘370303199901044440‘,1001)
insert into ren values(‘赵二‘,22,‘男‘,‘370303199911044440‘,1003)
insert into ren values(‘陈赫‘,31,‘男‘,‘370303199912044440‘,1001)
insert into ren values(‘王祖蓝‘,32,‘女‘,‘370303199904044440‘,1004)
insert into ren values(‘宝贝儿‘,33,‘男‘,‘370303199903034440‘,1004)
insert into ren values(‘李晨‘,34,‘女‘,‘370303199903224440‘,1004)
insert into ren values(‘范爷‘,35,‘男‘,‘370303199903234440‘,1005)
insert into ren values(‘任泉‘,36,‘男‘,‘370303199903254440‘,1002)
insert into ren values(‘李冰冰‘,37,‘男‘,‘370303199903264440‘,1003)
insert into ren values(‘冯小刚‘,38,‘女‘,‘370303199903274440‘,1005)
insert into ren values(‘郭德纲‘,39,‘男‘,‘370303199903284440‘,1004)
insert into ren values(‘赵本山‘,40,‘女‘,‘370303199903294440‘,1004)

1、子查询

--查看销售部有哪些人
select*from ren where bumen=(select bcode from bumen where bname=‘销售部‘)
--查看张三所属的部门职责
select bzhi from bumen where bcode=(select bumen from ren where name=‘张三‘)
--查询部门人数最多的部门里面年龄最大的人员的所有信息
select top 1*from ren where bumen=(select top 1 bumen from ren group by bumen order by COUNT(*)desc) order by age
--按照年龄排序,从小到大,不要前五个人的
select *from ren where code not in (select top 5 code from ren order by age )
--找男职员里面年纪最大的全部信息
select *from ren where age=(select top 1 age from ren where sex=‘男‘ order by age desc)
select *from ren where age=(select MAX(age) from ren where sex=‘男‘ )

--将人员表内部门的编码转换成部门名称查询出来
select ren.code,name,age,sex,cid,bumen.bname from ren,bumen where ren.bumen=bumen.bcode
--查询销售部里的年龄大于30岁的人的所有信息
select *from ren where bumen=(select bcode from bumen where bname=‘销售部‘)and age>30
--查看所有人员的生日
select name,SUBSTRING(cid,7,4)+‘年‘+SUBSTRING(cid,10,2)+‘月‘+SUBSTRING(cid,12,2)+‘日‘from ren
--查看编号为5的人的生日
select name ,SUBSTRING(cid,7,4)+‘年‘+SUBSTRING(cid,10,2)+‘月‘+SUBSTRING(cid,12,2)+‘日‘from ren where code=5
--查年龄是25,26,27所有人的数据
select*from ren where age in(25,26,27)
--查看有没有跟2,3,4一样大的人员
select *from ren where age in(select age from ren where code in(2,3,4))

2、分页查询

--前五条
select top 5*from ren
--第6-10条
select top 5*from ren where code not in (select top 5 * from ren )
--想在一开始就想知道能分成几页(五条一页)
select CEILING(COUNT(*)/5.0)from ren

3、连接查询

--join on 连接查询
select ren.name,sex,age,cid,bumen.bname from ren join bumen on ren.bumen=bumen.bcode
--在上面的基础上,将每个部门的部门职责放在后面显示
select ren.name,sex,age,cid,bumen.bname,bzhi from ren join bumen on ren.bumen=bumen.bcode
--在表中插入两条不完整的数据
insert into bumen values(6,‘科研‘,null)
insert into ren values(‘奥巴马‘,67,null,null,null)
--全部查询 full
--信息不完整时还想查到所有数据,可以在join前面加上full
select ren.name,sex,age,cid,bumen.bname,bzhi from ren full join bumen on ren.bumen=bumen.bcode
--左查询 left
--只管第一个表的所有数据全部显示,不管第二个表的不完整数据
select ren.name,sex,age,cid,bumen.bname,bzhi from ren left join bumen on ren.bumen=bumen.bcode

--右查询 right
--只管第二个表的所有数据全部显示,不管第一个表的不完整数据
select ren.name,sex,age,cid,bumen.bname,bzhi from ren right join bumen on ren.bumen=bumen.bcode

--union 上下拼接
--注意:所拼接的列的数据类型要一致
--查询code值为1 和code值为2 的两个人的所有信息
select*from ren where code =2
union
select*from ren where code=1
--人员表的code列和name列拼接上部门表的bcode列和bname列
select code ,name from ren
union
select bcode,bname from bumen

--给宣传部加上职能的信息
update bumen set bzhi=‘宣传企业文化‘ from bumen where bname=‘科研‘

--人员表的code列和name列sex拼接上部门表的bcode列和bname列bzhi列
select code ,name ,sex from ren
union
select bcode,bname ,bzhi from bumen

--年龄大于37和年龄小于27的员工信息
select*from ren where age>37or age<27

时间: 2024-11-05 13:51:45

子查询,分页查询,连接查询的相关文章

MySQL学习——SQL查询语句(连接查询&amp;子查询)(三)

一:连接查询: 连接查询是将俩个或者俩个以上的表按照某个条件连接起来,从中选择需要的数据,连接查询同时查询俩个或者俩个以上的表时使用,当不同的表中存在表示相同意义的字段时,可以通过该字段来连接这几个表,例如,学生表中有course_id字段来表示所学课程的课程号,课程表中有num字段来表示课程号,那么可以通过学生表中的course_id字段与课程表中的num字段来进行连接查询,连接查询包括内连接查询和外连接查询. 1.1 内连接查询 内连接查询是一种常用的连接查询,内连接查询可以查询俩个或者以上

003.分组统计查询和表连接查询

--分组统计查询 group by having 1 select 分组字段 ,聚合函数 2 having 后常跟聚合函数,也可以跟分组字段 3 where 后不可以直接跟聚合函数 4 where(筛选行) -group by (分组) -having (筛选组) --表连接查询 1 笛卡尔积 (交叉连接 cross join) a*b A) SELECT * FROM A,B B) SELECT * FROM A CROSS JOIN B 2 内连接 原理: 将两个表中关联字段相等的行查询出来

菜鸟笔记——纠结的左外连接查询和右外连接查询

1.前言 外连接查询也是很基础的知识,可是我也花了几个小时才理解透.在本文不太过多用书本语言来描述,我会以自己的思维理解和描述该知识 2.引出  首先,连接查询的方法也有很多.但是有些知识点学了,我们必须清楚会在什么情况下用到. 例:查询没有参加考试的学生信息.  按常规的做法内连接查询是无法得到的,为什么?因为内连接查询时,数据结果集是匹配条件列相等的数据.如果某行数据匹配的列的值不相等,那么行 数据将不会显示.这时候就需要用到外连接查询. 3.什么是做表?什么是右表? 写在关键字Left j

有时候子查询比左连接查询速度快

最近几天在优化数据库,有些数据表因为建立时候不合理导致查询的时候速度比较慢,比如三个表,三个表中数据最少的都是十万条,这些表在左联或者右联的时候速度可能需要几秒钟,再加上where条件,条件中再加or,这时候速度是非常的慢的,往往需要10秒以上,这时候可以用子查询或者union 或者union all 代替,根据情况而定 比如这个语句用子查询速度就比较快 原来的语句: select K.EmployeeNumber, K.PositionName, K.Name, K.SkillWages, k

将子查询改为连接查询

例:select * from score where event_id in(select event_id from grade_event where catagery='T'); 转换为简单的连接操作 select * from score whre event_id inner join grade_event on score_id=grade_eventId where catagery='T' union:默认情况下进行的是连接操作,默认情况union会去除掉重覆的语句行 uni

分组查询与内外连接查询

一. 分组查询 1.语法 SELECT ... FROM ... GROUP BY ... --分组查询Group by    select COUNT(*) as 学生人数,GradeId as 年级编号 from Student group by GradeId 2.进行多表之间的分组查询 --查询每门课程的平均分    --where 和 group by 和 order by 的顺序    select AVG(StudentResult) as 平均分,SubjectName as 课

多表查询分页[多次查询]

问题描述: 1:我们使用PageHelper插件的时候,PageHelper.startPage(pageNow,pageSize)要放在查询语句的前面 2:当startPage的后面有多次查询的话,它只对第一条查询语句有效果 3:假如要进行多次查询,然后对结果进行分页,关注点是:对最后的结果进行分页,而不是第一次查询出来的结果 最终解决办法有2种:第一种:依旧是用老套路,用原始自己写的PageUtil做[因为里面存放的数据就是List的,所以将最终查询的结果(不管你查询多少次)直接放进去即可]

MySQL查询速度测试-&gt;连接查询

快速生成大量数据 INSERT INTO tableName1(pn_code,belong_id,factory_number) SELECT pn_code,belong_id,factory_number FROM tableName1 四张表合计4000万条数据, 如果不带where,联查的速度是非常快的,前提是需要带limit,limit越小越快, 如果联查后带where 筛选,速度会非常慢,所以大数据量下,有where根据实际情况,可以分批进行查询 下面附带记得函数和存储过程备用 1

MySql学习(三) —— 子查询(where、from、exists) 及 连接查询(left join、right join、inner join、union join)

同样的,使用goods表来练习子查询,表结构如下: 所有数据(cat_id与category.cat_id关联): 类别表: mingoods(连接查询时作测试) 一.子查询 1.where型子查询:把内层查询的结果作为外层查询的比较条件 1.1 查询id最大的一件商品(使用排序+分页实现) :mysql> SELECT goods_id,goods_name,shop_price FROM goods ORDER BY goods_id DESC LIMIT 1; 1.2 查询id最大的一件商