数据库 SQL 的多表查询:eg: table1: employees, table2: departments,table3: salary_grades;

	一:内连接:
1):等值连接:
把表employees中的department_id 与表departmes中的department_id相匹配的找出来
select e.last_name, d.department_id
from employees e,departments d
where e.department_id = d.department_id --等值内连接的缺点是:筛选条件中没有匹配的则无法选出; 2):非等值连接:
把表employees中的salary按照表salary_grades中的等级进行分配等级:
select last_name ,salary,grade_level
from employees,job_grades
where salary between lowest_sal and highest_sal 二:外连接:
--相对于内连接中的等值连接,等值连接的缺点显而易见,要想把不匹配的内容显现出来,则要使用外连接; 1):左连接: 右边去匹配左边的内容,把匹配不到的左边的原样输出,要在等式右边加上'(+)';
select e.last_name, d.department_id
from employees e,departments d
where e.department_id = d.department_id(+) 2):右连接: 左边去匹配右边的内容,把匹配不到的右边的原样输出,要在等式左边加上'(+)';
select e.last_name, d.department_id
from employees e,departments d
where e.department_id(+) = d.department_id --外连接也是有缺陷的,它的缺陷是:左右连接不能同时使用,要想同时输出两边都不匹配的,需要用到SQL99: 三: SQL99:
--SQL99又是另一套体系; 1): --针对上述外连接的缺陷,SQL99可以使用natural join 来解决:
select last_name, department_id
from employees e natural join departments d --他的缺陷是自动匹配两个表中列名称完全一样并且数据类型完全相同的{所有列中}的(不只是目标列)情况; 2): --针对上述1)的缺陷,可以考虑使用以下的:
select last_name, d.department_id
from employees e join departments d
on e.department_id = d.department_id --和where的意思一样 3):
select last_name, department_id
from employees join departments
using(department_id) --这种方式需要两个表中的列名陈和数据类型完全一样 4): 左连接:
select last_name, d.department_id
from employees e left outer join departments d
on e.department_id = d.department_id 5): 右连接:
select last_name, d.department_id
from employees e right outer join departments d
on e.department_id = d.department_id 6): 全连接:
select last_name, d.department_id
from employees e full outer join departments d
on e.department_id = d.department_id 四: 自连接:
--去实现查询表employees中last_name = 'chen' 的员工的老板的工资和email:
select emp.last_name,emp.manager_id,managers.salary,managers.email
from employees emp,employees managers
where emp.manager_id = managers.employee_id and lower(emp.last_name) = 'chen'

  

数据库SQL的多表查询的更多相关文章

  1. 数据库——SQL数据单表查询

    数据查询   语句格式 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] … FROM <表或视图名>[,<表或视图名&g ...

  2. 基于ACCESS和ASP的SQL多个表查询与计算统计代码(一)

    近期在写几个关于"Project - Subitem - Task"的管理系统,说是系统还是有点夸大了,基本就是一个多表查询调用和insert.update的数据库操作.仅仅是出现 ...

  3. 非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通过id进行维护与建文件

     非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通 ...

  4. mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化

    先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...

  5. python实现简易数据库之二——单表查询和top N实现

    上一篇中,介绍了我们的存储和索引建立过程,这篇将介绍SQL查询.单表查询和TOPN实现. 一.SQL解析 正规的sql解析是用语法分析器,但是我找了好久,只知道可以用YACC.BISON等,sqlit ...

  6. oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by

    select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...

  7. SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)

    SQL Fundamentals || Oracle SQL语言 一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查 ...

  8. SQL总结 连表查询

    连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两个或多个 SELECT ...

  9. sql语句-单表查询

    一:单表查询 CREATE TABLE `Score`( `s_id` ), `c_id` ), `s_score` ), PRIMARY KEY(`s_id`,`c_id`) ); ); ); ); ...

随机推荐

  1. jqweui 关于$(document.body).infinite的bug

    jqweui,0.8.2版本infinite存在bug,会存在下拉不触发的情况,解决办法: 源代码3730行附近 Infinite.prototype.scroll = function() { va ...

  2. GLSL版本的区别和对比

    之前尝试将一个GLSL version 110的版本写成GLSL version 330的,在此将学习过程和收获记录下来. 参考链接 GLSL Versions 介绍 你可以使用#version命令作 ...

  3. 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)

    一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...

  4. Docker(一)Linux开启你的Docker之旅

    前言 Docker容器最早受到RHEL完善的支持是从最近的CentOS 7.0开始的,官方说明是只能运行于64位架构平台, 内核版本为2.6.32-431及以上(即 >= CentOS 6.5, ...

  5. Linux 下执行Shell 脚本的方式

    Shell 脚本的执行方式通常有如下三种: (1)bash script-name 或者 sh script-name:(2)path/script-name或者./script-name:(3)so ...

  6. JS的eval函数解密反混淆

    https://www.hhtjim.com/js-decryption-de-obfuscate-eval-function.html JS的eval函数解密反混淆

  7. 转载>>C# Invoke和BeginInvoke区别和使用场景

    转载>>C# Invoke和BeginInvoke区别和使用场景 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是dotnet程 ...

  8. window alias给cmd命令起别名

    场景: Linux的alias命令是个非常实用的工具,任何命令通过alias可以精简到很短,比如:alias l='ls -l' Windows也有alias类似的命令,就是:doskey,开启方法也 ...

  9. [原]Failed connect to mirrors.cloud.aliyuncs.com:80; Connection refused

    web site : https://opsx.alibaba.com/mirror 运行后出现下面的Error: base//x86_64/other_db FAILED http://mirror ...

  10. 完美:利用旧版iCloud更改Apple ID地区

    朋友们,你们有没有尝试过从大陆地区以外的App Store上下载APP呢?或许听起来蛮有趣的,其实并不难,只需要更改Apple ID的地区就可以了,许多用户就是卡在下一步,需要输入付款信息,不过下面苹 ...