一.多表连接查询

  1. SELECT 字段列表
  2. FROM 1 INNER|LEFT|RIGHT JOIN 2
  3. ON 1.字段 = 2.字段;

  1.交叉连接:不适用任何匹配条件.生成笛卡尔积

  1. select * from department,employee; #表用逗号分隔,看我查询时表的顺序,先department后employee,所以你看结果表的这些字段,是不是就是我们两个表字段并且哪个表在前面,哪个表的字段就在前面

  2.内连接:只连接匹配的行

  1. select * from employee,department where employee.dep_id=department.id;

  3.外连接: 左连接 优先显示左表全部记录

  1. #本质就是:在内连接的基础上增加左边有右边没有的结果 #注意语法:
  2.  
  3. select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id;

  4.外连接: 右连接 有限显示右表全部记录

  1. 本质就是:在内连接的基础上增加右边有左边没有的结果
  2. select employee.id,employee.name,department.name as depart_name from employee right join department on employee.dep_id=department.id;

  5.全外连接:显示左右两个表全部记录

  1. 全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果
  2. #注意:mysql不支持全外连接 full JOIN
  3. #强调:mysql可以使用此种方式间接实现全外连接
  4. select * from employee left join department on employee.dep_id = department.id
  5. union
  6. select * from employee right join department on employee.dep_id = department.id
  7. ;

二.符合条件连接查询

  1. select employee.name,department.name from employee inner join department
  2. on employee.dep_id = department.id
  3. where age > 25;

三.子查询

  子查询其实就是将你的一个查询结果用括号括起来,这个结果也是一张表,就可以将它交给另外一个sql语句,作为它的一个查询依据来进行操作。

1、带IN关键字的子查询

  1. #查看不足1人的部门名(子查询得到的是有人的部门id)
  2. select name from department where id not in (select distinct dep_id from employee);

2、带比较运算符的子查询

  1. #比较运算符:=、!=、>、>=、<、<=、<>
  2. 在用where ,having条件时可以使用

3.带EXISTS关键字的子查询

  1.    EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。TrueFalse
  2.    当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询。还可以写not exists
    exists的效果就是反的

连表

  1. 练习:通过连表的方式来查询每个部门最新入职的那位员工
  2.  
  3. 复制代码
  4. company.employee
  5. 员工id id int
  6. 姓名 emp_name varchar
  7. 性别 sex enum
  8. 年龄 age int
  9. 入职日期 hire_date date
  10. 岗位 post varchar
  11. 职位描述 post_comment varchar
  12. 薪水 salary double
  13. 办公室 office int
  14. 部门编号 depart_id int
  15.  
  16. #创建表,只需要创建这一张表
  17. create table employee(
  18. id int not null unique auto_increment,
  19. name varchar(20) not null,
  20. sex enum('male','female') not null default 'male', #大部分是男的
  21. age int(3) unsigned not null default 28,
  22. hire_date date not null,
  23. post varchar(50),
  24. post_comment varchar(100),
  25. salary double(15,2),
  26. office int, #一个部门一个屋子
  27. depart_id int
  28. );
  29.  
  30. #查看表结构
  31. mysql> desc employee;
  32. +--------------+-----------------------+------+-----+---------+----------------+
  33. | Field | Type | Null | Key | Default | Extra |
  34. +--------------+-----------------------+------+-----+---------+----------------+
  35. | id | int(11) | NO | PRI | NULL | auto_increment |
  36. | name | varchar(20) | NO | | NULL | |
  37. | sex | enum('male','female') | NO | | male | |
  38. | age | int(3) unsigned | NO | | 28 | |
  39. | hire_date | date | NO | | NULL | |
  40. | post | varchar(50) | YES | | NULL | |
  41. | post_comment | varchar(100) | YES | | NULL | |
  42. | salary | double(15,2) | YES | | NULL | |
  43. | office | int(11) | YES | | NULL | |
  44. | depart_id | int(11) | YES | | NULL | |
  45. +--------------+-----------------------+------+-----+---------+----------------+
  46.  
  47. #插入记录
  48. #三个部门:教学,销售,运营
  49. insert into employee(name,sex,age,hire_date,post,salary,office,depart_id) values
  50. ('egon','male',18,'','老男孩驻沙河办事处外交大使',7300.33,401,1), #以下是教学部
  51. ('alex','male',78,'','teacher',1000000.31,401,1),
  52. ('wupeiqi','male',81,'','teacher',8300,401,1),
  53. ('yuanhao','male',73,'','teacher',3500,401,1),
  54. ('liwenzhou','male',28,'','teacher',2100,401,1),
  55. ('jingliyang','female',18,'','teacher',9000,401,1),
  56. ('jinxin','male',18,'','teacher',30000,401,1),
  57. ('成龙','male',48,'','teacher',10000,401,1),
  58.  
  59. ('歪歪','female',48,'','sale',3000.13,402,2),#以下是销售部门
  60. ('丫丫','female',38,'','sale',2000.35,402,2),
  61. ('丁丁','female',18,'','sale',1000.37,402,2),
  62. ('星星','female',18,'','sale',3000.29,402,2),
  63. ('格格','female',28,'','sale',4000.33,402,2),
  64.  
  65. ('张野','male',28,'','operation',10000.13,403,3), #以下是运营部门
  66. ('程咬金','male',18,'','operation',20000,403,3),
  67. ('程咬银','female',18,'','operation',19000,403,3),
  68. ('程咬铜','male',18,'','operation',18000,403,3),
  69. ('程咬铁','female',18,'','operation',17000,403,3)
  70. ;
  71.  
  72. #ps:如果在windows系统中,插入中文字符,select的结果为空白,可以将所有字符编码统一设置成gbk

连表示例

mysql--多表连接查询的更多相关文章

  1. 【连接查询】mySql多表连接查询与union与union all用法

    1.准备两个表 表a: 结构: mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | T ...

  2. mysql多表连接查询

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

  3. Mysql 多表连接查询 inner join 和 outer join 的使用

    JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. 首先先列举本篇用到的分类(内连接,外连接,交 ...

  4. [原创]普通的MySQL多表连接查询

  5. mysql(4)—— 表连接查询与where后使用子查询的性能分析。

    子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表 ...

  6. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  7. Mysql表连接查询

    原文地址: https://www.cnblogs.com/qiuqiuqiu/p/6442791.html 1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等 ...

  8. MySQL数据库:多表连接查询

    多表连接查询 注意:使用连接技术建议将表经行重命名! # explain 检索连接是否达标 # 内连接 # 语法1 from 表1 inner join 表2 on 主键字段=外键字段 [where ...

  9. mysql自关联和多表连接查询

    自关联操作         多表连接查询  inner  join 内查询   left  join  左查询   right  join  右查询                          ...

  10. MySQL多表连接

    主要分3种:内连接,外连接,交叉连接 其        他:联合连接,自然连接 1.内联接 典型的联接运算,使用像 =  或 <> 之类的比较运算).包括相等联接和自然联接. 内联接使用比 ...

随机推荐

  1. linux vim操作技巧

    安装: NERDTree 从 http://www.vim.org/scripts/script.php?script_id=1658  下载 unzip NERD_tree.zip cd ~/.vi ...

  2. 【324】Python 库说明(安装&卸载)

    参考:Python_安装官方whl包和tar.gz包 参考:Unofficial Windows Binaries for Python Extension Packages 参考:PyPI 参考:直 ...

  3. 如何判断html页面停止滚动?

    写在开始的话 查遍的文献,没有找到js或者jquery定义好的方法可用,最后迫不得已自己写了个方法.(如果哪位同学知道有其他方法,欢迎讨论) 代码 var count_index = 0; $(win ...

  4. 23-python用BeautifulSoup用抓取a标签内所有数据

    1.获取子标签: thr_msgs = soup.find_all('div',class_=re.compile('msg'))   for i in thr_msgs:     print(i) ...

  5. 通过curl模拟多线程抓取网页(curl_multi_*)

    curl请求多个url,以前都是使用循环来处理.最近发现可以通过curl_multi_*系列函数来模拟多线程.比对一下,发现如果请求的url只有几个,2种方案耗时差不多,但是url比较多,差距就非常明 ...

  6. SVG脚本编程简介

    本文主要介绍SVG的脚本编程,并分别给出放大.缩小,查询,鼠标事件等实例. 一. SVG简介 SVG,全称为Scalable Vector Graphics(可伸缩矢量图形).它是W3C制定的.用矢量 ...

  7. Java 连接 Hive的样例程序及解析

    以后编程基于这个样例可节省查阅API的时间. private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriv ...

  8. asp.net网站全局控制文件内注册事件

    在管理ASP.NET网站的时候,有时会对网站整体做出控制,这时把这些代码写在global.asax内可以做到全局控制. 未添加任何代码的global.asax文件如下: <script runa ...

  9. jvm编译环境搭建 Debina篇

    这里参考了 <Java虚拟机精讲> <深入理解Java虚拟机 JVM高级特性与最佳实践> http://www.cnblogs.com/zxfdream/p/5411511.h ...

  10. 如何把App放在服务器上供用户下载

    如何把App放在服务器上供用户下载 有时候做了个简单的App想把App给朋友帮忙测试一下,却发现上传到各种平台很麻烦,肿么办?难道一个个拷贝,那也太low啦,不是咱程序员该干的事儿,好的话不多说,开搞 ...