使用mysql内连接查询年龄_Mysql的连表查询
若一个查询同时涉及到两个以上的表,称为连表查询
准备表
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的连表查询相关推荐
- Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
Oracle数据库:oracle内连接inner join on,多表查询各种自链接.内连接.外连接的练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...
- mysql内连接的自连接_mysql 内连接、外连接、自连接
一)内连接(等值连接):查询客户姓名,订单编号,订单价格 --------------------------------------------------- select c.name,o.isb ...
- mysql内连接和交叉连接_MySQL中的内连接、外连接、交叉连接
内连接(INNER JOIN): 分为三种 等值连接.自然连接.不等连接 外连接(OUTER JOIN): 左外连接(LEFT OUTER JOIN或LEFT JOIN) 右外连接(RIGHT OUT ...
- mysql从多个表查询数据类型_MySQL 之 多表查询
阅读目录 一.多表联合查询 #创建部门CREATE TABLE IF NOT EXISTSdept ( didint not null auto_increment PRIMARY KEY, dnam ...
- mysql多表查询临时表_MySQL 之多表查询
阅读目录 一.多表联合查询 #创建部门CREATE TABLE IF NOT EXISTSdept ( didint not null auto_increment PRIMARY KEY, dnam ...
- join 子查询 效率_MySQL之多表查询
多表查询的分类: 笛卡尔积: 左表的每条数据与右表的每条数据的组合 内连接: 用左边表的记录去匹配右边表的记录,如果符合条件的则显示.如:从表.外键=主表.主键 隐式内连接 外连接: 左外连接 子查询 ...
- mysql左连接去重查询_mysql之单表查询、多表查询
mysql查询 单表查询 """ 增: insert [into] [数据库名.]表名[(字段1[,...,字段n])] values (数据1[,...,数据n])[, ...
- MySQL 内连接、左连接、右连接、外连接、多表查询
MySQL 内连接.左连接.右连接.外连接.多表查询 构建环境: create table t_emp(id int primary key, name varchar(20),deptId int ...
- MySql 内连接,外连接查询方式区别
MySql 内连接,外连接查询方式 CREATE TABLE `question_test` (`q_id` int(11) DEFAULT NULL,`q_name` varchar(10) DEF ...
最新文章
- 亚里士多德千年前的猜想,被这群MIT本科生向前推进了一步
- 服务器接收ios图片无法显示,IOS下图片不能显示问题的解决办法
- (0070)iOS开发之AVFoundation枚举属性注解
- 计算机视觉之一:特征检测
- 通过nginx配置文件抵御攻击
- java中byte的范围计算
- shell之九九乘法表
- 贝叶斯原理及其推断简介
- java的断点条件,java – 非行依赖的条件断点
- pandas dataframe创建_Python数据分析基础之Pandas学习 (上)
- Android的异步多线程消息处理机制
- 利用matlab实现卷积实验报告,matlab卷积实验报告.docx
- 使用Java对接永中格式转换
- 和平精英微信和qq不是一个服务器,和平精英qq和微信能一起玩吗 qq微信数据互通吗...
- 监控之Promethus+grafana概述及问题处理
- matlab推挽用的变压器,推挽逆变+全桥整流~~~~逆变器变压器设计
- cotex单片机寄存器(cm3为例)
- 天下武功,唯创不破:Atlassian产品中文版蓄力以待
- 早,每天都是一段全新的旅程
- 互联网金融学习总结(4)——大数据风控的九种维度