1 连接查询

1.1连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”。

实际上,两个表的完全的连接是这样的一个过程:

左边的表的每一行,跟右边的表的每一行,两两互相“横向对接”后所得到的所有数据行的结果。

注意:连接之后,并非形成了一个新的数据表,而只是一种“内存形态”。

1.2连接语法的基本形式

from 表1  [连接方式]  join 表2  [on 连接条件];

连接的结果可以当作一个“表”来使用。常用有以下几种连接方式:

1.3交叉连接

实际上,交叉连接是将两个表不设定任何条件的连接结果。

交叉连接通常也被叫做“笛卡尔积”——数学上可能比较多。(最后结果是:表1条数*表2条数)

语法:

from  表1  [cross]  join  表2  ; //可见交叉连接只是没有on条件而已。

(cross这个词也可以省略,还可以使用inner这个词代替)

例:

select * from emp;

select * from dept;

select * from emp join dept; 或 select * from emp cross join dept;

1.4内连接(用的较多)

语法:

from  表1  [inner]  join  表2  on  表1.字段1=表2.字段2;

含义:

找出(过滤)在交叉连接的结果表中的表1的字段1的值等于表2的字段2的值的那些行。

例:上面那个例子改一下:

select * from emp join dept where deptid=id;

比较正规的写法是:select * from emp join dept on emp.deptid=dept.id;

结果相同:

1.5左[外]连接

形式:

from  表1  left  [outer]  join   表2   on  连接条件。

说明:

1,这里,left是关键字。

2,连接条件跟内连接一样。

3,含义是:内连接的结果基础上,加上左边表中所有不符合连接条件的数据,相应放右边表的字段的位置就自动补为“null”值。

例:(内连接)

select * from product join product_type on product.protype_id =product_type.protype_id;

/*左外连接*/

select * from product_type left join product

on product.protype_id =product_type.protype_id;

1.6右[外]连接

右连接跟左连接恰恰相反:

形式:

from  表1  right  [outer]  join   表2   on  连接条件。

说明:

1,这里,right是关键字。

2,连接条件跟内连接一样。

3,含义是:在内连接的结果基础上,加上右边表中所有不符合连接条件的数据,相应本应放左边表的字段的位置就自动补为“null”值。

例:

/*右外连接*/

select * from product right join product_type

on product.protype_id =product_type.protype_id;

1.7全[外]连接 (和交叉连接不同)

形式:

from  表1  full  [outer]  join  表2  on  连接条件;

说明:

1,含义:其实是左右连接的“并集”(消除重复项),即内连接的结果,加上左表中不满足条件的所有行(右边对应补null),再加上,右表中不满足条件的所有行(左边对应补null)。

2,mysql中其实不认识全[外]连接语法,即mysql这个软件本身不支持全连接的语法

3,此概念在其他数据库有的存在,了解就可以。

1.8 练习:

1)找出索尼4g手机所属类别名称

select protype_name from product join product_type

on product.protype_id=product_type.protype_id

where pro_name like '%索尼%4g手机%';

2)找出所有属于手机数码的产品

select * from product join product_type

on product.protype_id=product_type.protype_id

where protype_name='手机数码';

2 子查询

2.1子查询就是把一个查询的结果当作另一个查询的条件。

例1:

/*找出索尼4g手机所属类别名称*/

第一步,找条件:

select protype_id from product where pro_name like '%索尼%4g手机%';

第二步,找结果:

select * from product_type where protype_id=?;

第三步,连接:

select protype_name from product_type where protype_id=(select protype_id from product where pro_name like '%索尼%4g手机%');

例2:

/*找出所有属于手机数码的产品*/

select * from product where protype_id=(select protype_id from product_type where protype_name='手机数码');

表连接和子查询可以实现同样的效果,实际应用中自行选择用哪种方式。

2.2 使用in子查询(常用)

in的基本语法形式为:

where  操作数  in (值1,值2, ....)

则in子查询就是:

where  操作数  in ( 列子查询 );

含义:

表示该操作数(字段值) 等于 该子查询的其中任意一个只,就算满足条件。

例:

/*找出属于手机数码或电脑办公的产品*/

select * from product where protype_id in (select protype_id from product_type where protype_name='手机数码' or protype_name='电脑办公');

3 联合查询

联合查询的关键字是: union。

3.1定义

联合查询就是将两个select语句的查询结果“层叠”到一起成为一个“大结果”。

两个查询结果的能够进行“联合”的先觉条件是:结果字段数相等

3.2语法形式

select 语句1

union  [all | distinct]

select 语句2;

例:

select aname,adesc from app1 union select bname,bdesc from bpp1;

select aid,adesc from app1 union select bname,bdesc from bpp1;(没意义)

3.3说明:

1)两个select语句的输出段(结果字段)数目一样,应用中通常类型一样才有意义。

2)结果集中的字段以第一个select语句的字段为准。

3)第一个select语句的字段可以做别名,但如果做别名,则后续的where,group,order等子句应该用该别名。

4)联合查询默认是会消除重复项的(distinct),要想不消除,则必须明确些“all”。

5)如果要对整个联合结果进行排序或limit,则应该对各自的select语句加括号:

(select 语句1)

union

(select 语句2)

order  by .....  limit ....;

sql常用操作(三)多表查询的更多相关文章

  1. SQL总结(三)其他查询

    SQL总结(三)其他查询 其他常用的SQL,在这里集合. 1.SELECT INTO 从一个表中选取数据,然后把数据插入另一个表中.常用于创建表的备份或者用于对记录进行存档. 语法: SELECT c ...

  2. 07-查询操作(DQL)-多表查询

    一. 综述    查询操作主要从两个方面来说:单表查询和多表查询. 多表查询包括:笛卡尔积.外键约束.内连接查询.外链接查询.自连接查询. 二 . 案例设计   1.  设计产品表(product). ...

  3. mysql第四篇:数据操作之多表查询

    mysql第四篇:数据操作之多表查询 一.多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment ...

  4. Mysql基础(四):库、表、记录的详细操作、单表查询

    目录 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细操作 3. 表的详细操作 4. 行(记录)的详细操作 5. 单表查询 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细 ...

  5. 06-查询操作(DQL)-单表查询

    一. 综述   查询操作主要从两个方面来说:单表查询和多表查询. 单表查询包括:简单查询.过滤查询.结果排序.分页查询.聚集函数. 二 . 案例设计   1. 设计产品表(product).包括:主键 ...

  6. 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询

    MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...

  7. 数据库常用SQL语句(一):常用的数据库、表操作及单表查询语句

    以MySql数据库为例进行说明 1.数据库操作语句 2.表的操作语句 3.表中的字段操作语句 4.MYSQL支持的完整性约束 数据库管理系统提供了一致机制来检查数据库表中的数据是否满足规定的条件,以保 ...

  8. 九.django模型基础(三)之关联对象操作及多表查询

    Ⅰ.关系表的数据操作 1.正向 正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向. 1)更新(增) a.通过属性复制 b.通过主键的方式 总结: ForeignKey 字段的更新,跟普 ...

  9. sql常用操作(一)

    sql(structured query language,结构化查询语言)语言:和数据库交互的语言,进行数据库管理的语言. 1.1 sql语句的作用:说白了就是增删改查 管理数据库 管理表 管理数据 ...

  10. SQL Server温故系列(2):SQL 数据操作 CRUD 之简单查询

    1.查询语句 SELECT 1.1.查询语句的 SELECT 子句 1.2.查询语句的 FROM 子句 1.2.1.内连接查询 INNER JOIN 1.2.2.外连接查询 OUTER JOIN 1. ...

随机推荐

  1. CentOS7的安装以及GPT和MBR

    讲到GPT(GUID partition Table)和MBR(Master Boot Record)首先要将一下EFI(Extension Firmware Interface)和BIOS(Basi ...

  2. RT-Thread OS的启动流程

    1.RT进入main之前, SystemInit函数初始化时钟. 2.main函数位于startup.c文件中.进行两个工作 系统开始前,rt_hw_interrupt_disable关闭所有中断. ...

  3. Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录

    上节课复习:1.函数的对象    函数可以被当作数据取处理2.函数嵌套    嵌套调用:在调用一个函数时,函数体代码又调用了其他函数    嵌套定义:在一个函数内部又定义了另一个函数 def foo( ...

  4. STL::next_permutation();

    next_permutation()可以按字典序生成所给区间的全排列. 在STL中,除了next_permutation()外,还有一个函数prev_permutation(),两者都是用来计算排列组 ...

  5. jsonp的使用方法

    参数jsonp 和 jsonpCallback jsonp指定使用哪个名字将回调函数传给服务端,也就是在服务端通过 request.getParameter(""); 的那个名字, ...

  6. Json.net的常用语句JsonConvert.SerializeObject(对象)

    在ajax的已不请求中,常常返回json对象.可以利用json.net给我们提供的api达到快速开发. 例子: using System;using System.Collections;using ...

  7. RobotFramework+selenium环境安装

    1.安装python 2.7.12 https://www.python.org/downloads/release/python-2712/ 安装完成之后配置好path,将下面的类似安装路径加入pa ...

  8. MySQL8.0.16新特性:The Communication Protocol In Group Replication

    MGR优雅升级到MySQL8.0.16 传统的升级手段之一,5.7 MGR集群与8.0 MGR集群进行数据传输,程序切换新集群后测试是否正常. 如果不正常,要么将新集群的新增数据同步回旧集群,要么就舍 ...

  9. JavaScript 检验变量

    创建: 2019/02/20 迁入: 删除[WIP]标签(因为随时更新, 不存在完成不完成)   从[JavaScript 式与运算符]迁入typeof 更新: 2019/03/25 补充静态变量与参 ...

  10. shader Category

    Category:是渲染命令的逻辑组,着色器可以多个子着色器,他们需要共同的效果 // Copyright 2014 Google Inc. All rights reserved. // // Li ...