• 数据库部分---高级查询;


    例子;


    1.链接查询(查询多张表的数据,有外键关系的),是对查询后列的扩展

    select * from 表名1,表名2;  #会形成笛卡尔积,几张表的数据挨个匹配,数据的数量是每张的数量相乘,会产生冗余;


    select * from 表名1,表名2 where 表名1.列名=表名2.列名;这样就去掉了冗余的数据;


    上边的两个表结合后,有title和code重复的列,去掉多余的列:select 表1.列1,表1.列2,表1.列3....表2.列2.. from 表名1,表名2 where 表名1.列名=表名2.列名;


    select * from 表1 join 表2 on 表1.列名=表2.列名;

    上边的两个表结合后,有title和code重复的列,去掉多余的列:select 表1.列1,表1.列2,表1.列3....表2.列2.. from 表名1 join 表名2 on表名1.列名=表名2.列名;


    2.联合查询,对查询后行的扩展,把多张表的数据放到一起显示,查询的列的数量要相同

    select name,firm from family

    union

    select code,name from title

    3.子查询   

    父查询:外层查询

    子查询:里层查询

    子查询先执行,子查询的结果作为父查询的条件

    (1)无关子查询

    子查询在执行的时候和父查询没有关系子查询可以单独执行

    1.查询民族为汉族的所有人员信息

    父查询:select * from info where nation=()

    子查询:select code from nation where name='汉族'    nation与code是有外键关系的列

    把子查询的语句放到父查询的括号内

    结合起来:select * from info where nation=(select code from nation where name='汉族')        相当于nation=(code)

     2.查询系列名为宝马5的所有汽车信息

    (2)相关子查询

    子查询在执行的时候和父查询有关系,子查询不可以单独执行

    1.查询汽车表中油耗小于该系列平均油耗的所有汽车信息

    父查询:select * from car where oil<(该系列平均油耗)

    子查询:select avg(oil) from car where brand=该系列

    select * from car where oil<(select avg(oil) from car where brand=该系列)

    由于父查询和子查询都是查询的一张表,所以我们给父查询查询的表名,子查询查询的表名进行命名,

    select * from car as aa where oil<(select avg(oil) from car as bb where brand=该系列)

    然后再确定‘该系列’,

    select * from car as aa where oil<(select avg(oil) from car as bb where bb.brand=aa.brand)

  • 相关阅读:
    设计模式-转载
    Java-类和对象基础练习
    Java-单例模式(singleton)-转载
    java-面向对象练习2
    Java-面向对象基础练习
    Java-字符串练习
    Java-数组练习5
    Java-数组练习4
    JAVA-初步认识-常用对象API(String类-常见功能-获取-1)
    JAVA-初步认识-常用对象API(String类-构造函数)
  • 原文地址:https://www.cnblogs.com/xingyue1988/p/6130409.html
Copyright © 2020-2023  润新知