若一个查询同时涉及到两个以上的表,称为连表查询

准备表

create table department(

id int auto_increment PRIMARY KEY,

name varchar(20)

);

department

create table employee(

id int primary key auto_increment,

name varchar(20),

sex enum('male','female') not null default 'male',

age int,

dep_id int,

FOREIGN key (dep_id) references department(id)

on DELETE cascade

on update cascade

);

employee 表

插入数据

insert into department values

(200,'技术'),

(201,'人力资源'),

(202,'销售'),

(203,'运营');

insert into employee(name,sex,age,dep_id) values

('egon','male',18,200),

('alex','female',48,201),

('wupeiqi','male',38,201),

('yuanhao','female',28,202),

('liwenzhou','male',18,200),

('jingliyang','female',18,203)

;

数据

join连表操作

employee 表

department 表

1.把这两张表有关联的部分显示出来

内连接(inner join ) :按照on后边的条件只去两张表有关联的部分,没关联就不显示

内连接有两种方法:

#等值连接方法

select * from employee,department where department.id =employee.dep_id 特点: 这种方法这把这两张表发生关系的记录显示出来,没关系的记录则没有显示#执行过程

在emplyee表中找到一条记录,然后开始从头扫码department表,找到其中的dep_id和department中的id一样的记录,和employee中的那条记录连接起来,形成结果表中的一条记录。重复以上操作,

直到employee表中的记录都处理完毕,这就是嵌套循环连接算法的基本思想

# 缺点

需要一边边的扫码employee表,查询效率低

# 解决方法:在emplyee上创建索引

这个可以用内连接来查询一样的效果,

select * from employee inner join departmen on department.id =employee.dep_id 推荐使用这种方法,这种效率更高

注意:如果多表联合查询不加条件则会出现(笛卡尔乘积)

注意:在使用多表联合查询时,一定要加条件

结果:符合两个表条件的结果

2.把这两张表有关联和没关联的记录显示出来

左连接查询(left join):也就是保留左表记录,右表能与左表发生关系则显示,没发生关系则不显示.

select* from employee LEFT JOIN department on department.id=employee.dep_id

注意:on 表示条件 专门配置 left join 来使用

特点:也就是保留左表记录,右表能与左表发生关系则显示,没发生关系则不显示,右表的数据与左表数据相匹配则显示,不匹配则以NULL填充

结果:

右连接查询(right join):

select* from employee right JOIN department on department.id=employee.dep_id

具体内容和左连接差不多.

全连接查询(left join union right join ):把这两张表有关联和没关联的记录都显示出来

select* from employee LEFT JOIN department on department.id=employee.dep_id

union

select* from employee right JOIN department on department.id=employee.dep_id;

结果:

三表联合查询:A lelf join B on 条件 lefl join C on 条件

自然连接(nature_join):这个是在数据库系统概论中看到的,概念:自然连接是一种特殊的等值连接,他要求两个表中进行比较的属性必须是同名属性,并且在结果中把重复的属性列去掉。很抽象和懵逼,看大神的解释

select * from tbl_ name1 natural join tbl_name2;

in 子查询

子查询又叫嵌套查询

注意:内查询的select语句不能使用order_by子句,order_by只能对最终的查询结果排序

连表查询要比子查询的效率高,因为子查询还要建立一个临时表 ,而连表查询不用

1.查询技术部门和销售部门的人员信息

select * from employee where dep_id in(select id from department where name in('技术','销售'))

结果:

2.查询平均年龄大于25岁的部门?

select id,name from department where id in(select dep_id from employee GROUP BY dep_id having avg(age)>25)

结果:

3.提取空部门名

select name from department where id not in (select distinct dep_id from employee )

使用mysql内连接查询年龄_Mysql的连表查询相关推荐

  1. Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例

    Oracle数据库:oracle内连接inner join on,多表查询各种自链接.内连接.外连接的练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...

  2. mysql内连接的自连接_mysql 内连接、外连接、自连接

    一)内连接(等值连接):查询客户姓名,订单编号,订单价格 --------------------------------------------------- select c.name,o.isb ...

  3. mysql内连接和交叉连接_MySQL中的内连接、外连接、交叉连接

    内连接(INNER JOIN): 分为三种 等值连接.自然连接.不等连接 外连接(OUTER JOIN): 左外连接(LEFT OUTER JOIN或LEFT JOIN) 右外连接(RIGHT OUT ...

  4. mysql从多个表查询数据类型_MySQL 之 多表查询

    阅读目录 一.多表联合查询 #创建部门CREATE TABLE IF NOT EXISTSdept ( didint not null auto_increment PRIMARY KEY, dnam ...

  5. mysql多表查询临时表_MySQL 之多表查询

    阅读目录 一.多表联合查询 #创建部门CREATE TABLE IF NOT EXISTSdept ( didint not null auto_increment PRIMARY KEY, dnam ...

  6. join 子查询 效率_MySQL之多表查询

    多表查询的分类: 笛卡尔积: 左表的每条数据与右表的每条数据的组合 内连接: 用左边表的记录去匹配右边表的记录,如果符合条件的则显示.如:从表.外键=主表.主键 隐式内连接 外连接: 左外连接 子查询 ...

  7. mysql左连接去重查询_mysql之单表查询、多表查询

    mysql查询 单表查询 """ 增: insert [into] [数据库名.]表名[(字段1[,...,字段n])] values (数据1[,...,数据n])[, ...

  8. MySQL 内连接、左连接、右连接、外连接、多表查询

    MySQL 内连接.左连接.右连接.外连接.多表查询 构建环境: create table t_emp(id int primary key, name varchar(20),deptId int ...

  9. MySql 内连接,外连接查询方式区别

    MySql 内连接,外连接查询方式 CREATE TABLE `question_test` (`q_id` int(11) DEFAULT NULL,`q_name` varchar(10) DEF ...

最新文章

  1. 亚里士多德千年前的猜想,被这群MIT本科生向前推进了一步
  2. 服务器接收ios图片无法显示,IOS下图片不能显示问题的解决办法
  3. (0070)iOS开发之AVFoundation枚举属性注解
  4. 计算机视觉之一:特征检测
  5. 通过nginx配置文件抵御攻击
  6. java中byte的范围计算
  7. shell之九九乘法表
  8. 贝叶斯原理及其推断简介
  9. java的断点条件,java – 非行依赖的条件断点
  10. pandas dataframe创建_Python数据分析基础之Pandas学习 (上)
  11. Android的异步多线程消息处理机制
  12. 利用matlab实现卷积实验报告,matlab卷积实验报告.docx
  13. 使用Java对接永中格式转换
  14. 和平精英微信和qq不是一个服务器,和平精英qq和微信能一起玩吗 qq微信数据互通吗...
  15. 监控之Promethus+grafana概述及问题处理
  16. matlab推挽用的变压器,推挽逆变+全桥整流~~~~逆变器变压器设计
  17. cotex单片机寄存器(cm3为例)
  18. 天下武功,唯创不破:Atlassian产品中文版蓄力以待
  19. 早,每天都是一段全新的旅程
  20. 互联网金融学习总结(4)——大数据风控的九种维度

热门文章

  1. 哪些人适合学习web前端?
  2. jquery 获取Select option 选择的Text和Value
  3. Bootstrap 模态框上下居中
  4. 认清Hadoop和Spark的这几点区别,学习时才能事半功倍
  5. OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量
  6. Java中元组的使用
  7. NDK开发 - C/C++ 访问 Java 变量和方法
  8. 不说12306你会Die啊?当然不会,但会憋死
  9. 《人月神话》——外科手术队伍——笔记!
  10. Crystal Reports中的字段