您的位置:首页 > 数据库 > MySQL

mysql笔记(连接与子查询部分)

2014-06-22 21:16 232 查看
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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: