数据库多表查询____表连接,子查询

原创 2017年10月07日 00:02:56

内连接查询(使用的关键字 inner join  -- inner可以省略)

隐式内连接:select *from A,B where 条件;

显示内连接:select *from A inner join B on 条件;

外连接查询(使用的关键字 outer join -- outer可以省略)

左外连接:left outer join

select * from A left outer join B on 条件;

右外连接:right outerjoin

select * from A right outer join B on 条件;


 

有两张表,一张员工表,一张部门表。建表和数据的代码如下:

1. 创建部门表(id,name)

# 创建部门表

create table dept(

      idint primary key auto_increment,

      namevarchar(20)

)

 

insert into dept (name) values ('开发部'),('市场部'),('财务部');

 

2. 员工表,员工表(id, 姓名,性别,工资,入职日期,部门ID)

# 创建员工表

create table employee (

      idint primary key auto_increment,

      namevarchar(10),

      genderchar(1),   -- 性别

      salarydouble,   -- 工资

      join_datedate,  -- 入职日期

      dept_idint,

      foreignkey (dept_id) references dept(id) -- 外键,关联部门表(部门表的主键)

)   

 

insert intoemployee(name,gender,salary,join_date,dept_id) values('孙悟空','男',7200,'2013-02-24',1);

insert intoemployee(name,gender,salary,join_date,dept_id) values('猪八戒','男',3600,'2010-12-02',2);

insert intoemployee(name,gender,salary,join_date,dept_id) values('唐僧','男',9000,'2008-08-08',2);

insert intoemployee(name,gender,salary,join_date,dept_id) values('白骨精','女',5000,'2015-10-07',3);

insert intoemployee(name,gender,salary,join_date,dept_id) values('蜘蛛精','女',4500,'2011-03-14',1);

按要求实现下面的查询功能。

操作步骤描述

查询工资最高的员工是谁?

查询工资小于平均工资的员工有哪些?

查询大于5000的员工,来至于哪些部门,输出部门的名字

查询开发部与财务部所有的员工信息,分别使用子查询和表连接实现

查询2011年以后入职的员工信息和部门信息,分别使用子查询和表连接实现

 

 

1) 查询工资最高的员工是谁?

select * fromemployee where salary = (select max(salary) from employee);

 

2) 查询工资小于平均工资的员工有哪些?

      2.1) 查询平均工资

selectavg(salary) from employee;

 

      2.2) 小于平均工资的员工

select* from employee where salary < (select avg(salary) from employee);

 

3) 查询大于5000的员工,来至于哪些部门,输出部门的名字

      3.1) 查询大于5000的员工,来至于哪些部门的id

select dept_idfrom employee where salary >5000;

 

      3.2) 外查询  Subquery returns more than 1row

select * from deptd where d.id in  (select dept_id fromemployee where salary >5000);

 

4) 查询开发部与财务部所有的员工信息

      4.1) 子查询

      select * from employee where dept_id in(select d.id from dept d where d.name='开发部' or d.name='财务部');

 

      4.2) 表连接

      select e.* from employee e inner join deptd on e.dept_id = d.id where d.name='开发部' or d.name='财务部';

 

5) 查询2011年以后入职的员工信息和部门信息

● 使用子查询:

      5.1) 查询出2011年以后入职的员工信息

      select * from employee where join_date >='2011-1-1';

 

      5.2) 查询所有的部门信息,与上面的虚拟表中的信息比对,找出所有部门ID相等的员工。

      select * from dept d ,(select * from employee where join_date>='2011-1-1')  e where d.id =e.dept_id;

 

● 使用表连接:

      select  d.*, e.* from employee einner join dept d on e.dept_id = d.id where e.join_date >= '2011-1-1';

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

本文转自:http://www.cnblogs.com/smyhvae/p/4042303.html 点击打开链接 在这里我自己想补充的一点是:在你建立索引完成时,可是你在navicat的试图...

MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

本章主要内容: 一、外键 二、表连接 三、子查询 四、索引 一、外键: 1、什么是外键2、外键语法 3、外键的条件4、添加外键5、删除外键 1、什么是外键: 主键:是唯一标识一条记录,不能有重复...

[原创]修正SubSonic v2.2.1的一处BUG,以及如何使用SubSonic进行多表查询、子查询以及数据库分页

相信很多同学都用过SubSonic,在07 - 10年ORM兴起的时代,SubSonic可以说是DotNet开发人员的救星。虽说现在 EntityFramework大有一统江湖的趋势,不过在DotNe...

数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum 分页,视图,序列,索引...

sql查询多表查询和子查询

  • 2015年03月24日 12:55
  • 168KB
  • 下载

MySQL多表查询之外键、表连接、子查询、索引

本章主要内容: 一、外键 二、表连接 三、子查询 四、索引 一、外键: 1、什么是外键2、外键语法 3、外键的条件4、添加外键5、删除外键 1、什么是外键: 主键:是唯一标识一...

09--MySQL自学教程:多表查询之内连接、外连接以及【子查询】

1.为什么要拆表?去除冗余数据 2.表与表之间的关系

mysql多表查询,内外连接,自连接,交叉连接,子查询,索引,视图,个人学习总结的

MYSQL外键约束多表查询外连接内连接自连接子查询索引 -------------缪林 自2014-10月总结,转载请尊重原创   字段值类型:date:日期,time,时间,datetime:日期时...

Oracle--多表查询及子查询

多表查询 1、找涉及中的表 2、找表中的关联条件 3、要查询的东西查询出来  ps:n张表,至少要找n-1个关联条件,而且n-1关联条件之间是 and 内连接 查询出雇员的...

MySQL(7):CRUD语句(3)——子查询和多表查询

多表查询,子查询。聚合函数再练习。SQL注入漏洞。疯狂复制数据。
  • qcyfred
  • qcyfred
  • 2016年12月29日 23:38
  • 257
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库多表查询____表连接,子查询
举报原因:
原因补充:

(最多只允许输入30个字)