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

MySQL学习笔记 第七讲:子查询

2013-07-15 10:06 211 查看
第七讲:子查询

1.定义:语句内部的查询语句,就是子查询语句,子查询语句需要用括号括起来;
2.子查询分类
①不同的分类会有不同的使用方式;
② 分类标准:子查询出现的位置:where型:where后;from型:from后;exists型;
子查询返回值形式:单一值、一列、多列、表(多行多列);
列子查询,强调的是一列,使用集合类的操作符来完成in|not in;还有其他集合操作符any(任何一个)、all(全部)
其中,=any()等同于in,!=all()等同于not in;
③返回一行
在参与比较时,使用括号可以构建一行(filed1,filed2)
例:select t_name,gender,c_name from teacher_class where (gender,c_name) =
(select distinct gender,c_name from teacher_class where t_name = '李白' and c_name = 'php115');
④返回一个表
如果用于在from子句内,要求使用一个表,不能是一个结果,应该给这个结果起个名字;
select * from (select t_name,c_name,days from teacher_class where days >15) as temp
where t_name like '李%';
注:外部查询所使用列名,是由子查询指定;
⑤exists:exists(subquery)
判断依据:如果子查询可以返回数据,则认为exists表达式返回真,否则,返回假;
例:select * from teacher_class where exists(select * from teacher where teacher_class.id = t_id;
3.连接查询(join)
每个实体一个表,一个业务逻辑,使用多个实体的数据,多张表应该在一起使用,将多个表记录连接起来
总体思路:将所有的数据,按照某种条件连接起来,再进行筛选处理。
连接分类:根据连接条件不同分类:内连接、外连接、自然连接
①内连接:数据内部连接,要求连接的多个数据必须存在才能进行连接
语法:tbl_left inner join tbl_right on 连接条件
例:select * from join_teacher inner join join_teacher_class on join_teacher.id = join_teacher_class.t_id;
注:不存在连接不到的数据;
②外连接:如果负责连接的一个或多个数据不真实存在,则称之为外连接。
语法:tbl_left left outer join tbl_fight on 连接条件
例:select * from join_teacher left outer join join_teacher_class on join_teacher.id = join_teacher_class.t_id;
③内连接的处理
ⅰ.内连接,在连接时,是可以省略条件的,意味着所有左表数据都要与右表的数据连接,存在m*n个连接;
这种连接称之为:交叉连接,或者笛卡尔积;此时可以使用cross join代替inner join
注:mysql中cross join与inner join相同,但在数据库定义上,交叉连接就是笛卡尔积,是没有条件的内连接;
mysql inner join是默认的连接方案,可以省略inner
ⅱ.有条件的内连接会过滤非法的连接
连接条件:where条件:过滤条件;on 条件:连接条件;using 条件:负责连接的两个字段名称一致。
④ 外连接的处理
ⅰ.分类:左外连接、右外连接、全外连接(暂不支持)
ⅱ.左连接 left outer join (outer可以省略):
在连接时,如果出现左边表数据连接不上右边表的情况,则左边表达的数据在最终结果内保留;
如果出现右表的数据连接不到左表的情况,右表数据被丢弃;
ⅲ.右连接:右表保留左表丢弃,right join
注:外连接条件:on、using 不能使用where(using会去掉结果中的重复字段,并放在列前)
不能使用没有条件的外连接;
⑤自然连接:内:natural join、左外:natural left join、右外:natural right join
通过mysql自己的判断完成连接过程,不需要指定连接条件,mysql会使用多表内的相同字段作为连接条件;
4.select导出语句
将检索到的数据,保存到服务器的文件内
语法:select * into outfile "文件地址" from ...
例:select * into outfile 'e:/amp/one' from teacher_class;
注:可以自动创建文件,不可以重写已创建文件
生成文件格式:行用来区分记录,制表符区分字段;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: