實驗7 數據查詢(2)

一、實驗目的

  1. 學習SQL語言的定義、操縱功能
  2. 熟悉通過SQL語言對數據庫進行查詢操作,包括單表查詢、多表查詢、嵌套查詢、集合查詢

二、實驗軟件

	MySQL

三、實驗內容和要求

給定四個關聯表,其定義和數據加載如下:

學生表 Student

create table Student(Sid varchar(6), Sname varchar(10), Sdate datetime, Ssex varchar(10));
insert into Student values('01' , '趙雷' , '1999-01-01' , '男');
insert into Student values('02' , '錢電' , '1999-12-21' , '男');
insert into Student values('03' , '孫風' , '1999-05-20' , '男');
insert into Student values('04' , '李云' , '1999-08-06' , '男');
insert into Student values('05' , '周梅' , '2000-12-01' , '女');
insert into Student values('06' , '吳蘭' , '2001-03-01' , '女');
insert into Student values('07' , '鄭竹' , '1998-07-01' , '女');
insert into Student values('08' , '王菊' , '1999-01-20' , '女');

選課表 SC

create table SC(Sid varchar(10), Cid varchar(10), score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);

課程表 Course

create table Course(Cid varchar(10),Cname varchar(10),Tid varchar(10));
insert into Course values('01' , '語文' , '02');
insert into Course values('02' , '數學' , '01');
insert into Course values('03' , '英語' , '03');

教師表 Teacher

create table Teacher(Tid varchar(10),Tname varchar(10));
insert into Teacher values('01' , '張三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');

四張表之間的關聯很簡單:
在這里插入圖片描述

試按以下操作要求完成SQL語言設計。

  1. 查詢" 01 “課程比” 02 “課程成績高的學生的信息及對應” 01 “和” 02 "課程分數。要求輸出結構如下圖所示:
    在這里插入圖片描述
SELECT s.Sid, s.Sname, s.Sdate,s.Ssex,sc1.score AS score_01, sc2.score AS score_02
FROM Student s
JOIN SC sc1 ON s.Sid = sc1.Sid AND sc1.Cid = '01'
JOIN SC sc2 ON s.Sid = sc2.Sid AND sc2.Cid = '02'
WHERE sc1.score > sc2.score;
  1. 查詢平均成績大于等于 60 分的學生信息,輸出其編號Sid、姓名Sname和平均成績Avg_score三列內容。
SELECT s.Sid, s.Sname, AVG(sc.score) AS Avg_score
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
GROUP BY s.Sid, s.Sname
HAVING AVG(sc.score) >= 60;

3.查詢在 SC 表存在成績的學生信息,輸出Sid、Sname、Sdate和Ssex四列內容。

SELECT s.Sid, s.Sname, s.Sdate, s.Ssex
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid;
  1. 查詢Student表中所有同學的學生編號Sid、學生姓名Sname和對應選課總數、所有課程的總成績(沒成績的顯示為 null )。要求輸出結構如下圖所示:
    在這里插入圖片描述
SELECT s.Sid, s.Sname, COUNT(sc.Cid) AS '選課總數', SUM(sc.score) AS '總成績'
FROM Student s
LEFT JOIN SC sc ON s.Sid = sc.Sid
GROUP BY s.Sid, s.Sname;
  1. 查詢「李」姓老師的數量。
SELECT COUNT(*) FROM Teacher t WHERE t.Tname LIKE '李%';

6.查詢學過「張三」老師授課的學生信息,輸出其Sid、Sname、Sdate和Ssex四列內容。

SELECT s.Sid, s.Sname, s.Sdate, s.Ssex
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
JOIN Course c ON sc.Cid = c.Cid
JOIN Teacher t ON c.Tid = t.Tid
WHERE t.Tname = '張三';

7.查詢選課表SC內沒有選修課程表Course里所列所有課程的學生信息,輸出其Sid、Sname、Sdate和Ssex四列內容。

SELECT S.Sid, S.Sname, S.Sdate, S.Ssex
FROM Student S
WHERE S.Sid NOT IN (SELECT DISTINCT SC.SidFROM SCWHERE SC.Cid NOT IN (SELECT C.CidFROM Course C)
);

8.查詢和" 01 "號學生學習的課程完全相同的其他學生信息,輸出其學號Sid內容。

WITH CourseList_01 AS (SELECT Cid FROM SC WHERE Sid = '01'
)
SELECT DISTINCT s2.Sid
FROM Student s2
JOIN SC sc2 ON s2.Sid = sc2.Sid
WHERE sc2.Cid IN (SELECT Cid FROM CourseList_01)
GROUP BY s2.Sid
HAVING COUNT(DISTINCT sc2.Cid) = (SELECT COUNT(*) FROM CourseList_01)
AND s2.Sid != '01';

9.查詢至少有一門課與學號為" 01 "的同學所學相同的學生信息,輸出其Sid、Sname、Sdate和Ssex四列內容。

SELECT DISTINCT s.Sid, s.Sname, s.Sdate, s.Ssex
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
WHERE EXISTS (SELECT 1 FROM SC sc_refWHERE sc_ref.Sid = '01' AND sc_ref.Cid = sc.Cid
)
AND s.Sid != '01';

10.查詢沒學過"張三"老師講授的任一門課程的學生姓名。

SELECT s.Sname
FROM Student s
WHERE s.Sid NOT IN (SELECT sc.SidFROM SC scJOIN Course c ON sc.Cid = c.CidJOIN Teacher t ON c.Tid = t.TidWHERE t.Tname = '張三'
);

11.檢索" 01 "課程分數小于 60并按分數降序排列的學生信息,輸出其Sid、Sname、Sdate和Ssex四列內容。

SELECT s.Sid, s.Sname, s.Sdate, s.Ssex
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
WHERE sc.Cid = '01' AND sc.score < 60
ORDER BY sc.score DESC;
  1. 按平均成績從高到低顯示學生的課程成績以及平均成績。要求輸出結構如下圖所示:
    在這里插入圖片描述
SELECT s.Sid,MAX(CASE WHEN sc.Cid = '01' THEN sc.score ELSE NULL END) AS score_01,MAX(CASE WHEN sc.Cid = '02' THEN sc.score ELSE NULL END) AS score_02,MAX(CASE WHEN sc.Cid = '03' THEN sc.score ELSE NULL END) AS score_03,AVG(sc.score) AS 'avg(score)'
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
GROUP BY s.Sid
HAVING COUNT(sc.Cid) > 0  
ORDER BY AVG(sc.score) DESC;

13.查詢出只選修兩門課程的學生學號和姓名兩列信息

SELECT s.Sid, s.Sname
FROM Student s
JOIN SC sc ON s.Sid = sc.Sid
GROUP BY s.Sid, s.Sname
HAVING COUNT(DISTINCT sc.Cid) = 2;

14.查詢本月過生日的學生信息,輸出其Sid、Sname、Sdate和Ssex四列內容。

SELECT Sid, Sname, Sdate, Ssex
FROM Student
WHERE MONTH(Sdate) = MONTH(CURRENT_DATE()) AND YEAR(Sdate) = YEAR(CURRENT_DATE());

四、實驗出現的問題及解決方案

  1. 執行時間過長,尤其是涉及到大量數據的查詢。
    —— 盡量避免全表掃描,使用更精確的篩選條件。

  2. 在嘗試進行一些復雜集合查詢時,如查詢選修了某一特定組合課程的學生,發現直接用SQL實現邏輯較為復雜且效率低下。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43671.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cesium中實現圖層組

圖層組 某天領導找我&#xff0c;說業務中可能存在多個影像服務為一個圖層組&#xff0c;并且需要同時加載和同時在圖層列表中上下移動的需求。 例如一些專題地圖&#xff0c;包含所有學校、醫院、公交站等圖層&#xff0c;而這些圖層都是單獨發布的。 在 Cesium 中確實存在…

前端與嵌入式開發通信之QWebChannel(Qt)

前端與嵌入式開發通信之QWebChannel 最近開發中需要用到和c開發的操作臺進行通信的的需求&#xff0c;就找到了這個技術&#xff0c;記錄一下 首先需要安裝導入 qwebchannel npm i qwebchannel import { QWebChannel } from "qwebchannel"; 初始化qwebchannel并封…

myeclipse開發ssm框架項目圖書管理系統 mysql數據庫web計算機畢業設計項目

摘 要 隨著計算機的廣泛應用&#xff0c;其逐步成為現代化的標志。圖書館的信息量也會越來越大&#xff0c;因此需要對圖書信息、借書信息、還書信息等進行管理&#xff0c;及時了解各個環節中信息的變更&#xff0c;要對因此而產生的單據進行及時的處理&#xff0c;為了提高高…

vue3 兩個組件之間傳值

Props 父組件可以通過 props 將數據傳遞給子組件。這是最常見的組件間通信方式 <!-- 父組件 --><template><ChildComponent :message"parentMessage" /></template><script>import ChildComponent from ./ChildComponent.vue;export…

Linux-shell編程入門基礎

文章目錄 前言Shell編程bash特性shell作用域變量環境變量$特殊變量$特殊狀態變量 $特殊符號(很重要)其他內置shell命令shell語法的子串截取統計 指令執行時間練習shell特殊擴展變量父子shell的理解內置和外置命令區別 數值計算雙括號(())運算letexprexpr模式匹配 bcawk中括號 s…

MySQL InnoDB事務隔離的幾種級別

MySQL InnoDB是一種支持事務的存儲引擎&#xff0c;提供了多種事務隔離級別&#xff0c;分別是&#xff1a;讀未提交&#xff08;READ UNCOMMITTED&#xff09;&#xff0c;讀已提交&#xff08;READ COMMITTED&#xff09;&#xff0c;可重復讀&#xff08;REPEATABLE READ&am…

數據結構(Java):Stack相關OJ習題

1、括號匹配問題 . - 力扣&#xff08;LeetCode&#xff09; 1.1 思路分析 根據棧的先進后出原則&#xff0c;我們可以這樣解決問題&#xff1a; 遍歷字符串&#xff0c;遇見左括號就將左括號push入棧&#xff1b;遇見右括號就pop出棧&#xff0c;將出棧的元素和該右括號比較…

最簡單的vue3組件之間傳值

localStorage 是 HTML5 引入的一個 Web Storage API 的一部分&#xff0c;它允許網頁在用戶的瀏覽器上存儲數據。localStorage 提供了一種持久化的本地存儲方案&#xff0c;數據不會因為瀏覽器關閉而丟失&#xff0c;除非用戶或腳本顯式地刪除它們。 localStorage 是一種非常實…

批量提取網頁表格內容至excel文件

問題背景 將網頁的表格內容&#xff08;5237個股票信息&#xff09;復制粘貼到excel文件中 網址&#xff1a;A股上市公司名單-A股上市公司名錄-A股上市公司大全-商業計劃書-可研報告-中商產業研究院數據庫-中商情報網 實現代碼 # 導入包 import pandas as pd import time# 創…

Android中為什么不直接activity調用到view,使用viewrootimpl去與底層溝通,而要追加一個phonewindow來管理呢?

在Android的架構設計中&#xff0c;Activity、PhoneWindow 和 ViewRootImpl 各自扮演著不同的角色&#xff0c;它們之間的協作是為了實現一個更加靈活、可擴展和易于管理的UI系統。不直接從Activity調用到View&#xff0c;而是引入PhoneWindow來管理&#xff0c;主要有以下幾個…

超越傳統:3D生物打印如何利用擴散創造奇跡?

超越傳統&#xff1a;3D生物打印如何利用擴散創造奇跡&#xff1f; 組織工程和再生醫學領域迫切需要能夠模擬人體組織結構和功能的體外模型和組織替代物。然而&#xff0c;傳統的體外模型和組織替代物往往難以滿足高度特異性、復雜性和功能性的要求。3D生物打印技術應運而生&a…

Base64文件流查看下載PDF方法-CSDN

問題描述 數票通等接口返回的PDF類型發票是以Base64文件流的方式返回的&#xff0c;無法直接查看預覽PDF發票&#xff0c; 處理方法 使用第三方在線工具&#xff1a;https://www.jyshare.com/front-end/61/ 在Html代碼框中粘貼如下代碼 <embed type"application/pd…

技術開發分享:商品詳情APP原數據實時接口代碼解析

商品詳情app端原數據實時接口代碼解析主要包括以下幾個步驟&#xff1a; 獲取商品ID&#xff1a;首先需要從淘寶的分享鏈接中提取商品ID&#xff0c;可以通過正則表達式匹配的方式獲取。 構建請求URL&#xff1a;根據商品ID構建請求URL&#xff0c;通常包括淘寶的商品詳情API地…

未來互聯網的新篇章:深度解析Web3技術

隨著技術的不斷演進&#xff0c;Web3正逐漸成為引領未來互聯網發展的關鍵驅動力。本文將深入探討Web3技術的核心概念、關鍵特征以及其對未來互聯網生態的深遠影響&#xff0c;旨在幫助讀者全面理解和把握這一新興技術的發展方向和潛力。 1. Web3的基本概念和演進 Web3并非簡單…

為什么鍵盤上F和J這兩個鍵有兩個凸起的橫線呢?

不知道小伙伴們有沒有注意過&#xff0c;我們常用的電腦鍵盤上&#xff0c;為什么F和J這兩個鍵總是有兩個凸起的橫線的呢&#xff1f; 首先&#xff0c;讓我們來回顧一下這位陪伴我們多年的老朋友——鍵盤。從最初的打字機到現在的機械鍵盤、薄膜鍵盤&#xff0c;鍵盤的形態和…

新書速覽|Vue.js 3.x+Express全棧開發:從0到1打造商城項目

《Vue.js 3.xExpress全棧開發&#xff1a;從0到1打造商城項目》 1 本書內容 《Vue.js 3.xExpress全棧開發 : 從0到1打造商城項目》是一本詳盡的全棧開發教程&#xff0c;旨在通過Vue.js和Express框架引導讀者從零開始構建一個完整的電商項目。內容覆蓋電商項目的基本結構&…

C++——map和set類用法指南

一、前言 1.1 關聯式容器 關聯式容器也是用來存儲數據的&#xff0c;與序列式容器不同的是&#xff0c;其里面存儲的是<key,value>結構的鍵值對&#xff0c;在數據檢索時比序列式容器效率更高。 1.2 鍵值對 用來表示具有一一對應關系的一種結構&#xff0c;該結構中一般…

編程入門題:畫矩形(C語言版)

1.題目描述&#xff1a; 根據輸入的四個參數:a,b,c,f參數&#xff0c;畫出對應的矩形。前兩個參數 a,b為整數&#xff0c;依次代表矩形的高和寬:第三個參數c是一個字符&#xff0c;表示用來填充的矩形符號第四個參數 f為整數&#xff0c;0 代表空心&#xff0c;否則代表實心。具…

Redis如何高效實現定時任務

寫在文章開頭 redis通過單線程結合非阻塞事件輪詢機制實現高效的網絡IO和時間事件處理&#xff0c;這篇文章我們將從源碼的角度深入分析一下redis時間事件的設計與實現。 Hi&#xff0c;我是 sharkChili &#xff0c;是個不斷在硬核技術上作死的 java coder &#xff0c;是 CS…

項目三層架構詳情

三層架構 三層架構就是為了符合“高內聚&#xff0c;低耦合”思想&#xff0c;把各個功能模塊劃分為表示層&#xff08;UI&#xff09;、業務邏輯層&#xff08;BLL&#xff09;和數據訪問層&#xff08;DAL&#xff09;三層架構&#xff0c;各層之間采用接口相互訪問&#xf…