#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. 【chainer框架】【pytorch框架】

    教程: https://bennix.github.io/ https://bennix.github.io/blog/2017/12/14/chain_basic/ https://bennix.g ...

  2. django组件之ContentType

    ContentTyep组件: 帮助我们关联所有数据库的表 帮助我们反向查询关联数据表中的所有策略信息 GenericForeignkey(帮助我们快速插入数据) GenericRelation(用于反 ...

  3. Sping+ActiveMQ整合

    通过前一篇<ActiveMQ简述>大概对ActiveMQ有了一个大概的认识.本篇所阐述的是怎样通过Spring继承ActiveMQ进而更有效.更灵活的运用ActiveMQ. Spring和 ...

  4. OCR技术浅探: 光学识别(3)

    经过前面的文字定位和文本切割,我们已经能够找出图像中单个文字的区域,接下来可以建立相应的模型对单字进行识别. 模型选择 在模型方面,我们选择了深度学习中的卷积神经网络模型,通过多层卷积神经网络,构建了 ...

  5. 004-Maven的安装与配置

    1.在Windows上安装Maven 1.1.检查jdk安装 命令行:echo %JAVA_HOME% java -version 1.2.下载Maven 地址:http://maven.apache ...

  6. java-mybaits-00203-DAO-mapper代理开发方法,多参数【推荐】

    程序员只需要mapper接口(相当 于dao接口) 不需要写具体实现类,mapper已经代理完成,mybatis才有的 一.mapper代理开发方法(建议使用)          程序员在编写mapp ...

  7. html读写excle文档

    import.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  8. HI35xx平台调试笔记

    1.音视频数据循环采集 a. 在sample_venc.c文件中,海思官方是把采集到的数据都保存到文件中,我们需要更改到缓存里,以便后面推送到rtsp/rtmp/hls服务端. ; i < s3 ...

  9. BigData Technique&&Application指南-笔记1

    1.数据的量级 传统企业数据量基本上在TB之上,大型互联网企业达到了PB以上. 2.大量不同的数据类型  结构化数据:是存储在数据库里,可以用二维表来逻辑表达数据.  半结构的非结构化数据:一般都是纯 ...

  10. MySQL数据库--练习

    学生选课系统 设计表关系 创建表和插入数据 /* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Ve ...