07_MySQL DQL_多表查询_等值内连接
#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_多表查询_等值内连接的更多相关文章
- mysql数据库多表查询where与内连接inner join的区别
按理说where是对前面的笛卡尔积进行过滤,工作量大增,inner join则不会.但我实际测试了一下,两种查询耗时基本相等,甚至where还快一些,多次测试后基本如此. 如下图: where: in ...
- SQLServer学习笔记<> 表连接查询----交叉连接、内连接、左连接、右连接
(1)交叉连接(cross join)即我们所说的笛卡尔积.查询出满足两张表所有的记录数,A(3条记录),B(9条记录),A*B(27条记录). 比如:雇员表(HR.employees)和货运公司(S ...
- SQL多表联合查询(交叉连接,内连接,外连接)
连接查询: 交叉连接: 交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据航数乘以第二个表中符合,查询条件的数据行数,例如department ...
- MySql多表查询_事务_DCL(资料三)
今日内容 1. 多表查询 2. 事务 3. DCL 多表查询: * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE ...
- MySQL基础(三)多表查询(各种join连接详解)
Mysql 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有哪些 ...
- SQL 多表查询的几种连接方式
--创建数据库 create database GoodsSystem go --使用数据库 use GoodsSystem go --创建商品类型表 create table GoodsType ( ...
- 【SQL】多表查询中的 外连接 ,on,where
先简单粗暴给个结论,多表连结查询中,on比where更早起作用,系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行匹配过滤,where后语句为真,则能查询出来,而通过外连接 ...
- 多表查询_练习1&练习2&练习3
准备表: -- 部门表 CREATE TABLE dept ( id INT PRIMARY KEY PRIMARY KEY, -- 部门id dname VARCHAR(50), -- 部门名称 l ...
- 多表查询_子查询概述和多表查询_子查询情况1&情况2&情况3
子查询 概念:查询中嵌套查询,称嵌套查询为子查询 -- 查询工资最高的员工信息 -- 1.查询最高的工资是多少 9000 select max(salary) from emp; -- 查询员工信息, ...
随机推荐
- PHP Ajax跨域解决
PHP Ajax 跨域问题最佳解决方案 本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是serve ...
- 同步机制及windows同步函数的使用
最近面试的许多公司都询问关于多线程的问题,但是问的深度一般不会很难,仅仅问相关的同步问题以及对应的API函数,下面是windows下几个常用的同步方法,对于应付帮助或者一般的开发都非常有用 目录一 临 ...
- G729 详细使用文档
https://tools.ietf.org/html/rfc4749 git://git.linphone.org/linphone-android.git http://stackoverflow ...
- Linux登录欢迎图案
命令提示符设置: export PS1='\n\[\e[37;1m[\]\[\e[31;1m\]\u\[\e[39;1m\]@\[\e[33;1m\]\H \[\e[34;1m\]\w\[\e[37; ...
- ACM零散知识
定理与方法专区: 1.两点间的曼哈顿距离如果为偶数,那么两点间可以走偶数步到达 2.求小于等于n 的素数的个数.(即欧拉函数) 100=(2^2)*(5^2) num[100]=(2+1)*(2 ...
- Selenium-IDE,Selenium-RC ,Selenium grid以及 Selenium-Core
Selenium-IDE,Selenium-RC ,Selenium grid 以及 Selenium-Core Selenium 是一种 Web 应用的自动测试工具,通过模拟用户对 Web 页面的各 ...
- Delphi APP 開發入門(七)通知與雲端推播
Delphi APP 開發入門(七)通知與雲端推播 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數: ...
- MySQL数据库--练习
学生选课系统 设计表关系 创建表和插入数据 /* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Ve ...
- [笔记] Ubuntu 18.04安装Docker CE及nvidia-docker2流程
Docker的好处之一,就是在Container里面可以随意瞎搞,不用担心弄崩Host的环境. 而nvidia-docker2的好处是NVidia帮你配好了Host和Container之间的CUDA相 ...
- 一步一步学EF系列一【最简单的一个实例】
整个文章我都会用最简单,最容易让人理解的方式给大家分享和共同学习.(由于live Writer不靠谱 又得补发一篇) 一.安装 Install-Package EntityFramework 二.简单 ...