mysql练习-数据查询之连接查询

2023-11-03

连接查询

若在一个查询请求中,涉及到多个表中的数据,则需要进行连接查询。 按连接方式分: 内连接 (默认连接类型)INNER JOIN、外连接、自连接、交叉连接

  • 内连接

1.等值连接—连接运算符为“=”
例:查询每个学生的基本信息及其选课情况。

SELECT * FROM student INNER JOIN sc
ON stuent.sno=sc.sno;
或:
SELECT * FROM student, sc
WHERE student.sno=sc.sno;

2.自然连接–将等值连接中重复的属性列去掉
例:查询每个学生的基本信息及其选课情况。

SELECT student.sno, sname, ssex, sage, sdept, cno, grade
FROM student INNER JOIN sc
ON student.sno=sc.sno;

3.自连接:一个表进行自连接
需要给表起别名以示区别;由于所有属性名都是同名属性,因此必须使用别名前缀。
例:查询各门课程的先修课情况

SELECT FIRST.cno,FIRST.cname,
			SECOND.cname AS '先修课'
FROM course FIRST,course SECOND
WHERE FIRST.cpno=SECOND.cno;
对于多表连接,若连接方式为内连接,则多采用将连接条件写在where子句中的形式,更加简洁。
如:
SELECT sname,cname,grade
FROM student,sc,course 
WHERE student.sno=sc.sno AND
sc.cno=course.cno AND 
sdept=‘计算机系’
对于多表连接,若多个表中均有同名列,则必须在列名指定输出列来自与哪个表。
如:
SELECT student.sno,sname,
		   cname,grade
FROM student,sc,course 
WHERE student.sno=sc.sno AND
sc.cno=course.cno AND 
sdept=‘计算机系’
  • 外连接

外连接与内连接的区别:
内连接操作只输出满足连接条件的元组。
外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出。

1.左外连接:LEFT [OUTER] JOIN

例:查询学生的选课情况,要求输出学号,姓名,课程代号,成绩。(包括学生未选课的信息)
SELECT student.sno,sname,cno,grade
FROM student LEFT JOIN sc
ON student.sno=sc.sno 
ORDER BY student.sno;

2.右外连接:RIGHT [OUTER] JOIN

例: 查询教师的工资情况
SELECT gc.*,js.xm
FROM gz RIGHT  JOIN js
ON gz.gh=js.gh
ORDER BY xm;

3.完全连接:FULL [OUTER] JOIN

例: 查询教师的工资情况
SELECT gz.*, js.*
FROM gz  FULL JOIN js
ON gz.gh=js.gh;
#完全连接返回两表中的所有行,其中匹配记录仅显示一次;非匹配行的数据不可用的列显示NULL值。
  • 交叉连接 cross join

一个表中的每行与另一个表中的每行连接; 结果集中行的数量是第一个表中行的数量与第二个表中行的数量的乘积。

例:
SELECT titles.*,publishers.*      
FROM titles CROSS JOIN publishers;

下面开始做题。

  • 1
    SQL查询:统计各门课程选修人数,要求输出课程代号,课程名,有成绩人数(grade不为NULL),最高分,最低分,平均分,按课程号排序。
    学生数据库db_student包括三个数据表student(学生表)、course(课程表)和sc(选课表)。表结构如下:
    1、student(学生表):
    SNO学号CHAR(7)
    SNAME姓名CHAR(10)
    SSEX性别CHAR(2)
    SAGE年龄SMALLINT
    SDEPT所在系 VARCHAR(20)
    2、course(课程表)
    CNO课程号CHAR(10)
    CNAME课程名VARCHAR(20)
    CCREDIT学分SMALLINT
    SEMSTER学期SMALLINT
    PERIOD学时SMALLINT
    3、sc(选课表)
    SNO 学号CHAR(7)
    CNO 课程号CHAR(10)
    GRADE 成绩 SMALLINT
SELECT course.cno,cname,COUNT(grade),MAX(grade),Min(grade),ROUND(AVG(grade))
FROM course,sc WHERE course.cno=sc.cno
group by course.cno
ORDER BY course.cno;
  • 2
    查询学生有效成绩信息
    有课程表,学生表,成绩表如下,请完成查询,查询学生成绩单,要求输出有有效成绩的学号,姓名,课程名,成绩,按学号升序课程名降序排列。
    在这里插入图片描述
select student.sno,sname,cname,grade
from student,sc,course
where grade is not null and student.sno=sc.sno and course.cno=sc.cno
order by sno asc,cname desc;
  • 3
    查询选修“高等数学”课程的成绩不为空的学生学号、姓名和成绩。
    有课程表,学生表,成绩表如下,请完成查询。
    表结构如第二题。
select student.sno,sname,grade
from student,sc,course
where (grade is not null) and cname='高等数学'
and student.sno=sc.sno and course.cno=sc.cno
;
  • 4
    输出学生成绩单,要求 输出学号,姓名,平均分,选修门数,按平均分降序排序。
    表结构如第二题。
select student.sno,sname,avg(grade),count(*)
from student,sc
where student.sno=sc.sno
group by student.sno
order by avg(grade) desc;
  • 5
    SQL查询:查询输出平均成绩在2-5名的学生,输出学号、姓名和平均成绩(取整),平均成绩降序。【不用考虑空值】
    表结构如第一题。
SELECT sc.sno,sname,ROUND(AVG(grade))
FROM sc,student,course
WHERE student.sno=sc.sno and course.cno=sc.cno
group by sc.sno
ORDER BY avg(grade)desc
limit 1,4;
  • 6
    查询姓名中含有“海”的学生的选课信息,要求输出学号、姓名、课程名、成绩。
    在这里插入图片描述
select student.sno,sname,course.cname,grade from student,sc,course
where sname like '%海%' and student.sno=sc.sno and course.cno=sc.cno;
  • 7
    SQL查询:查询每个学生高于他自己选修平均分的那门课程的成绩,输出学号,课程号,课程成绩,他所有课程的平均分,并按学号升序排列
    表结构如第一题。
select sc.sno,cno,grade,avggrade
from sc,
(select sno,round(AVG(grade))as avggrade
from sc
group by sno)AS AVG_sc
where sc.sno=AVG_sc.sno and sc.grade>AVG_sc.avggrade
order by sc.sno;
  • 8
    查询学生成绩单,要求输出学号,姓名,平均分,选修门数,按平均分降序排序。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
select student.sno,sname,avg(grade),count(*)
from student,sc
where student.sno=sc.sno 
group by student.sno
order by avg(grade) desc;
  • 9
    查询平均成绩大于70分的学生的学号、姓名、平均成绩,按平均成绩降序排序。
    表结构如第二题。
select student.sno,sname,avg(grade)
from student,sc
where student.sno=sc.sno 
group by sc.sno
having avg(grade)>70
order by avg(grade)desc;
  • 10
    查询每门课的先修课,输出课程号、课程名和先修课程名。
    表结构如第二题。
select a.cno,a.cname,b.cname
from course a,course b
where a.cpno=b.cno;
  • 11
    输出网络工程专业学生的学号,姓名和籍贯,并按学号降序输出。
    #查询输出网络工程专业学生的学号,姓名和籍贯,并按学号降序输出。
    表结构如下:
    1、zy(专业表):
    zydh 专业代号 CHAR(4)
    zymc 专业名称 VARCHAR(20)
    xz 学制 SMALLINT
    2、student(学生表):
    sno 学号 CHAR(9)
    sname 姓名 CHAR(10)
    ssex 性别 CHAR(2)
    sage 年龄 SMALLINT
    jg 籍贯 VARCHAR(50)
    zydh 专业代号 CHAR(4)
select sno,sname,jg
from student,zy
where zy.zydh=student.zydh and zymc='网络工程'
order by sno desc;
  • 12
    查询95级学生(学号前两位)的选课情况,输出学号、姓名、课程号、成绩(包括未选课的学生信息)。
    表结构如第二题。
select s.sno,s.sname,cno,grade 
from student s 
left join sc on (s.sno=sc.sno)
where  s.sno like '95%';
  • 13
    统计各专业的学生人数,要求输出系名,专业名,总人数,按系名排序。
    表结构如下:
    1、student(学生表):
    sno 学号 CHAR(9)
    sname 姓名 CHAR(10)
    ssex 性别 CHAR(2)
    sage 年龄 SMALLINT
    jg 籍贯 VARCHAR(50)
    zydh 专业代号 CHAR(4)
    xdh 系代号 CHAR(2)
    2、zy(专业表)
    zydh 专业代号 CHAR(4)
    zymc 专业名称 VARCHAR(20)
    xz 学制 SMALLINT
    3、xb(系表)
    xdh 系代号 CHAR(2)
    xmc 系名称 VARCHAR(20)
select xmc,zymc,count(*)
from student,zy,xb
where student.zydh=zy.zydh and student.xdh=xb.xdh
group by zy.zydh
order by xmc;
  • 14
    查询计算机系平均成绩高于70分的成绩信息。
    有课程表,学生表,成绩表如下,查询计算机系平均成绩高于70分的学号,姓名、平均成绩,并按平均成绩降序排列。
    表结构如第二题。
select student.sno,sname,avg(grade) 
from student,sc
where sdept='计算机系' and student.sno=sc.sno 
group by student.sno
having avg(grade)>70
order by avg(grade) desc ;
  • 15
    SQL查询:查询选修了课程的学生的学号和姓名,按学号排序。
    表结构如第一题。
select sno,sname 
from student
where sno in( select sc.sno from sc
             group by sc.sno
             having count(*) is not null)
order by sno;
  • 16
    统计各门课程的重修人数(包括grade为NULL),要求输出课程代号,课程名及重修人数。
    表结构如第六题。
select course.cno,cname,count(*) 
from sc,course 
where (grade<60 or grade is null) 
and course.cno=sc.cno
group by cno;
  • 17
    查询选修未通过2门(包括2门)以上的学生的信息,输出学号、姓名、选修未通过门数,按门数降序排序,若门数相同,按学号升序排序。
    表结构如第六题。
SELECT student.sno,sname,COUNT(*)
FROM sc,student
WHERE grade<60 and student.sno=sc.sno
GROUP BY sno
HAVING COUNT(*)>=2
ORDER BY COUNT(*) DESC, sno asc;
  • 18
    查询计算机系平均成绩前三名的学号,姓名、平均成绩.
    表结构如第二题。
select student.sno,sname,avg(grade)
from student,sc,course
where student.sno=sc.sno and course.cno=sc.cno
and sdept='计算机系'
group by student.sno
order by avg(grade) desc limit 3;
  • 19
    查询输出“高等数学”课程成绩前三名(不考虑成绩有重复值的情况)的学生的学号,姓名,课程名,系名,成绩。
    表结构如第六题。
select student.sno,sname,cname,sdept,grade from student,sc,course
where cname='高等数学' and student.sno=sc.sno and course.cno=sc.cno
order by grade desc limit 3;
  • 20
    查询计算机系学生的成绩,输出学号,姓名,课程名,成绩,按学号排序(升序)。
    表结构如第一题。
select student.sno,sname,course.cname,grade from student,sc,course
where sdept='计算机系' and student.sno=sc.sno and course.cno=sc.cno
order by sno;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql练习-数据查询之连接查询 的相关文章

随机推荐

  • 干货分享

    在企业数字化转型的过程中 尤其随着互联网 云计算 大数据等信息技术与通信技术的迅猛发展 海量数据在各种信息系统上被存储和处理 其中包含大量有价值的敏感数据 这意味着数据泄露的风险也不断增加 数据泄露可能由各种因素引起 包括恶意攻击 黑客入侵
  • Android RecycleView列表使用GridLayoutManager 均分子项Item,且左右宽度相同

    1 需求描述 列表分为一列两个 两个子项宽度一致 且左右边距一样 就是要好看 子项宽度适配手机 高度适配宽度 2 问题描述 但是我们直接设置的时候 他的子项会在给他的布局的左边 于是我想到了设置下子项的左右边距 但是android手机屏幕太
  • realtek

    https download csdn net download haoTaoshu 12770808 ops request misc 257B 2522request 255Fid 2522 253A 25221687097687168
  • adb shell 内存参数详解

    摘自https www cnblogs com zl1991 p 6644998 html 感谢原创作者 1 adb shell procrank PID Vss Rss Pss Uss cmdline 32657 2254196K 372
  • NDK 入门HelloJni 以及 javah 找不到类文件的问题 解决(ubuntu)

    1 首先创建一个android工程 创建一个HelloJni java 文件 并编写如下代码 package com ndk import android app Activity import android os Bundle impo
  • 几种经典的卷积神经网络模型

    目录 1 卷积神经网络解决的问题 2 经典的卷积神经网络 2 1 LeNet 2 2 AlexNet 2 3 VGG 2 3 1 VGG块 2 3 2 VGG网络 2 4 NiN 2 4 1 Nin块 2 4 2 Nin网络 2 5 Goo
  • java语句的执行结构

    class R1 static System out println 1 public static void main String args System out println 2 new Child class Parent sta
  • Js保留小数点

  • Pyroch损失函数之BCELoss

    这也是最近在做的一个模型中的损失函数 所有就一探究竟了解一下这个函数 首先它是一个二分类损失函数 可以是单标签的损失函数也可是多标签的损失函数 1 单标签 这个图像是不是猫 1代表是 0代表不是 这就是单标签的二分类问题 2 多标签 和单标
  • python 处理pandas的panel数据

    与pd Series和pd DataFrame类似 pd Panel是pandas的数据容器之一 它是用来处理具有三个维度的数据的 进而pd Panel有3个轴 axis 分别是 items axis 0 每个item对应一个DataFra
  • 在完美数联的面试经历

    在完美数联的面试经历 大三上学期结束的寒假我在boss上投简历 得到完美数联的面试机会 面试之前啥也没准备 就兴冲冲的去了 然后很惨烈 一共三轮面试 前两轮是技术面试 第三轮是HR面试 第一轮是笔试 笔试大概20个人在一间会议室里面 每个人
  • GoLang学习计划

    我准备学习GoLang 是有点现实所迫 因为Java太难找工作了 我在BOSS直聘等网站刷了很久 一直没有满意的公司 哈哈 但是GoLang的岗位是非常多的 全是好企业 于是就下定决心 转战GoLang 努力学习 在学习之前 制订一个学习计
  • 病毒侵袭持续中 【HDU - 3065】【AC自动机】

    题目链接 就是求的是每个病毒出现的次数 可以重叠 嗯 最后别忘了释放内存 不然听说会MLE 但是我比较规矩 不会遇到这种现象的 MLE了一次 就记得要释放内存了 是一道AC自动机的模板题 include
  • CVE-2023-21839远程代码执行漏洞

    一 环境搭建 使用vulhub快速搭建环境 进入weblogic CVE 2023 210839目录下 执行命令 docker compose up d 部署完成后直接访问7001端口即可 http 192 168 5 183 7001 c
  • 教大家如何识别ChatGPT3.5和ChatGPT4.0

    教大家如何识别ChatGPT3 5和ChatGPT4 0 为什么写这篇文章 是因为目前市面上的镜像站很多接入的都是GPT3 5 但是冒充GPT4 0进行高价售卖 很多人说识别很简单 直接提问就行了 但是你不知道的是网站的建设者是可以提前设定
  • 免费的ai绘图工具+初级教程

    ChatGPT云炬学长 关注 由于我们还有很多小伙伴资金匮乏 没有体验到Midjourney 这样的绘图工具 尽管现在AI生成工具已经遍地开花 也几乎是0代码操作 但对于小白来说还是有许多门槛阻碍了我们完美体验AI生成的魅力 那么 今天我给
  • Crest Ocean System

    最新版本支持Unity3D 2019 4 8或以上 https github com crest ocean crest
  • 华为eNSP:OSPF DR和DBR选举实验

    OSPF DR和DBR选举 简介 OSPF协议 拓扑图 实验步骤 现象 理解现象 测试 R1 R2 R3 配置命令 R1上配置命令如下 R2上配置命令如下 R3上配置命令如下 文字介绍 简介 OSPF协议 定位 开放式最短路径优先 Open
  • linux-系统硬件信息查看方法

    系统硬件信息查看方法 CPU 1 利用文件进行查看 cat proc cpuinfo model name Intel R Core TM i5 8400 CPU 2 80GHz CPU品牌型号 physical id 0 表示CPU颗数
  • mysql练习-数据查询之连接查询

    连接查询 若在一个查询请求中 涉及到多个表中的数据 则需要进行连接查询 按连接方式分 内连接 默认连接类型 INNER JOIN 外连接 自连接 交叉连接 内连接 1 等值连接 连接运算符为 例 查询每个学生的基本信息及其选课情况 SELE