#6:连接查询
/*
含义:多表查询,当查询的字段来自多个表

笛卡尔积: 表1,m行;表2,n行; 表1,表2 = m*n行
发生原因:表1的每行和表2的n行拼接,形成n行,最终得到m*n行
如何避免:增加连接条件

连接查询的分类:
按年代分类:
sql92标准【mysql只支持该标准的内连接,一部分外连接】
sql99标准【推荐】mysql支持内连接 外连接(左右连接) 交叉连接

按功能分类:
内连接
  等值连接
  非等值连接
  自连接
外连接
  左连接
  右连接
  全连接
交叉连接
*/
USE girls;

# 笛卡尔积现象
SELECT * FROM beauty,boys;

# 增加连接条件
SELECT NAME,boyName
FROM beauty,boys
WHERE beauty.`boyfriend_id` = boys.`id`;

# 一、sql92标准
# 1、内连接-等值连接
/*
n表连接,需要至少n-1个条件
表的顺序没有要求
一般需要给表起别名
可以搭配所有子句使用,比如:筛选,分组,排序
*/
# 案例1: 查询女神名和对应的男神名
SELECT NAME,boyName
FROM beauty,boys
WHERE beauty.`boyfriend_id` = boys.`id`;

USE myemployees;
# 案例2: 查询员工名和对应的部门名
SELECT last_name,department_name
FROM employees,departments
WHERE employees.`department_id` = departments.`department_id`;

# 2、给表起别名
/*
区分多个重名的字段
提高语句简洁
注意:如果给表起了别名,原始表在该SQL中就不再生效
*/

# 案例3:查询员工号,工种号,工种名
SELECT employee_id, e.job_id, job_title
FROM employees AS e,jobs AS j
WHERE e.`job_id` = j.`job_id`;

# 3、两个表的顺序是否可以调整

# 案例3:查询员工号,工种号,工种名
SELECT employee_id, e.job_id, job_title
FROM jobs AS j,employees AS e
WHERE e.`job_id` = j.`job_id`;

# 4、带筛选条件的等值内连接查询

# 案例:查询有奖金的员工名,部门名
SELECT last_name, department_name, commission_pct
FROM employees AS e, departments AS d
WHERE e.`department_id` = d.`department_id`
AND e.`commission_pct` IS NOT NULL ;

# 案例:查询所在城市名第二个字符为o的部门名和城市名
SELECT department_name,city
FROM departments AS d,locations AS l
WHERE d.`location_id` = l.`location_id`
AND l.`city` LIKE '_o%';

# 5、带分组的等值内连接查询

# 案例:查询每个城市的部门个数
SELECT COUNT(*), d.location_id, city
FROM departments AS d, locations AS l
WHERE d.`location_id` = l.`location_id`
GROUP BY d.`location_id`;

# 案例:查询有奖金的每个部门的部门名,领导编号,该部门的最低工资
SELECT department_name,e.manager_id,MIN(salary)
FROM departments AS d, employees AS e
WHERE d.`department_id` = e.`department_id`
AND commission_pct IS NOT NULL
GROUP BY d.`department_id`;

# 6、带排序的等值内连接查询

# 案例:查询每个工种的工种名,员工个数,并按员工个数降序排序
SELECT job_title, COUNT(*) AS 员工个数
FROM jobs AS j, employees AS e
WHERE j.`job_id` = e.`job_id`
GROUP BY j.`job_id`
ORDER BY 员工个数 DESC;

# 7、三表连接
# 案例:查询员工名,部门名,所在城市
SELECT last_name, department_name, city
FROM employees AS e, departments AS d, locations AS l
WHERE e.`department_id` = d.`department_id`
AND d.`location_id` = l.`location_id`;

07_MySQL DQL_多表查询_等值内连接的更多相关文章

  1. mysql数据库多表查询where与内连接inner join的区别

    按理说where是对前面的笛卡尔积进行过滤,工作量大增,inner join则不会.但我实际测试了一下,两种查询耗时基本相等,甚至where还快一些,多次测试后基本如此. 如下图: where: in ...

  2. SQLServer学习笔记<> 表连接查询----交叉连接、内连接、左连接、右连接

    (1)交叉连接(cross join)即我们所说的笛卡尔积.查询出满足两张表所有的记录数,A(3条记录),B(9条记录),A*B(27条记录). 比如:雇员表(HR.employees)和货运公司(S ...

  3. SQL多表联合查询(交叉连接,内连接,外连接)

    连接查询:     交叉连接:   交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据航数乘以第二个表中符合,查询条件的数据行数,例如department ...

  4. MySql多表查询_事务_DCL(资料三)

    今日内容 1. 多表查询 2. 事务 3. DCL 多表查询: * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE ...

  5. MySQL基础(三)多表查询(各种join连接详解)

    Mysql 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有哪些 ...

  6. SQL 多表查询的几种连接方式

    --创建数据库 create database GoodsSystem go --使用数据库 use GoodsSystem go --创建商品类型表 create table GoodsType ( ...

  7. 【SQL】多表查询中的 外连接 ,on,where

    先简单粗暴给个结论,多表连结查询中,on比where更早起作用,系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行匹配过滤,where后语句为真,则能查询出来,而通过外连接 ...

  8. 多表查询_练习1&练习2&练习3

    准备表: -- 部门表 CREATE TABLE dept ( id INT PRIMARY KEY PRIMARY KEY, -- 部门id dname VARCHAR(50), -- 部门名称 l ...

  9. 多表查询_子查询概述和多表查询_子查询情况1&情况2&情况3

    子查询 概念:查询中嵌套查询,称嵌套查询为子查询 -- 查询工资最高的员工信息 -- 1.查询最高的工资是多少 9000 select max(salary) from emp; -- 查询员工信息, ...

随机推荐

  1. 隐藏Apache、nginx和PHP的版本号的配置方法

    最近提示说有漏洞,暴露apache.nginx和php的版本号.网上搜了下,整理的方法如下: 首先说apache 在http.conf文件里添加下面两行,默认是没有的 ServerSignature ...

  2. MyEclipse安装主题(Color Theme)

    前段时间发现同学开发使用IDE界面相当炫酷(Mac版的IntelliJ IDEA),个人也比较喜欢那种风格的界面,想想自己MyEclipse IDE界面简直是屌丝啊~~~~ 今天上CSDN看见一篇介绍 ...

  3. jQuery中on()方法用法实例

    这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能.定义及在匹配元素上绑定一个或者多个事件处理函数的使用技巧,需要的朋友可以参考下 本文实例讲述了jQuery中on()方法 ...

  4. 模块讲解----sys

    sys:跟python解释器相关的信息 #命令行参数list,第一个元素时程序本身路径 print(sys.argv) 注意:执行脚本时,可以传参数. #退出程序,正常退出时exit(0) sys.e ...

  5. RNNs

    什么是RNN网络? RNNs背后的主要目的是要使用序列本身的顺序信息.在传统的神经网络里,我们假设输入(输出)是条件独立的.但是,在许多任务里,这是个非常非常差的假设.如果你想预测一个序列中的下一个单 ...

  6. 20165324 《Java程序设计》第3周学习总结

    20165324 <Java程序设计>第3周学习总结 教材学习内容总结 本周学习内容如下: 编程语言思想 面向过程语言的核心是编写解决某个问题的代码块:在面向对象语言中,最核心的内容是对象 ...

  7. Git-创建和合并分支

    本人拜读了廖雪峰老师关于Git的讲述后整理所得 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你 ...

  8. 某个php爬虫程序分析--来自wooyun

    乌云漏洞编号: WooYun-2014-68061 作者:hkAssassin 爬虫程序源码: <?php header("content-type:text/html;charset ...

  9. cocos2d-x 3.3 引用【#include "cocos-ext.h"】头文件出现编译错误

    添加[#include "cocos-ext.h"] 头文件后报错 f:\projects\test_httpclient\cocos2d\extensions\gui\cccon ...

  10. 字符编码的发展(ASCII、Unicode、utf-8)

    最近一直在看廖雪峰老师的python网上教程,python内容简单易理解,就没整理,但是字符串编码作为一直困扰自己的问题,看了几遍文章,最终还是将其整理如下,本篇博客总结自廖雪峰老师的网上教程:htt ...