建表和数据准备

#建表

create table department(id int, name varchar(20));

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);#写入数据

insert into department values (200, "技术"), (201, "销售"), (202, "运营");

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

("haha", "male", 24, 201),

("hax", "male", 24, 201),

("sax", "male", 24, 202),

("sexy", "male", 24, 200),

("proxy", "male", 24, 201);

建表,准备数据

外连接语法

select 字段列表 from 表1 inner | left | right join 表2 on 表1.字段=表2.字段

交叉连接

直接将两张表拼接在一起,不使用任何匹配条件,生成笛卡尔积;

select * from department, employee;

内连接:inner join

找到两张表共有的部分,相当于利用条件在笛卡尔积中筛选出了正确的结果;

select employee.id employee.name employee.age from employee inner join department on employee.dep_id=department.id;

select employee.id employee.name employee.age from employee, department where employee.dep_id=department.id;

这两条SQL语句的效果是等同的;

左外连接:left join

优先显示左表的全部记录,以左表为准,找出所有员工信息,也包括没有部门的员工信息;本质就是在内连接的基础上增加左边有右边没有的结果;

select employee.id, employee.name, department.name as depart_name from employee left join department on employee.dep_id=department.id;

右外连接:right join

优先显示右表的全部记录,以右表为准;

select employee.id, employee.name, department.name as depart_name from employee right join department on employee.dep_id=department.id;

全外连接

在内连接的基础上增加左表有右表没有的和右表有左表没有的结果;mysql不支持全外连接full join;但可以用下面的方式实现全外连接,也就是用union连接上左连接和右连接

select * from employee left join department on employee.dep_id=department.id union select * from employee right join department on employee.dep_id=department.id;

子查询

子查询是将一个查询语句嵌套在另一个查询语句中,内层查询语句的结果可以作为外层查询语句的查询条件;在子查询中可以包含:in、not in、any、all、exists、not exists等关键字,还可以包含 =、!=、>、

带in关键字的子查询

#查询平均年龄在25岁以上的部门名

select id, name from department where id in

(select dep_id from employee group by dep_id having avg(age) > 25);#查看技术部门员工姓名

select name from employee where dep_id in

(select id from department where name="技术");#查看不足1人的部门名称

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

带比较运算符的子查询

#查询 大于 所有人平均年龄的员工名与年龄

select name,age from employee where age > (select avg(age) fromemployee);#查询 大于 部门内平均年龄的员工名、年龄

select t1.name, t1.age from employee t1

inner join

(select dep_id, avg(age) avg_age from employee group by dep_id) t2

on t1.dep_id=t2.dep_id where t1.age > t2.avg_age;

带exists关键字的子查询

exists关键字表示存在,使用exists关键字时,内层查询不返回查询的记录,而是返回一个True或者False;返回True时,外层查询语句将会进行查询;返回值为False时,外层查询语句不进行查询;

#存在id为200的部门,True;可以查询出结果

select * from employee where exists (select id from department where id=200);#不存在id为204的部门,False;

select * from employee where exists (select id from department where id=204);#查询结果为empty

mysql多表in查询_MySQL多表查询相关推荐

  1. desc mysql 连表查询_Mysql连表查询

    mysql的连接 语法: select 查询列表 rom 表1 别名 连接类型 join 表2 别名 on连接条件 where 筛选条件 group by 分组 having 筛选条件 order b ...

  2. mysql多表连接 索引_MySQL多表查询之外键、表连接、子查询、索引

    一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...

  3. golang mysql多表查询_MySQL多表查询

    一 多表连接查询 #重点:外链接语法 SELECT 字段列表 FROM 表1 INNER|LEFT|RIGHT JOIN 表2 ON 表1.字段= 表2.字段; #建表 create table de ...

  4. mysql 回退查询_MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题...

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  5. mysql 多表中间表查询_mysql多表连接查询

    新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键.) ...

  6. mysql多表成绩查询_MySQL多表查询答案

    一.综合练习 1.1 init.sql文件内容 /* 数据导入: Navicat Premium Data Transfer Source Server : localhost Source Serv ...

  7. mssql+mysql联合查询_MySQL 多表查询实现分析

    MySQL 多表查询实现分析 2017年12月12日 | 萬仟网IT编程 | 我要评论 我们继续使用前面的例子.前面建立的表中包含了员工的一些基本信息,如姓名.性别.出生日期.出生地.我们再创建一个表 ...

  8. mysql锁表查询_mysql锁表查询(mysql查询锁表语句)

    mysql锁表查询(mysql查询锁表语句) 2020-07-24 11:44:55 共10个回答 怎么查找mysql中的锁表语句showprocesslist;SHOWPROCESSLIST显示哪些 ...

  9. mysql分表 查询_mysql分表+查询

    mysql分表+查询 垂直分表: 其实没啥好讲,就是 主键+常用列 放在原表中,再讲 主键+一些不常用列 放在另外的表中. 这样一个数据页就可以存放更多数据. 但是缺点也明显,可能会增加join 或 ...

  10. mysql虚拟表查询_mysql虚拟表

    虚拟表,顾名思义,就是实际上并不存在(物理上不存在),但是逻辑上存在的表.这样说很抽象,还是看一些实际的例子吧. 在mysql中,存在三种虚拟表:临时表.内存表和视图.视图会单独讲,本节仅仅将临时表和 ...

最新文章

  1. 在Ant-design-pro框架中引入jQuery和jQuery-ui步骤
  2. ylb:子查询(嵌套子查询)和子查询(相关子查询)
  3. mac运行python速度慢_python-3.x – Pygame简单循环在Mac上运行得非常慢
  4. 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器
  5. MySQL索引背后的数据结构及算法原理(employees实例)
  6. Emacs学习笔记(二)
  7. 微信公众号文章采集浅谈--搜狗APP近一天文章
  8. java号码归属地接口,免费API-手机号码归属地接口
  9. xss.haozi.me通关记录
  10. 恭喜马斯克、纳德拉当选美国工程院院士,张宏江、方岱宁入选外籍院士
  11. 联想微型计算机怎么恢复系统,联想一体机系统还原的方法 联想一体机如何还原系统...
  12. IPQ8072A 如何通过AT指令跟SDX55交互
  13. Urchin = Analytics Google的免费网站统计系统发布
  14. vue.js3D立方体旋转播放特效
  15. grep检索关键字的命令_文件中查找关键字“ ”命令 grep
  16. 云之讯张雯:云计算时代融合通讯开发及算法优化
  17. PC端+移动端 主流浏览器 userAgent 解析
  18. 花与剑尚未获取到服务器信息,“花与剑”12月10日更新公告
  19. Python爬虫实战之电影爬取过程
  20. 西华师范大学计算机学院期末考试,西华师范大学计算机VB试题及答案1

热门文章

  1. 【转】IDEA类和方法注释模板设置(非常详细)
  2. python enumerate() 函数的使用方法
  3. AX2012 R3 Data upgrade checklist sync database step, failed to create a session;
  4. 5.2.3 配置SQL Server代理
  5. python在同一行输入n个数转义符_python:转义符\
  6. jQuery实现点击显示和隐藏内容
  7. 小米蓝牙左右互联_399元,真香!小米蓝牙耳机Air,同价位比有线体验还出色?...
  8. 去掉左边0_TiDB 4.0 在 VIPKID 的应用实践
  9. nginx php重定向,nginx如何重定向信息
  10. plsql登录空白框_王者荣耀空白居中以及重复名的教程[含软件]