mysql--多表连接查询
一.多表连接查询
- SELECT 字段列表
- FROM 表1 INNER|LEFT|RIGHT JOIN 表2
- ON 表1.字段 = 表2.字段;
1.交叉连接:不适用任何匹配条件.生成笛卡尔积
- select * from department,employee; #表用逗号分隔,看我查询时表的顺序,先department后employee,所以你看结果表的这些字段,是不是就是我们两个表字段并且哪个表在前面,哪个表的字段就在前面
2.内连接:只连接匹配的行
- select * from employee,department where employee.dep_id=department.id;
3.外连接: 左连接 优先显示左表全部记录
- #本质就是:在内连接的基础上增加左边有右边没有的结果 #注意语法:
- select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id;
4.外连接: 右连接 有限显示右表全部记录
- 本质就是:在内连接的基础上增加右边有左边没有的结果
- select employee.id,employee.name,department.name as depart_name from employee right join department on employee.dep_id=department.id;
5.全外连接:显示左右两个表全部记录
- 全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果
- #注意:mysql不支持全外连接 full JOIN
- #强调:mysql可以使用此种方式间接实现全外连接
- 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
- ;
二.符合条件连接查询
- select employee.name,department.name from employee inner join department
- on employee.dep_id = department.id
- where age > 25;
三.子查询
子查询其实就是将你的一个查询结果用括号括起来,这个结果也是一张表,就可以将它交给另外一个sql语句,作为它的一个查询依据来进行操作。
1、带IN关键字的子查询
- #查看不足1人的部门名(子查询得到的是有人的部门id)
- select name from department where id not in (select distinct dep_id from employee);
2、带比较运算符的子查询
- #比较运算符:=、!=、>、>=、<、<=、<>
- 在用where ,having条件时可以使用
3.带EXISTS关键字的子查询
- EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。True或False
- 当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询。还可以写not exists,
和exists的效果就是反的
连表
- 练习:通过连表的方式来查询每个部门最新入职的那位员工
- 复制代码
- company.employee
- 员工id id int
- 姓名 emp_name varchar
- 性别 sex enum
- 年龄 age int
- 入职日期 hire_date date
- 岗位 post varchar
- 职位描述 post_comment varchar
- 薪水 salary double
- 办公室 office int
- 部门编号 depart_id int
- #创建表,只需要创建这一张表
- create table employee(
- id int not null unique auto_increment,
- name varchar(20) not null,
- sex enum('male','female') not null default 'male', #大部分是男的
- age int(3) unsigned not null default 28,
- hire_date date not null,
- post varchar(50),
- post_comment varchar(100),
- salary double(15,2),
- office int, #一个部门一个屋子
- depart_id int
- );
- #查看表结构
- mysql> desc employee;
- +--------------+-----------------------+------+-----+---------+----------------+
- | Field | Type | Null | Key | Default | Extra |
- +--------------+-----------------------+------+-----+---------+----------------+
- | id | int(11) | NO | PRI | NULL | auto_increment |
- | name | varchar(20) | NO | | NULL | |
- | sex | enum('male','female') | NO | | male | |
- | age | int(3) unsigned | NO | | 28 | |
- | hire_date | date | NO | | NULL | |
- | post | varchar(50) | YES | | NULL | |
- | post_comment | varchar(100) | YES | | NULL | |
- | salary | double(15,2) | YES | | NULL | |
- | office | int(11) | YES | | NULL | |
- | depart_id | int(11) | YES | | NULL | |
- +--------------+-----------------------+------+-----+---------+----------------+
- #插入记录
- #三个部门:教学,销售,运营
- insert into employee(name,sex,age,hire_date,post,salary,office,depart_id) values
- ('egon','male',18,'','老男孩驻沙河办事处外交大使',7300.33,401,1), #以下是教学部
- ('alex','male',78,'','teacher',1000000.31,401,1),
- ('wupeiqi','male',81,'','teacher',8300,401,1),
- ('yuanhao','male',73,'','teacher',3500,401,1),
- ('liwenzhou','male',28,'','teacher',2100,401,1),
- ('jingliyang','female',18,'','teacher',9000,401,1),
- ('jinxin','male',18,'','teacher',30000,401,1),
- ('成龙','male',48,'','teacher',10000,401,1),
- ('歪歪','female',48,'','sale',3000.13,402,2),#以下是销售部门
- ('丫丫','female',38,'','sale',2000.35,402,2),
- ('丁丁','female',18,'','sale',1000.37,402,2),
- ('星星','female',18,'','sale',3000.29,402,2),
- ('格格','female',28,'','sale',4000.33,402,2),
- ('张野','male',28,'','operation',10000.13,403,3), #以下是运营部门
- ('程咬金','male',18,'','operation',20000,403,3),
- ('程咬银','female',18,'','operation',19000,403,3),
- ('程咬铜','male',18,'','operation',18000,403,3),
- ('程咬铁','female',18,'','operation',17000,403,3)
- ;
- #ps:如果在windows系统中,插入中文字符,select的结果为空白,可以将所有字符编码统一设置成gbk
连表示例
mysql--多表连接查询的更多相关文章
- 【连接查询】mySql多表连接查询与union与union all用法
1.准备两个表 表a: 结构: mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | T ...
- mysql多表连接查询
新建两张表: 表1:student 截图如下: 表2:course 截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键.) ...
- Mysql 多表连接查询 inner join 和 outer join 的使用
JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. 首先先列举本篇用到的分类(内连接,外连接,交 ...
- [原创]普通的MySQL多表连接查询
- mysql(4)—— 表连接查询与where后使用子查询的性能分析。
子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表 ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- Mysql表连接查询
原文地址: https://www.cnblogs.com/qiuqiuqiu/p/6442791.html 1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等 ...
- MySQL数据库:多表连接查询
多表连接查询 注意:使用连接技术建议将表经行重命名! # explain 检索连接是否达标 # 内连接 # 语法1 from 表1 inner join 表2 on 主键字段=外键字段 [where ...
- mysql自关联和多表连接查询
自关联操作 多表连接查询 inner join 内查询 left join 左查询 right join 右查询 ...
- MySQL多表连接
主要分3种:内连接,外连接,交叉连接 其 他:联合连接,自然连接 1.内联接 典型的联接运算,使用像 = 或 <> 之类的比较运算).包括相等联接和自然联接. 内联接使用比 ...
随机推荐
- linux vim操作技巧
安装: NERDTree 从 http://www.vim.org/scripts/script.php?script_id=1658 下载 unzip NERD_tree.zip cd ~/.vi ...
- 【324】Python 库说明(安装&卸载)
参考:Python_安装官方whl包和tar.gz包 参考:Unofficial Windows Binaries for Python Extension Packages 参考:PyPI 参考:直 ...
- 如何判断html页面停止滚动?
写在开始的话 查遍的文献,没有找到js或者jquery定义好的方法可用,最后迫不得已自己写了个方法.(如果哪位同学知道有其他方法,欢迎讨论) 代码 var count_index = 0; $(win ...
- 23-python用BeautifulSoup用抓取a标签内所有数据
1.获取子标签: thr_msgs = soup.find_all('div',class_=re.compile('msg')) for i in thr_msgs: print(i) ...
- 通过curl模拟多线程抓取网页(curl_multi_*)
curl请求多个url,以前都是使用循环来处理.最近发现可以通过curl_multi_*系列函数来模拟多线程.比对一下,发现如果请求的url只有几个,2种方案耗时差不多,但是url比较多,差距就非常明 ...
- SVG脚本编程简介
本文主要介绍SVG的脚本编程,并分别给出放大.缩小,查询,鼠标事件等实例. 一. SVG简介 SVG,全称为Scalable Vector Graphics(可伸缩矢量图形).它是W3C制定的.用矢量 ...
- Java 连接 Hive的样例程序及解析
以后编程基于这个样例可节省查阅API的时间. private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriv ...
- asp.net网站全局控制文件内注册事件
在管理ASP.NET网站的时候,有时会对网站整体做出控制,这时把这些代码写在global.asax内可以做到全局控制. 未添加任何代码的global.asax文件如下: <script runa ...
- jvm编译环境搭建 Debina篇
这里参考了 <Java虚拟机精讲> <深入理解Java虚拟机 JVM高级特性与最佳实践> http://www.cnblogs.com/zxfdream/p/5411511.h ...
- 如何把App放在服务器上供用户下载
如何把App放在服务器上供用户下载 有时候做了个简单的App想把App给朋友帮忙测试一下,却发现上传到各种平台很麻烦,肿么办?难道一个个拷贝,那也太low啦,不是咱程序员该干的事儿,好的话不多说,开搞 ...