第八章:连接查询

2024-06-13 1880阅读

一、连接查询

基本概念

  • 当查询结果来源于多张表时,需要将多张表连成一个大的数据集,在筛选合适的结果
  • 连接查询可以通过连接运算符(连接条件)可以实现多个表查询

    内连接

    • 查询的结果把两张表中相同的地方连接起来

      第八章:连接查询

      左链接

      • 查询结果包括内连接,同时查询左表特有的数据,对于右表中不存在的数据使用null填充

        第八章:连接查询

        右连接

        • 查询结果包括内连接,同时查询右表特有的数据,对于左表中不存在的数据使用null填充

          第八章:连接查询

          二、连接语法

          内连接语法

          1.内连接标准语法推荐

          主要找2张表中关联(相同)字段

          -- 语法一:
          select * from 表1 inner join 表2 on 表1.字段=表2.字段
          /*根据表中相同字段id来进查找*/
          select * from a inner join b on a.id = b.id;

          第八章:连接查询

          错误示例

          强行关联,导致错误

          第八章:连接查询

          1.2内连接隐式连接

          用where连接,但是一般使用第一种方法

          select * from 表1,表2 where 表1.字段 = 表2.字段
          -- 例子
          select * from students , score where students.name = score.name;

           1.3内连接查询,显示指定的字段

          -- 学生表与分数表内连接,只显示爱好和分数
          select score,aihao 
          from students inner join score 
          on students.name = score.name;
          

          错误示例:

          学生表与分数表内连接,只显示班级、分数、爱好

          第八章:连接查询

          正确示例

          -- 学生表与分数表内连接,只显示爱好和分数
          select students.class,score,aihao 
          from students inner join score 
          on students.name = score.name;

          第八章:连接查询

          1.4表的别名在查询中使用

          作用:有的表名太长不太好记录,所以用别名来代替

          as 可省略不写

          /*语法*/
          select * from 表名1 别名1 inner join 表名2 别名2 
          on 别名1.字段名 = 别名2.字段名

          例子:

          /* 把students 表起名为st  score表起名为sc,所以下面关联字段就变为 */
          select score,aihao from 
          students st 
          inner join score sc 
          on 
          st.name = sc.name;
          -- 用where语句查询
          /*查询学生叫杨洋,同时显示成绩对应的课程*/
          select score,coursename cname from score sc 
          inner join 
          course co on
          sc.courseid = co.courseid
          where SC.name = '杨洋';
          -- 用where & and语句查询
          /*查询许问问,分数大于50的成绩和课程*/
          select score,coursename from score sc 
          inner join course co on
          sc.courseid = co.courseid
          where SC.name = '许问问' and sc.score > 60;

          1.5多表联查

          • 查询语句需要多张关联
          • 两表中有相同字段,查询中要加上表名称,不加会报错

            多表联查

            /*内连接多表联查语法*/
            select * from 表名1 
            inner join 表名2 on 表1.字段=表2.字段
            inner join 表名3 on 表2.字段 = 表3.字段
            where 条件;
            -- 例子
            -- 查询学生信息、成绩、以及成绩对应的课程表
            SELECT * from 
            students st 
            inner join score sc on st.name = sc.name 
            inner join course co on sc.courseid = co.courseid;
            -- 多表联查带where条件
            -- 查询所有学生数学成绩,只显示姓名、成绩、课程
            SELECT st.name,sc.score,co.coursename from 
            students st 
            inner join score sc on st.name = sc.name 
            inner join course co on sc.courseid = co.courseid
            where co.coursename = '数学';
            -- 多表联查带order by、limit字段
            /* 查询女同学的分数*,显示成绩、课程、名字只显示前3行*/
            select sc.score,co.courseid,st.name from 
            students st inner join score sc on st.name = sc.name
            inner join course co on sc.courseid = co.courseid
            where st.sex = '女' ORDER BY sc.score limit 3;

             左连接语法

            /*语法*/
            select * from 表名1  left join 表名2  on 表名1.字段名1 = 表名2.字段名2
            -- 例子
            /*用左连接查看表中学生成绩,名字*/
            select sc.score,st.name from students st 
            left join score sc on st.name = sc.name;

             显示表中全部名字,没有成绩显示null

            第八章:连接查询

             右连接语法

            /*语法*/
            select * from 表名1  right join 表名2  on 表名1.字段名1 = 表名2.字段名2
            /*用右连接查询学生为女同学的爱好*/
            select sc.like from students st right join score sc on
            st.name = sc.name where sex = '女';
            order by&limit练习
            /*用右连接查询学生为女同学的爱好,成绩从高到低,显示2,6行直接的数据*/
            select sc.like,sc.score from students st right join score sc on
            st.name = sc.name where sex = '女' order by sc.score desc limit 1,3;

             显示表中全部like字段,没有like显示null

            第八章:连接查询

             总结内连接和左右连接区别:

            内连接只显示满足条件

            左右连接,只显示满足条件+原来表中的字段

             

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]