zoukankan      html  css  js  c++  java
  • 数据库查询方式

    连接查询

    基本含义

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

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

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

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

    连接语法的基本形式

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

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

    交叉连接:

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

    交叉连接通常也被叫做“笛卡尔积”——数学上可能比较多。

    语法:

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

    内连接:

    语法:

    from  1   join  2  on  1.字段1=2.字段2

    含义:找出(过滤)在交叉连接的结果表中的表1的字段1的值等于表2的字段2的值

    的那些行。

    左[外]连接:

    形式:

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

    说明:

    1,这里,left是关键字。

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

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

    右[外]连接:

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

    形式:

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

    说明:

    1,这里,right是关键字。

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

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

    全[外]连接:

    形式:

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

    说明:

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

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

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

    子查询

    什么叫子查询

    一个查询,通常就是一个select语句(即出现一次select关键字)

    但,如果在一个select查询语句中,又出现了select查询语句,此时就称后者为“子查询”,前者就是“主查询”

    形式:

    selelct 字段或表达式或(子查询1) [as 别名] from 表名或(子查询2) where 字段或表达式或(子查询3) 的条件判断

    注意:

    每个位置所放置的子查询结果,应该符合该位置的数据需求。

    通常:

    子查询1应该是一个“数据结果”。

    子查询2可以是“任意结果”,此位置的查询结果,通常作为数据源,可以给一个别名

    子查询3可以是一个数据或一列数据甚至是一行数据

    子查询按结果分类:

    表子查询 一个子查询返回的结果理论上是多行多列”的时候。此时可以当做一个“表”来使用,通常是放在from后面。

    行字查询 一个子查询返回的结果理论上是一行多列”的时候。此时可以当做一个“行”来使用,通常放在“行比较语法”中。

    列子查询 一个子查询返回的结果理论上是多行一列”的时候。此时可以当做“多个值”使用,类似这种:(5, 17, 8, 22)。

    标量子查询:一个子查询返回的结果理论上是一行一列”的时候。此时可以当做“一个值”使用,类似这种:select 5 as c1; 或select ...where a = 17,或select ... where b > 8;

    按使用场合分:

    作为主查询的结果数据select c1,(select f1 from tab2) as f11 from tab1; #这里子查询应该只有一个数据(一行一列,标量子查询)

    作为主查询的条件数据select c1 from tab1 where c1 in (select f1 from tab2); #这里子查询可以是多个数据(多行一列,列子查询以及标量子查询,实际上行子查询也可能,但极少

    作为主查询的来源数据select c1 from (select f1 as c1, f2 from tab2) as t2; #这里子查询可以是任意查询结果(表子查询)。

  • 相关阅读:
    spring_three
    报错:java.sql.SQLException: The server
    Spring_two
    Spring_One
    Mybatis中的collection和association一关系
    Mybatis_three
    文件操作1
    面向对象编程三大特征7
    面向对象编程三大特征6
    面向对象编程三大特征5
  • 原文地址:https://www.cnblogs.com/hjc1234/p/9485298.html
Copyright © 2011-2022 走看看