zoukankan      html  css  js  c++  java
  • mysql笔记(连接与子查询部分)

    SQL92的连接查询语法比较简单,多将多个table放置在from关键字之后,多个table用“,”隔开;
    连接的条件放在where条件之后,与查询条件直接用and逻辑运算符进行连接。如果条件中使用的是相等,
    则称为等值连接,相反则称为非等值,如果没有任何条件则称为广义笛卡尔积。
    广义笛卡尔积:select s.*, c.* from student s, classes c;
    等值:select s.*, c.* from student s, classes c where s.cid = c.id;
    非等值:select s.*, c.* from student s, classes c where s.cid <> c.id;
    select s.*, c.name classes from classes c, student s where c.id = s.classes_id and s.name is not null;
    SQL99连接查询
    1、交叉连接cross join,类似于SQL92的笛卡尔积查询,无需条件。如:
    select s.*, c.name from student s cross join classes c;
    2、自然连接 natural join查询,无需条件,默认条件是将2个table中的相同字段作为连接条件,如果没有相同字段,查询的结果就是空。
    select s.*, c.name from student s natural join classes c;
    3、using子句连接查询:using的子句可以是一列或多列,显示的指定两个表中同名列作为连接条件。
    如果用natural join的连接查询,会把所有的相同字段作为连接查询。而using可以指定相同列及个数。
    select s.*, c.name from student s join classes c using(id);
    4、    join … on连接查询,查询条件在on中完成,每个on语句只能指定一个条件。
    select s.*, c.name from student s join classes c on s.classes_id = c.id;
    5、    左右外连接:3种外连接,left [outer] join、right [outer] join,连接条件都是通过用on子句来指定,条件可以等值、非等值。
    select s.*, c.name from student s left join classes c on s.classes_id = c.id;
    select s.*, c.name from student s right join classes c on s.classes_id = c.id;
    子查询
        子查询就是指在查询语句中嵌套另一个查询,子查询可以支持多层嵌套。子查询可以出现在2个位置:
        from关键字之后,被当做一个表来进行查询,这种用法被称为行内视图,因为该子查询的实质就是一个临时视图
        出现在where条件之后作为过滤条件的值 
    子查询注意点:
        子查询用括号括起来,特别情况下需要起一个临时名称
        子查询当做临时表时(在from之后的子查询),可以为该子查询起别名,尤其是要作为前缀来限定数据列名时
        子查询用作过滤条件时,将子查询放在比较运算符的右边,提供可读性
        子查询作为过滤条件时,单行子查询使用单行运算符,多行子查询用多行运算符
    将from后面的子查询当做一个table来用:
    select * from (select id, name from classes) s where s.id in (1, 2);
    当做条件来用:
    select * from student s where s.classes_id in (select id from classes);
    select * from student s where s.classes_id = any (select id from classes);
    select * from student s where s.classes_id > any (select id from classes);



    作者:hoojo 
    出处:http://www.cnblogs.com/hoojo/archive/2011/06/20/2085416.html 
    blog:http://blog.csdn.net/IBM_hoojo
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    scala02
    5.主从复制
    4.mysql锁机制
    3mysql查询截取分析
    2.2mysql 索引优化
    2.1mysql索引优化分析
    1.mysql 架构介绍命令,配置文件,架构,存储引擎,
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
    Glide使用
    网络通信框架Retrofit2
  • 原文地址:https://www.cnblogs.com/xiaoheng008/p/3803065.html
Copyright © 2011-2022 走看看