数据库SQL的多表查询
数据库 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的多表查询的更多相关文章
- 数据库——SQL数据单表查询
数据查询 语句格式 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] … FROM <表或视图名>[,<表或视图名&g ...
- 基于ACCESS和ASP的SQL多个表查询与计算统计代码(一)
近期在写几个关于"Project - Subitem - Task"的管理系统,说是系统还是有点夸大了,基本就是一个多表查询调用和insert.update的数据库操作.仅仅是出现 ...
- 非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通过id进行维护与建文件
非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通 ...
- mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...
- python实现简易数据库之二——单表查询和top N实现
上一篇中,介绍了我们的存储和索引建立过程,这篇将介绍SQL查询.单表查询和TOPN实现. 一.SQL解析 正规的sql解析是用语法分析器,但是我找了好久,只知道可以用YACC.BISON等,sqlit ...
- oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by
select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...
- SQL Fundamentals || 多表查询(内连接,外连接(LEFT|RIGHT|FULL OUTER JOIN),自身关联,ON,USING,集合运算UNION)
SQL Fundamentals || Oracle SQL语言 一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查 ...
- SQL总结 连表查询
连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两个或多个 SELECT ...
- sql语句-单表查询
一:单表查询 CREATE TABLE `Score`( `s_id` ), `c_id` ), `s_score` ), PRIMARY KEY(`s_id`,`c_id`) ); ); ); ); ...
随机推荐
- Java编程的逻辑 (88) - 正则表达式 (上)
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- JSP之开发环境搭建
1.下载JDK1.8(或JDK1.7),并进行安装和配置,主要是配置环境变量JAVA_HOME及Path. 2.下载并配置Tomcat8.0(或Tomcat7.0). Windows平台请下载Tomc ...
- laravel5.8笔记三:常用命令
创建控制器 php artisan make:controller Index/IndexController 创建模型 php artisan make:model Index/IndexContr ...
- CentOS7安装Java还是无法使用javac
centos7.4 安装java之后,还是无法使用javac命令.报错提示: [root@ip---- centos]# javac bash: javac: command not found 解决 ...
- puppet(5)-master/agent模式
master/agent模式的工作流程 agent每隔固定时长会向master端发送nodename(自己的节点名,节点名至关重要)和 facts ,并且向服务器端请求自己的catalog. mast ...
- Fiddler 会话过滤功能
我们访问任何网址都会被 Fiddler 捕获,但有时我们只想捕获某个地址,可以使用 Fiddler 的会话过滤,如下我们只过滤出百度的域名 如下,切换到 Filters --- 把 Use Filte ...
- thinphp5框架遇到 mkdir() Permission denied 解决办法
网站重装 直接复制本地程序文件 里面数据库链接信息要改成线上的 然后mysql apache 等都没有动 运行后出现错误 mkdir() Permission denied 这是由于runtime目录 ...
- 把html页面转化成图片——html2canvas
test.html <div class="fx_zhezhao"></div> <div class="myImg"> & ...
- 【C++/函数】实验2
1.实验内容 函数声明和函数定义: 形参和实参: 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送. 形参:形式参数,表示主调函数与被调函数之间的联系.标识了在形参出现的位置 ...
- C++ 中文拼音排序方法。
参考文档:http://zisxks.com/2013/10/25/sort-Chinese-characters-in-cpp/ 采用locate.注意事项:排序的名字,如果出现某一个人,出现在顶上 ...