首页 > 数据库 >MySQL学习日志七,联表查询Join ON

MySQL学习日志七,联表查询Join ON

时间:2023-05-13 21:33:31浏览次数:44  
标签:JOIN join 查询 studentno subjectno 联表 MySQL Join SELECT

网上找的七种Join查询图片

-- 查询参加考试的同学,包含的信息包括学号,姓名,科目编号,分数
/*
分析思路
1.分析需求,查询的字段涉及到哪些表
2.确定要哪些连接查询
3.确定交叉点,涉及到的表有哪些相同的字段
判断条件:学生表的studentno = 成绩表的studentno
*/
join on 连接查询
join where 等价查询

inner join 两表连接的相同数据

-- inner join
SELECT s.studentno,studentname,subjectno,studentresult
FROM student as s
INNER JOIN result as r
WHERE s.studentno=r.studentno

left join 以右表为基准查询

--left join
SELECT s.studentno,studentname,subjectno,studentresult
FROM student as s
LEFT JOIN result as r
ON s.studentno=r.studentno

right join 以右表为基准查询

--right join
SELECT s.studentno,studentname,subjectno,studentresult
FROM student as s
RIGHT JOIN result as r
ON s.studentno=r.studentno

查询没有参加考试的同学,包含的信息包括学号,姓名,科目编号,分数

SELECT s.studentno,studentname,subjectno,studentresult
FROM student as s
LEFT JOIN result as r
ON s.studentno=r.studentno
WHERE `subjectno` is NULL

查询没有参加考试的同学,包含的信息包括学号,姓名,科目,分数

SELECT s.studentno,studentname,subjectname,studentresult
FROM student as s
RIGHT  JOIN result as r
ON s.studentno=r.studentno
inner JOIN `subject` sub
on r.subjectno=sub.subjectno

查询学生所属的年级(学号,姓名,年级名称)

SELECT studentno,studentname,gradename
from student s
INNER JOIN grade g
on s.gradeid=g.gradeid

查询科目对应的年级(科目名称,年级名称)

SELECT subjectname,gradename
from `subject`
INNER JOIN grade
on `subject`.gradeid=grade.gradeid

查询参加高等数学-1考试的同学,包含的信息包括学号,姓名,科目名,分数

SELECT s.studentno,studentname,subjectname,studentresult
FROM student s
INNER JOIN result r
ON s.studentno=r.studentno
LEFT JOIN `subject` sub
on r.subjectno=sub.subjectno
WHERE sub.subjectname='高等数学-1'

思路分析

  1. 分析需求,查询的字段设计到哪些表

  2. 确定要哪种连接

  3. 判断交叉点,作为条件

语法:

查询字段 from 表1 left join 表2 on 交叉条件

查询字段 from 表1 right join 表2 on 交叉条件

自连接:将一个表拆分成两张表,之后进行连接

标签:JOIN,join,查询,studentno,subjectno,联表,MySQL,Join,SELECT
From: https://www.cnblogs.com/yzx-sir/p/17398147.html

相关文章

  • MySQL学习日志六,DQL查询语句
    点我查询狂神school.sql代码DataQueryLanguage:数据查询语言所有的查询都用它select无论是简单的还是复杂的数据都可以查询select是数据库最核心的一个语句,使用频率最高SELECT语句的完整语法为:SELECT[ALL|DISTINCT|DISTINCTROW|TOP]{*|talbe.*|[table.]field1[......
  • mysql性能剖析与优化1
    学习目标:了解mysql的索引和什么是慢查询掌握如何配置mysql的my.cnf文件观测都市商城的数据库性能,找到性能不足的语句Jmeter的jdcb协议selectcount(*)fromsq_orderform;selectIDfromsq_orderform;--id主键自带唯一性索引0.58sselect*fromsq_orderform;--......
  • MySQL开窗函数
    MySQL开窗函数知识点三种开窗函数:row_number(),rank(),dense_rank()这三种函数都是用于返回结果集的分组内每行的排名区别:row_number():特点是唯一且连续,如果四个人是按成绩排名,那么是1234这样排的,即使有重分的人 rank():特点是并列不连续,如果四个人是按成绩排名,那么......
  • MySQL-简单总结
    部分概念:1、在数据库中产生数据不一致的根本原因是冗余2、一个事务对某数据加S锁后,其它的事务不能对该数据加任何类型的锁(错误):所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁3、一个数据库只有一个模式和一个内模式4、使某个事务......
  • MySQL学习日志五,外键与DML语言
    外键准备一个表,gradeid作为外键CREATETABLE`grade`( `gradeid`INT(10)NOTNULLAUTO_INCREMENTCOMMENT'年级id', `gradename`VARCHAR(50)NOTNULLCOMMENT'年级名称', PRIMARYKEY(`gradeid`))ENGINE=INNODBDEFAULTCHARSET=utf8创建生成的表方法一:在......
  • Window环境下Java备份和恢复Mysql数据
    ***java执行代码中必须加cmd/cProcessexec=Runtime.getRuntime().exec("cmd/cmysqldump-uroot-p123456xxl_job>e:/home/jobbak.sql");Processexec1=Runtime.getRuntime().exec("pingwww.baidu.com");BufferedReaderbufferedReader=newBuf......
  • Mysql union和union all用法
    我们经常会碰到这样的应用,两个表的数据按照一定的查询条件查询出来以后,需要将结果合并到一起显示出来,这个时候就需要用到union和unionall关键字来实现这样的功能,union和unionall的主要区别是unionall是把结果集直接合并在一起,而union是将unionall后的结果镜像一次distinct,去除......
  • mysql用户表root用户被锁定,无法登陆(Account is locked)
    今天看到mysql的user表就打开了看看,看到root还有些权限是N,然后顺手就改成了Y,结果保存之后就凉凉了,数据库就打不开了,报“Accountislocked”这个错误,上网排查了好半天才解决,解决方法记录一下。解决思路:1、使用skip-grant-tables跳过密码验证,此时可以打开MySQL服务并登录2、......
  • MySql的数据存储之B+树(浅谈)
    一.MySql的实际存储位置B+树是MySql数据结构的主流存储方式,包括InnoDB和MYISAM引擎,它们的默认存储结构都是B+树了解B+树前,我们先要知道MySql的实际存储位置在哪?有人会说它存在我么的D盘或C盘的MySql文件夹的Data目录里,这个回答没错,我们在深入的了解一下呢?不管是在个人电脑上......
  • MySQL多列字段去重的案例实践
    作者:刘晨网名bisal,具有十年以上信息系统建设经验,目前主要从事数据库应用研发能力提升和技术管理方面的工作,OracleACE(Alums),腾讯云TVP,墨天轮MVP,拥有OracleOCM&OCP、EXINDevOpsMaster、SCJP、OBCA、腾讯云CloudLite、PCSD、GDCA等技术认证,国内首批OracleYEP成员,OCMU成......