zoukankan      html  css  js  c++  java
  • 多表关联查询之内关联,左关联

    -- 同学持有的手机记录表

    create table student_phone (
    id int primary key,
    stu_name varchar2(20),
    phone varchar2(200)
    )

    insert into student_phone values (1,'小红','华为 荣耀v9');
    insert into student_phone values (2,'小军','荣耀v9(华为)');
    insert into student_phone values (3,'小红','小米note2');
    insert into student_phone values (4,'小平','小米 note2');
    insert into student_phone values (5,'小平','小米 note2');
    insert into student_phone values (6,'小云','小米 Note2');
    insert into student_phone values (7,'小云','小米 NOTE2');
    insert into student_phone values (8,'小云','小米 NOTE 2');

    commit

    select phone,count(1) t from student_phone
    group by phone order by t desc
    ---------------------------
    drop table student_phone

    create table student_phone (
    id int primary key,
    stu_name varchar2(20),
    phone int
    )

    create table phone(
    id int primary key,
    phone_name varchar2(200)
    )
    insert into phone values(1,'荣耀v9(华为)');
    insert into phone values(2,'小米 note2');
    commit

    select * from phone
    select * from student_phone

    insert into student_phone values (1,'小红',1);
    insert into student_phone values (2,'小军',1);
    insert into student_phone values (3,'小红',2);
    insert into student_phone values (4,'小平',2);
    insert into student_phone values (5,'小平',2);
    insert into student_phone values (6,'小云',2);
    insert into student_phone values (7,'小云',2);
    insert into student_phone values (8,'小云',2);
    commit

    select phone,count(1) t from student_phone
    group by phone order by t desc

    可以通过phone=id
    select * from student_phone,phone
    where student_phone.phone=phone.id

    ------------------------------
    select a.stu_name,b.phone_name from student_phone a,phone b
    where a.phone=b.id

    -------------------------------------
    select phone_name,count(1) 总人数 from
    (
    select a.stu_name,b.phone_name from student_phone a,phone b
    where a.phone=b.id
    ) ttttt
    group by phone_name order by 总人数 desc

    ----------------------------

    -- 多表关联
    -- 内关联跟左关联只是改一下关键字inner—>left
    -- 内关联
    select * from student_phone,phone
    where student_phone.phone=phone.id
    -- 1.内关联 (丢失不满足的记录条数)
    select * from student_phone a
    inner join
    phone b on a.phone=b.id


    --
    insert into student_phone values (9,'小成',3);
    commit
    select * from phone
    select * from student_phone


    select a.stu_name,b.phone_name from student_phone a
    inner join
    phone b on a.phone=b.id
    --测试
    insert into phone values(3,'iphone8(美国总统专用)');
    commit
    delete from phone where id=3

    丢失了小成

    -- 2.左关联

    select a.stu_name,b.phone_name from student_phone a
    left join
    phone b on a.phone=b.id

    -- 改进一下
    select a.stu_name,nvl(b.phone_name,'未知') from student_phone a
    left join
    phone b on a.phone=b.id

    --回归原始 (oracle专用+:即把丢失的+回来)
    select a.stu_name,b.phone_name from student_phone a,phone b
    where a.phone=b.id(+)

    --求什么手机最多人使用(排序)
    --分组[后]最大值
    select * from(
    select phone,count(1) counts from student_phone group by phone
    order by counts desc
    )
    where rownum=1


    select * from(
    select phone,count(1) counts from student_phone group by phone
    order by counts asc
    )
    where rownum=1

  • 相关阅读:
    map用法详解
    求用1,2,5这三个数不同个数组合的和为100的组合个数
    【雅虎笔试题】两个已经排好序的数组,找中位数
    C++ STL算法系列4---unique , unique_copy函数
    C++ STL算法系列3---求和:accumulate
    C++ STL算法系列2---find ,find_first_of , find_if , adjacent_find的使用
    C/C++面试小知识点
    C语言内存地址基础
    C语言函数指针基础
    C++ STL算法系列1---count函数
  • 原文地址:https://www.cnblogs.com/yncx/p/6542708.html
Copyright © 2011-2022 走看看