精华内容
下载资源
问答
  • 联表查询

    2020-06-02 16:30:29
    联表查询

    联表查询

    在这里插入图片描述

    展开全文
  • 本文描述了mysql嵌套查询和联表查询优化的方法,有些情况可以使用这种优化方法,而有些情况,这种方法就无能为力了
  • 进行后台数据查询的时候经常会有联表查询的情况,联表查询的时候判断是联表查询比较好还是单表分步查询比较好的条件如下: 可以用join,因为被驱动表t_area的area_code是主键索引,会用Index Nested-Loop Join这个...

    进行后台数据查询的时候经常会有联表查询的情况,联表查询的时候判断是联表查询比较好还是单表分步查询比较好的条件如下:

    可以用join,因为被驱动表t_area的area_code是主键索引,会用Index Nested-Loop Join这个算法,效率比较高

    你可以把sql前面加EXPLAIN 在客户端上运行一下

    没出现Block Nested Loop这个就可以用

    展开全文
  • MySQL联表查询

    2021-06-07 11:28:28
    联表查询JOIN 这是student表 这是result表 查询参加了考试的同学(学号,姓名,科目编号,分数) /*思路: 1.分析需求,分析查询的字段来自哪些表(连接查询) 2.确定使用哪种连接查询?七种 确定交叉点(这两个表中...

    1、JOIN关键词

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    联表查询JOIN
    这是student表
    在这里插入图片描述
    这是result表
    在这里插入图片描述

    查询参加了考试的同学(学号,姓名,科目编号,分数)

    /*思路:
    1.分析需求,分析查询的字段来自哪些表(连接查询)
    2.确定使用哪种连接查询?七种
    确定交叉点(这两个表中哪个数据是相同的)
    判断的条件:学生表中studentNo = 成绩表中的studentNo
    */
    -- INNER JOIN 就类似取两个表的交集部分
    SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult` FROM student AS s INNER JOIN result AS r ON s.studentNo = r.studentNo;
    

    在这里插入图片描述
    RIGHT JOIN

    SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult` FROM student AS s right join result AS r ON s.studentNO = r.studentNo;
    

    如果对连接查询这块不懂可以看看这篇帖子:
    MySQL连接查询
    在没有看这篇帖子之前,我一直以为左连接查询和左外连接查询是两个东西,这是一种错误,看了这篇帖子后,立即纠正了这种错误思维。
    LEFT JOIN

    SELECT s.studentNo,`StudentName`,`SubjectNo`,`StudentResult` FROM student AS s LEFT JOIN result AS r ON s.studentNo = r.studentNo;
    

    在这里插入图片描述

    操作 描述
    INNER JOIN 如果表中至少有一个匹配,就返回行
    LEFT JOIN 会从左标中返回所有的值,即使右表中没有匹配
    RIGHT JOIN 会从右标中返回所有的值,即使左表中没有匹配

    查询缺考的同学

    SELECT s.studentNo,`StudentName`,`SubjectNo`,`StudentResult` FROM student AS s LEFT JOIN result AS r ON s.studentNo = r.studentNo WHERE StudentResult IS null;
    

    JOIN (连接的表) ON (判断的条件)连接查询
    where 指定结果需满足的条件

    自连接

    自己的表和自己的表连接,核心:一张表拆分为两张一样的表即可
    在这里插入图片描述
    在这里插入图片描述
    父类表

    categoryid categoryName
    2 信息技术
    3 软件开发
    5 美术设计

    子类表

    pid categoryid categoryName
    3 4 数据库
    2 8 办公信息
    3 6 web开发
    5 7 ps设计
    1 5 美术设计

    操作:查询父类表对应子类表的关系

    父类 子类
    信息技术 办公信息
    软件开发 数据库
    软件开发 web开发
    美术设计 ps技术
    -- 查询父子信息:把一张表看为两个一模一样的表
    SELECT a.`categoryName` AS '父栏目',b.`categoryName` AS '子栏目' 
    FROM `category` AS a,`category` AS b
    WHERE a.`categoryid` = b.`pid`;
    

    在这里插入图片描述
    查询学生所属的年级(学号,学生姓名,年级名称)

    SELECT `StudentNo`,`StudentName`,`GradeName`
    FROM `student` AS s
    INNER JOIN `garde` AS g
    ON s.`GradeId` = G.`GradeId`;
    

    在这里插入图片描述
    查询科目所属的年级(科目名称,年级名称)

    SELECT `SubjectName`,`GradeName`
    FROM `subject` AS sub
    INNER JOIN `grade` AS g
    ON sub.`Gradeid` = g.`Gradeid`;
    

    在这里插入图片描述
    查询参加科目为数据库结构-1考试的学生信息(学号,学生姓名,科目名,分数)

    SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`studentResult`
    FROM `student` AS s
    INNER JOIN `result` AS r
    ON s.`StudentNo` = r.`StudentNo`
    INNER JOIN `subject` AS sub
    ON r.`SubjectNo` = sub.`SubjectNo`
    WHERE sub.`SubjectName` = '数据库结构-1';
    

    在这里插入图片描述

    2、分页和排序

    分页LIMIT和排序ORDER BY

    -- 排序:升序ASC,降序DESC
    -- 查询参加科目为数据库结构-1考试的学生信息(学号,学生姓名,科目名,分数)的成绩降序排序
    SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`studentResult`
    FROM `student` AS s
    INNER JOIN `result` AS r
    ON s.`StudentNo` = r.`StudentNo`
    INNER JOIN `subject` AS sub
    ON r.`SubjectNo` = sub.`SubjectNo`
    WHERE sub.`SubjectName` = '数据库结构-1'
    ORDER BY `StudentResult` DESC;
    

    在这里插入图片描述

    排序

    -- 假如有100万条数据,怎么在浏览器进行展现?
    -- 环节数据库压力,用户体验更好,瀑布流
    -- 查询参加科目为数据库结构-1考试的学生信息(学号,学生姓名,科目名,分数)的成绩倒数后五名
    SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`studentResult`
    FROM `student` AS s
    INNER JOIN `result` AS r
    ON s.`StudentNo` = r.`StudentNo`
    INNER JOIN `subject` AS sub
    ON r.`SubjectNo` = sub.`SubjectNo`
    WHERE sub.`SubjectName` = '数据库结构-1'
    ORDER BY `StudentResult` ASC
    LIMIT (0,5);
    -- 语法:LIMIT((n-1)*pageSize,pageSize)
    -- pageSize:页面大小,n:当前页
    -- 数据总数/页面大小+1 = 总页数
    

    语法:limit(当前页-1)*页面数据大小,页面数据大小

    查询Java第一学年课程成绩排名前十的学生并且分数要大于80的学生信息(学号,姓名,课程名称,分数)

    SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
    FROM `student` AS s
    INNER JOIN `result` AS r
    ON s.studentNo = r.studentNo
    INNER JOIN `subject` AS sub
    ON sub.`SubjectNo` = r.`SubjectNo`
    WHERE r.`SubjectName` = 'Java第一学年' AND StudentResult >= 80
    ORDER BY SbujectResult DESC
    LIMIT (0,10);
    

    3、子查询

    在where语句中嵌套一个子查询语句

    -- 1.查询 数据库结构-1 科目的所有考试结果(学号,科目编号,成绩),降序排序
    -- 方式一:使用连接查询
    SELECT `StudentNo`,r.`SubjectNo`,`StudentResult`
    FROM `result` AS r
    INNER JOIN `subject` AS sub
    ON r.`SubjectNo` = sub.`SubjectNo`
    WHERE SubjectName = '数据库结构-1'
    ORDER BY StudentResult DESC;
    
    -- 方式2:使用子查询
    SELECT `StudentNo`,`SubjectNo`,`StudentResult`
    FROM `result`
    WHERE SubjectNo = (
    	SELECT SubjectNo FROM `subject` 
    	WHERE SubjectName='数据库结构-1'
    )ORDER BY StudentResult DESC;
    

    在这里插入图片描述
    查询分数不小于80分的学生的学号和姓名

    SELECT DISTINCT s.`StudentNo`,`StudentName`
    FROM student AS s
    INNER JOIN result AS r
    ON s.StudentNo = r.StudentNo
    WHERE `StudentResult`>=80;
    

    查询科目编号为高等数学-2的分数不小于80分的学生的学号和姓名

    SELECT DISTINCT s.`StudentNo`,`StudentName`
    FROM student AS s
    INNER JOIN result AS r
    ON s.StudentNo = r.StudentNo
    WHERE `StudentResult`>=80 AND `SubjectNo` = (
    	SELECT SubjectNo FROM subject WHERE SubjectName = '高等数学-2'
    );
    
    展开全文
  • laravel的联表查询

    2021-04-19 16:34:36
    本文目录一、联表查询1.1 创建迁移文件1.2 执行迁移文件1.3 模拟数据(通过填充器)1.4 联表查询例子二、关联模型(重点)2.1 一对一关系2.2 一对多关系2.3 多对多关系(抽象) 一、联表查询 联表要求至少得有2张表...

    一、联表查询

    联表要求至少得有2张表(除了自己【表】连接自己【表】,自联查询),并且还是存在关系的两张表。
    例如:可以建立2张表:文章表、作者表。

    文章表(article):

    id 主键
    Article_name 文章名称,varchar(50),not null
    Author_id 作者id,int,not null

    作者表(author):

    id 主键
    Author_name 作者名称 ,varchar(20),not null

    1.1 创建迁移文件

    php artisan make:migration create_article_table
    php artisan make:migration create_author_table
    在这里插入图片描述
    article加上字段:

    $table->increments('id');
    $table->string('article_name', 50)->comment('文章标题');
    $table->integer('author_id') -> comment('作者id');
    $table->timestamps();
    

    在这里插入图片描述


    author加上字段:

    $table->increments('id');
    $table->string('author_name', 20) -> comment('作者名称');
    $table->timestamps();
    

    在这里插入图片描述


    1.2 执行迁移文件

    然后执行迁移文件:
    php artisan migrate
    在这里插入图片描述
    在这里插入图片描述

    1.3 模拟数据(通过填充器)

    1、创建填充器文件(可以将多个数据表的写入操作写在一起)
    php artisan make:seeder ArticleAndAuthorTableSeeder
    在这里插入图片描述
    2、编写数据模拟的代码
    在这里插入图片描述
    3、执行填充器
    php artisan db:seed --class=ArticleAndAuthorTableSeeder
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.4 联表查询例子

    要求查询数据表(文章表、作者表),查询出文章的信息包含了作者名称,联表查询一共有:内联表(inner)、左联表(left)、右联表(right)。

    原始sql语句:【左外联表】
    select article.id,article.article_name, author.author_name from article left join author on article.author_id = author.id
    在这里插入图片描述

    将上述的sql语句改成链式操作:

    语法:DB 门面/模型 -> join 联表方式名称(关联的表名,表1的字段,运算符,表2的字段)

    左连接:如果你是想要执行左链接而不是内链接可以使用leftJoin方法,该方法和join方法的用法
    创建路由:
    在这里插入图片描述
    创建方法:
    在这里插入图片描述
    效果:
    在这里插入图片描述

    在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

    展开全文
  • laravel 联表查询

    千次阅读 2020-06-01 21:06:21
    联表查询得有两张有联系的数据表,(除了自己连接自己的,自联查询) 案例:创建两个表,进行关联查询(使用laravel的数据迁移) 创建两个表,article表和author表。 (1)使用php artisan的命令创建迁移文件 在...
  • 注意:这里只对同库联表查询做介绍,跨库联表查询可能在之后也会介绍(因为公司架构变动,之后可能会联表查询) 我用到的联表查询有两种,一种是mongoose的populate,一种是$lookup 一、populate populate是使用...
  • MySql会用到联表查询,对于刚学习的新手来说,可能会理解起来有难度。下面这篇文章就来给大家详细介绍MySQL联表查询的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 关系型数据库,...
  • Oracle 联表查询

    千次阅读 2018-07-02 18:04:32
    以下是在写接口时用到的一个功能点,叫做联表查询,虽然不是我Android端的知识,但毕竟也是自己不懂的东西,总结下来吧。 联表查询,顾名思义,指的是结合多张数据库表进行查询,取两张表的内容结合成一个视图返回...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,751
精华内容 1,100
关键字:

联表查询