zoukankan      html  css  js  c++  java
  • 四、SQL之单表和多表查询

    一、单表查询

     

    -- 通配符*,查询整个表
    SELECT * FROM `test_zjx`;
    
    -- 过滤条件
    SELECT * FROM `test_zjx` WHERE `name`='zhangjx3';
    
    -- 条件 and 且
    SELECT * FROM `test_zjx` WHERE `name`='zhangjx3' AND sex=1;
    
    -- 条件 or 或
    SELECT * FROM `test_zjx` WHERE `name`='zhangjx3' OR id=9;
    
    -- 条件 and 和 or 同时存在
    SELECT * FROM `test_zjx` WHERE `name`='zhangjx3' AND sex=1 OR id=9;
    
    -- 不等于 !=
    SELECT * FROM `test_zjx` WHERE sex!=2;
    SELECT * FROM `test_zjx` WHERE sex<>2;

    二、多表查询

    1)两张表查询 

         

    注意:不加where过滤条件,就是test_zjx表的5条信息,test_info表的5条信息的笛卡儿积。一共25条

    卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员
    例如,A={a,b}, B={0,1,2},则
    A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
    B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
     

    2)外键

    多表关联使用:外键

     test_zjx和test_info两张表,test_zjx的主键是id,test_info的外键是memberID。如下是如何设置外键:

     

      

    3)多张表查询

      查询某个老师带的是哪个班?

    select * from S,SC,C where S.S# =SC.S#  and SC.C# = C.C#

      

    三、连接查询

     1)内连接----》INNER JOIN

    select * from member a,info b where a.id = b.memberID;------》是隐性内连接

    改成INNER JOIN:两个表之间加上INNER JOIN ,where 改为on 

    --内连接INNER JOIN
    select * from member a INNER JOIN info b on a.id = b.memberID and `address`='北京'; 

    2)左外连接-----LEFT JOIN

    左外连接以左表为主表,主表的所有数据都会显示,右表为从表,从表只有匹配的数据才会显示

    语法:select 字段1,字段2  from 表1 LEFT JOIN 表2 on 条件 

    A、查询所有字段*:

    --左外连接
    select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京';

     B、查询部分字段

    select a.id,a.name,a.address,b.memberID,b.id from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京'; 

      

    3)右外连接-----RIGHT JOIN

    与左连接相反,右外连接以坐表为主表,主表的所有数据都会显示,左表为从表,从表只有匹配的数据才会显示 

    --右外连接
    select a.id,a.name,a.address,b.memberID,b.id from member a RIGHT JOIN info b on a.id =b.memberID and `address` = '北京'; 

    四、查询结果排序(order by)

    1)升序:asc

    --排序 默认时asc,可以不写
    select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京' order by a.id asc;

    2) 降序:desc

    -- 降序 desc,不可省略
    -- 按照前后顺序:a.id升序排序完成,有相同序号的,会依据b.id降序(a.id排序的优先级在前面)
    select * from member a LEFT JOIN info b on a.id =b.memberID and `address` = '北京' order by a.id asc,b.id desc;
  • 相关阅读:
    2014年工作中遇到的20个问题:120-140
    迷茫与飞跃:9月开始,明确了研究方向,功力提升明显,成绩比较显著
    迷茫与飞跃:9月开始,明确了研究方向,功力提升明显,成绩比较显著
    Freemarker中的日期转换
    Freemarker中的日期转换
    Java实现统计方案
    Java实现统计方案
    Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers
    Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers
    Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/13597734.html
Copyright © 2011-2022 走看看