外连接 内链接 子查询

 

笛卡尔积查询:(没有意义)

语法:

* select * from A,B;

* 笛卡尔积的查询的结果不是想要的结果!!!

内连接查询

语法:

* select * from A inner join B on 条件; --- inner 可以省略!!!

* select * from A join B on 条件;

案例:

* select * from dept join emp on dept.did = emp.dno;

等价于

* select * from dept,emp where dept.did = emp.dno;---隐式内连接

外连接查询
左外连接查询

语法:

* select * from A left outer join B on 条件; ---outer 可以省略

* select * from A left join B on 条件;

案例:

* select * from dept left outer join emp on dept.did = emp.dno;

右外连接查询

语法:

* select * from A right outer join B on 条件;---outer可以省略

* select * from A right join B on 条件;

案例:

* select * from dept right outer join emp on dept.did = emp.dno;

子查询:

子查询:一个sql的查询的结果需要依赖另一个sql的查询结果!

创建表:

create table exam(

id int primary key auto_increment,

name varchar(20),

math int,

english int

);

insert into exam values (null,‘aaa‘,59,61);

insert into exam values (null,‘bbb‘,62,81);

insert into exam values (null,‘ccc‘,73,73);

insert into exam values (null,‘ddd‘,84,64);

insert into exam values (null,‘eee‘,91,58);

insert into exam values (null,‘fff‘,69,92);

insert into exam values (null,‘ggg‘,75,83);

* 查询数学成绩在数学平均分之上的同学信息:

* 求数学的平均分:select avg(math) from exam;

* 求数学分数大于平均分:select * from exam where math > 平均分;

* 平均分是一条sql的查询结果.

* select * from exam where math > (select avg(math) from exam);

在子查询中可以使用关键字any、all.

* any:任意的

* > any :select * from exam where english > any (select math from exam);

* any:任意一个值.最小的那个可以了.

* < any :select * from exam where english < any (select math from exam);

* any:任意一个值.最大的那个值比较就可以了.

* all:所有的

* > all :select * from exam where english > all (select math from exam);

* < all :select * from exam where english < all (select math from exam);

* 多表的查询:

* 按照部门名称统计人员的个数!

* select d.dname,count(*) from dept d,emp e where d.did = e.dno group by d.dname;

* 统计每个部门平均工资!

* select d.dname,avg(eprice) from dept d,emp e where d.did = e.dno group by d.dname;

* 查询哪些员工的工资大于任意部门平均工资:

* select * from emp where eprice > any (select avg(eprice) from dept d,emp e where d.did = e.dno group by d.dname);

* 查询哪些员工的工资大于所有部门平均工资:

* select * from emp where eprice > all (select avg(eprice) from dept d,emp e where d.did = e.dno group by d.dname);

时间: 2024-10-12 16:36:53

外连接 内链接 子查询的相关文章

转载-- SQL连接查询2 外连接(左右联接查询)

http://www.cnblogs.com/zhangqs008/archive/2010/07/02/2341196.html 外连接主要包括左连接.右连接和完整外部连接. 1)左连接:Left Join 或 Left Outer Join       左连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行.如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(Null). 我们看对应的SQL语句: Select Stude

mysql 左连接 右连接 内链接

一般所说的左连接,右连接是指左外连接,右外连接.做个简单的测试你看吧.先说左外连接和右外连接:[[email protected]#16-12月-11] SQL>select * from t1; ID NAME---------- --------------------1 aaa2 bbb [[email protected]#16-12月-11] SQL>select * from t2; ID AGE---------- ----------1 203 30左外连接:[[email p

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

一.多表查询基本语法 在进行多表连接查询的时候,由于数据库内部的处理机制,会产生一些“无用”的数据,而这些数据就称为笛卡尔积. 多表查询时可以利用等值关联字段消除笛卡尔积 多表查询之中,每当增加一个关联表都需要设置消除笛卡尔积的条件 分析过程很重要: 确定所需要的数据表 确定已知的关联字段: 按照SQL语句的执行步骤编写:FROM,WHERE,SELECT,ORDER BY (由于SELECT是在WHERE子句之后执行,所以SELECT子句所定义的别名WHERE不可以直接使用) (由于SELEC

Mysql中的关联查询(内连接,外连接,自连接)

Mysql中的关联查询(内连接,外连接,自连接) 在使用数据库查询语句时,单表的查询有时候不能满足项目的业务需求,在项目开发过程中,有很多需求都是要涉及到多表的连接查询,总结一下mysql中的多表关联查询 一,内连接查询 是指所有查询出的结果都是能够在连接的表中有对应记录的. 以t_employee(员工表)和t_dept(部门表)为例: t_employee表中的记录如下:dept代表该员工所在的部门 t_dept表中记录如下: 可以发现,其中人力资源部里没有员工(这里只是举例,可能与实际不符

MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

注:本文转自:http://www.cnblogs.com/smyhvae/p/4042303.html 本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两

mysql表连接,子查询以及if判断

创建表: CREATE TABLE emp ( ename varchar(10) DEFAULT NULL, hiredate date DEFAULT NULL, sal decimal(10,2) DEFAULT NULL, deptno int(2) DEFAULT NULL, age int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CREATE TABLE dept ( deptno int(2) DEFAULT NUL

ORACLE 多表连接与子查询

Oracle表连接 SQL/Oracle使用表连接从多个表中查询数据 语法格式: select 字段列表from table1,table2where table1.column1=table2.column2; 说明: 在where子句中指定连接条件 当被连接的多个表中存在同名字段时,必须在该字段前加上"表名"作为前缀. 连接的类型 Oracle8i之前的表连接: 等值连接(Equijoin) 非等值连接(Non-Equijoin) 外连接(Outer join):-->左外连

内连接 外连接 自连接 交叉连接

======================================================== My SQL如下: ======================================================== 1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行. 2.外联接.外联接

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! oracle连接总结(内连接.外连接.自然连接,交叉连接,自连接) 1.简述  1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的.用来连接两张表的表达式组成了连接条件.当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结果集 2) 有5种基本类型的的连接,inner,outer,natural,cross连接,自连接. 2.说明与例子 1)内连接 (inner join (可简写为j