一.多表连接查询

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

连表示例

最新文章

  1. debain 8安装为知笔记(how to install wiznote in debain 8)
  2. UITextView: 响应键盘的 return 事件(收回键盘)
  3. java画图程序_图片用字母画出来_源码发布_版本二
  4. linux 系统下,如何清空文件内容
  5. 用C#来查看电脑硬件和系统信息
  6. Java如何根据IP获取当前定位
  7. java基础04 匿名内部类
  8. IT企业如何实现项目管理信息化的目标
  9. mysql在增加列前进行判断该列是否存在
  10. Linux常用命令大全(转)
  11. 利用JS打印质数
  12. scrollView 刷新显示在中间的问题
  13. redis概览
  14. Makefile Demo案例
  15. Fzu软工第二次作业-词频分析
  16. 【leetcode 简单】 第五十八题 计数质数
  17. CodeChef SADPAIRS:Chef and Sad Pairs
  18. Codeforces Round #346 (Div. 2) G. Fence Divercity dp
  19. string类(二、常用string函数)
  20. (转)用javamail发送带附件的邮件

热门文章

  1. Spring启动时获取自定义注解的属性值
  2. curl常用设置-涉及超时相关
  3. U3D SCENEMANAGER.LOADSCENE是半异步的
  4. 【330】word - VBA 相关实现
  5. 响应式设计的思考:媒体查询(media query)
  6. 对List集合进行排序
  7. Python运维开发基础09-函数基础
  8. ADT下载地址整理(转)
  9. Node节点部署
  10. C++ std::thread