当前位置: 首页 > news >正文

试玩app推广网站建设外链互换平台

试玩app推广网站建设,外链互换平台,旅游酒店网站建设,自己用电脑做网站服务器这里写自定义目录标题 一 外连接与内连接的概念sql99语法实现 默认是内连接sql99语法实现左外连接,把没有部门的员工也查出来sql99语法实现右外连接,把没有人的部门查出来sql99语法实现满外连接,mysql不支持这样写mysql中如果要实现满外连接的…

这里写自定义目录标题

  • 一 外连接与内连接的概念
    • sql99语法实现 默认是内连接
    • sql99语法实现左外连接,把没有部门的员工也查出来
    • sql99语法实现右外连接,把没有人的部门查出来
    • sql99语法实现满外连接,mysql不支持这样写
    • mysql中如果要实现满外连接的效果,推荐使用union关键字
  • 二 自连接和非自连接的概念
  • 三 等值连接和非等值连接的概念
    • 1.1 等值连接
    • 1.1 非等值连接
  • 四 七种JOIN的实现
    • 1 内连接 A∩B
    • 2 左外连接
    • 3 右外连接
    • 4 A - A∩B
    • 5 B - A∩B
    • 6 满外连接
    • 7 满外连接- 内连接
  • 五 natural join与USING

因为直接连接多表时,笛卡尔积的问题引出了多表联查的问题,多表查询基本分为三类,外连接和内连接,等值和非等值,自连接和非自连接

一 外连接与内连接的概念

这些连接关系,归根结底是集合的交并补运算
求出两个表的公共部分,叫做内连接,相当于是交集
求出两个表的公共部分加上左边的,叫做左外连接
如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为从表
如果是右外连接,则连接条件右边的表称为主表,左边的表称为从表

sql99语法实现 默认是内连接

SELECT last_name,department_name
FROM employees e INNER JOIN departments d
on e.department_id=d.department_id

结果显示为102条数据:
在这里插入图片描述

sql99语法实现左外连接,把没有部门的员工也查出来

SELECT last_name,department_name
FROM employees e LEFT  OUTER JOIN departments d
on e.department_id=d.department_id;

结果为103条数据
相当于是左边是员工表的全部信息,右边是部门表的部分信息
员工表和部门表的交集,e交d,和部门表为NULL但员工表有人的信息
在这里插入图片描述

在这里插入图片描述

sql99语法实现右外连接,把没有人的部门查出来

SELECT last_name,department_name
FROM employees e RIGHT  OUTER JOIN departments d
on e.department_id=d.department_id;

结果如图可见,有119条信息
在这里插入图片描述
也就是关键是右边的部门表,所以叫做,右外连接,首要查出的是所有的部门

在这里插入图片描述

sql99语法实现满外连接,mysql不支持这样写

SELECT  last_name,department_name
FROM employees e
FULL OUTER departments d
ON e.department_id=d.department_id 

mysql中如果要实现满外连接的效果,推荐使用union关键字

Union关键字,返回一个并集,类似于A并B,会执行去重检索的操作
union all 返回并集加上交集 ,优点是效率比较高

  • 查询部门编号>90或邮箱包含a的员工信息
SELECT * FROM employees WHERE email LIKE '%a%' 
UNION SELECT * FROM employees WHERE department_id>90;
  • 查询所有部门号和所有员工姓名,需要去重
#查找所有的员工名字,以及所有的部门
SELECT last_name,department_name
FROM employees e LEFT  OUTER JOIN departments d
on e.department_id=d.department_id
UNION 
SELECT last_name,department_name
FROM employees e RIGHT  OUTER JOIN departments d
on e.department_id=d.department_id;

结果显示出来118条信息
在这里插入图片描述
这里出现了一个问题,那就是,右外连接的数据,居然比去重后的并集数目还要多,以后再解决吧

  • 查询所有部门号和所有员工姓名,不需要去重
    结果222条信息
SELECT last_name,department_name
FROM employees e LEFT  OUTER JOIN departments d
on e.department_id=d.department_id
UNION ALL
SELECT last_name,department_name
FROM employees e RIGHT  OUTER JOIN departments d
on e.department_id=d.department_id;

二 自连接和非自连接的概念

  • 自连接,就是多表查询中自己引用自己
    查询员工id,员工姓名,管理者的ID和姓名
# 查询员工id,员工姓名,管理者的ID和姓名
SELECT emp.employee_id,emp.last_name,mgr.employee_id 经理工号,mgr.last_name 经理名字
FROM employees emp,employees mgr
WHERE emp.manager_id=mgr.employee_id;
  • 非自连接,普通的多表查询
SELECT last_name,department_name
FROM employees e INNER JOIN departments d
on e.department_id=d.department_id

三 等值连接和非等值连接的概念

1.1 等值连接

等值连接也称为显示内连接,在进行多表联合查询时通过“=”等号来连接多张表之间相字段对应的值,其产生的结果会出现重复列。意思是,如果对多张表进行等值连接操作,那么前提要求是这多张表之间必须有相同的字段名。,比方说一个表的主键是另一个表的外键

SELECT last_name,department_name
FROM employees e INNER JOIN departments d
on e.department_id=d.department_id

1.1 非等值连接

非等值连接最大的特点就是:连接条件中的关系是非等量关系
在这里插入图片描述
查询一个员工的名字,工资和所处的等级

SELECT last_name,salary,grade_level
FROM employees e,job_grades j
WHERE e.salary BETWEEN j.lowest_sal and j.highest_sal;

四 七种JOIN的实现

在这里插入图片描述

1 内连接 A∩B

# 内连接 A∩B
SELECT e.employee_id,e.last_name,d.department_name
FROM employees e
JOIN departments d
ON  e.department_id=d.department_id;

2 左外连接

SELECT e.employee_id,e.last_name,d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id=d.department_id;

3 右外连接

# 右外连接,右边的项目作为主表,左边的是从表
SELECT e.employee_id,e.last_name,d.department_name
FROM employees e
RIGHT JOIN departments d 
ON e.department_id =d.department_id;

4 A - A∩B

# A - A∩B 有名字,没有部门
SELECT e.employee_id ,e.last_name,d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id=d.department_id
WHERE d.department_id
IS NULL;

5 B - A∩B

SELECT employee_id,last_name,department_name
FROM employees e
RIGHT JOIN departments d
ON e.department_id=d.department_id
WHERE e.department_id
IS NULL;

6 满外连接

左外连接并上B - A∩B

SELECT employee_id,last_name,department_name
FROM employees e
RIGHT JOIN departments d
ON e.department_id=d.department_id
WHERE e.department_id
IS NULL
union all
SELECT e.employee_id,e.last_name,d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id=d.department_id;

7 满外连接- 内连接

SELECT employee_id,last_name,department_name
FROM employees e
RIGHT JOIN departments d
ON e.department_id=d.department_id
WHERE e.department_id
IS NULL
union all
SELECT e.employee_id ,e.last_name,d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id=d.department_id
WHERE d.department_id
IS NULL;

五 natural join与USING

自动查询两张连接表中 所有相同的字段 ,然后进行 等值 连接

SELECT employee_id,last_name,department_name 
FROM employees e NATURAL JOIN departments d;

USING相对于natural join 优化了一点

SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d 
USING (department_id);

多表查询需要限制,太多了相当于多重for循环,消耗资源

http://www.dt0577.cn/news/7659.html

相关文章:

  • 网站自动登录怎么做网络推广靠谱吗
  • 网站建设86215站内搜索工具
  • 安徽住房与城乡建设门户网站外贸如何推广
  • 炫酷的国外网站搜索引擎成功案例分析
  • wordpress装ssl百度seo排名优化排行
  • 公司网站优化要怎么做百度信息流推广平台
  • 手机注册公司流程西安优化seo托管
  • 专业番禺网站建设武汉seo系统
  • 东莞常平邮政编码是多少邯郸网站seo
  • python做后台网站的多吗百度提交入口网址截图
  • 做食物网站应该考虑些什么意思友情链接是免费的吗
  • 北京个人做网站seo优化师是什么
  • 慢慢网站建设seo检测优化
  • 淘客怎么样做网站怎么下载需要会员的网站视频
  • wordpress设置2个网站吗做一个公司网站大概要多少钱
  • 用discuz做的大网站深圳seo教程
  • 天津网站建设服务电话培训机构优化
  • 音乐网站系统源码焦作关键词优化排名
  • 自学做甜品师的网站重庆网站seo费用
  • 免费做公司网站互联网营销行业前景
  • 嵊州网站制作seo快速优化技术
  • 内蒙古建设工程造价信息网官方网站千万不要做手游推广员
  • 上海市城乡建设和管理委员会门户网站营销型网站策划方案
  • 用google翻译做多语言网站百度推广怎么优化排名
  • 做日语网站电商网站开发平台
  • 金华网站建设公司排名国外搜索引擎入口
  • 有没有做水疗偷拍的网站托管竞价推广公司
  • 网站改版降权多久恢复快速网站排名优化
  • 网站中做背景图片位置咋写广州百度seo
  • 广州户外拓展训练基地搜索优化指的是什么