MySQL 进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接
#进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接
/*
含义: 当查询的字段来自于多个表时, 就会用到连接查询 一: sql 92标准 :等值连接 ,(#内连接)
1.可以为表区别名,区分多个重名的字段
2.为表使用别名后,只能使用别名去"select"! 二:非等值连接
1.where 列名 BETWEEN ... AND ...
三:自连接 :自己连接自己 四:左 / 右 外连接
1.应用场景: 用于查询一个表有内容,另一个表没有内容
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
2.左外连接, left OUTER join (左边的是主表)
on 连接关系
where 筛选条件
3.右外连接,right OUTER join (右边的是主表)
on 连接关系
where 筛选条件 五:#全外连接 = 内连接的结果 + 表1中有但表2中没有的 + 表2中有的但表1中没有的
#MYSQL不支持!! Oracle数据库 六:#交叉连接
实现笛卡尔成绩,实现两个表的任意两项进行连接! 七:sql 92 和 sql 99 */ #查询对偶姓名匹配 SELECT beauty.`name`,boys.`boyName`
FROM beauty,boys
WHERE beauty.`boyfriend_id`=boys.`id`; #案例2: 查询员工名和对应的部门名 SELECT last_name,department_name
FROM employees,departments
WHERE employees.`department_id`=departments.department_id; #3.查询员工名/工种号/工种名 #使用别名
SELECT e.`last_name` ,e.`job_id`,j.`job_title`
FROM employees e,jobs j
WHERE e.`job_id`=j.`job_id`; #4.查询有奖金的员工名和部门名
SELECT e.`last_name`,e.`department_id`
FROM employees e,departments d
WHERE e.`department_id`=d.`department_id`; #5.查询每个工种的工种名和员工的个数, 并且按员工个数排序
SELECT j.`job_title`,COUNT(*)
FROM jobs j,employees e
WHERE j.`job_id`=e.`job_id`
GROUP BY j.`job_title`
ORDER BY COUNT(*) DESC; #2 / 非等值连接 #案例1:查询员工的工资和工资级别
SELECT salary,grade_level
FROM employees e,job_grades g
WHERE e.salary BETWEEN g.`lowest_sal` AND g.`highest_sal`; #3 / 左 . 右 外连接
#案例1:查询女生的男朋友不在boys 表中的 女生 -- [左外连接]
SELECT b.name,bo.*
FROM beauty b
LEFT OUTER JOIN boys bo
ON b.`boyfriend_id`=bo.`id`
WHERE bo.`id` IS NULL ; #案例2: 查询哪个部门没有员工
SELECT d.*,e.employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.`department_id`=e.`department_id`
WHERE e.employee_id IS NULL; #全外连接 = 内连接的结果 + 表1中有但表2中没有的 + 表2中有的但表1中没有的
#MYSQL不支持!! #交叉连接
SELECT b.*,bo.*
FROM beauty b
CROSS JOIN boys bo; #内连接 SELECT *
FROM beauty b
INNER JOIN boys
ON b.`boyfriend_id`=boys.`id`;
MySQL 进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接的更多相关文章
- laravel利用subquery使左连接查询右表数据唯一查询
如:表a,连接表b,b中有多条符合查询的记录 1.建立需要的子查询 $sub = DB::table('b')->select(['aid'])->selectRaw('max(id) a ...
- MySQL连接查询驱动表被驱动表以及性能优化
准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...
- Sql语句优化-查询两表不同行NOT IN、NOT EXISTS、连接查询Left Join
在实际开发中,我们往往需要比较两个或多个表数据的差别,比较那些数据相同那些数据不相同,这时我们有一下三种方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用连接查询(i ...
- mysql数据库导入导出 查询 修改表记录
mysql数据导入导出: 导入: 把系统的文件的内容,保存到数据库的表里 导入数据的基本格式:mysql> load data infile "文件名" into table ...
- MySQL进阶8 分页查询(limit) - 【SQL查询语法执行顺序及大致结构】- 子查询的3个经典案例
#进阶8 分页查询 /* 应用场景: 当要显示的数据,一页显示不全,需要分页提交sql请求 语法: select 查询列表 #7 from 表1 #执行顺序:#1 [join type join 表2 ...
- 2_05_MSSQL课程_查询_where,group by,having的区别以及内连接、案例练习
SQL查询顺序 select distinct/top ..._ (5) 投影 from_(1)找到表 where_ (2)过滤掉我们不需要的数据 group by_ (3)分组操作 h ...
- MySQL进阶 9: 联合查询 - 查询语句1 union 查询语句2 union ...
#进阶 : 联合查询 /* union 联合 合并: 将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union ... 应用语境: 要查询的结果来自多个表,但查询的列 ...
- MySQL 进阶3 排序查询
#进阶3 排序查询 格式: select 查询列名 from 表 [where 筛选条件] order by 排序列名 [asc / desc] 排序查询/嵌套排序查询/函数查询/[按别名进行 排序] ...
- MySQl 进阶一 基本查询及练习
知识点及练习 USE myemployees; #.查询表中的单个字段 SELECT last_name FROM employees; #.查询表中多个字段 #.查询全部 SELECT * FROM ...
随机推荐
- 【LOJ】#2137. 「ZJOI2015」诸神眷顾的幻想乡
我居然到了国赛之前才学习怎么做广义后缀自动机 这个题目--意思是--有20个叶子,肯定一条路径都是任意一个叶子为根,一个从某个点往祖先走的路径 这样的话我们可以按照dfs序,从每个节点的父亲那里的后缀 ...
- 第一坑:class编译版本
这个坑是刚去公司的时候,公司项目运行环境的jdk版本是1.5,当时我编译版本是1.7,然后放上去一直报找不到class的错误,我硬是找了半天,后来才听说要用1.5版本编译.
- Spring Bean装配详解(五)
装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中. 大部分场景下,我们都会使用 Appl ...
- zabbix硬件监控以及服务
大家好今天给大家带来zabbix3.4.8监控主机,那么最近由于我个人的关系.没有及时的更新文章所以,很抱歉那么今天我分享的内容是zabbix3.4.8监控服务器.本章的具体监控服务器如下: 服务器的 ...
- WUSTOJ 1291: 2n皇后问题(Java)
题目:
- Python之装饰器笔记
概述: 用于管理和增强函数和类行为的代码 提供一种在函数或类定义中插入自动运行代码的机制 特点 更明确的语法.更高的代码可维护性.更好的一致性 编写 函数基础: 将函数赋给变量.将函数作为参数传递. ...
- Gossip协议
Gossip数据传播协议: Fabric通过将工作负载划分到事务执行(背书和提交)对等节点和事务排序节点,优化了区块链网络性能.安全性和可伸缩性.这种网络操作的解耦需要一个安全.可靠和可伸缩的数据传播 ...
- JVM命令行参数解析
1. java命令行参数 先看java命令行的参数 solr@2f1fe8cc9f09:/opt/solr/server/solr-webapp/webapp$ java Usage: java [- ...
- dg环境连接ORA-00604,ORA-16000: database open for read-only access
报错信息 根据客户提供的报错信息, ORA-: error occurred at recursive SQL level ORA-: database open for read-only acce ...
- ELK 日志收集系统
传统系统日志收集的问题 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常底下. 通常,日志被分 ...