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

第七讲:子查询

 

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;

           注:可以自动创建文件,不可以重写已创建文件

                  生成文件格式:行用来区分记录,制表符区分字段;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值