MySQL多表查詢實驗

1.數據準備

-- 以下語句用于創建 students 表,該表存儲學生的基本信息
-- 定義表名為 students
CREATE TABLE students (-- 定義學生的唯一標識符,類型為整數,作為主鍵,且支持自動遞增student_id INT PRIMARY KEY AUTO_INCREMENT,-- 定義學生的姓名,類型為可變長度字符串,最大長度為 50student_name VARCHAR(50),-- 定義學生的年齡,類型為整數age INT
);-- 以下語句用于創建 courses 表,該表存儲課程的相關信息以及選課的學生信息
-- 定義表名為 courses
CREATE TABLE courses (-- 定義課程的唯一標識符,類型為整數,作為主鍵,且支持自動遞增course_id INT PRIMARY KEY AUTO_INCREMENT,-- 定義課程的名稱,類型為可變長度字符串,最大長度為 50course_name VARCHAR(50),-- 定義選課學生的標識符,類型為整數,用于關聯 students 表中的學生student_id INT,-- 定義外鍵約束,將 student_id 字段關聯到 students 表的 student_id 字段FOREIGN KEY (student_id) REFERENCES students(student_id)
);-- 以下語句用于向 students 表中插入學生的基本信息
-- 插入學生的姓名和年齡數據
INSERT INTO students (student_name, age) VALUES
-- 插入名為 Alice,年齡為 20 的學生信息
('Alice', 20),
-- 插入名為 Bob,年齡為 21 的學生信息
('Bob', 21),
-- 插入名為 Charlie,年齡為 22 的學生信息
('Charlie', 22);-- 以下語句用于向 courses 表中插入課程信息以及選課的學生信息
-- 插入課程名稱和選課學生的標識符
INSERT INTO courses (course_name, student_id) VALUES
-- 插入課程名為 Math,選課學生標識符為 1 的信息
('Math', 1),
-- 插入課程名為 Physics,選課學生標識符為 1 的信息
('Physics', 1),
-- 插入課程名為 Chemistry,選課學生標識符為 2 的信息
('Chemistry', 2),
-- 插入課程名為 Biology,選課學生標識符為 3 的信息
('Biology', 3);   

多表查詢
多表查詢用于從多個表中獲取相關的數據。常見的多表查詢類型有內連接(INNER JOIN)、左連接(LEFT JOIN)、右連接(RIGHT JOIN)和全外連接(FULL OUTER JOIN,MySQL 不直接支持,可通過 UNION 模擬)。

1.內連接(INNER JOIN)
內連接返回兩個表中匹配的行。例如,我們要查詢每個學生所選的課程:

SELECT students.student_name, courses.course_name
FROM students
INNER JOIN courses ON students.student_id = courses.student_id;

這個查詢會返回 students 表和 courses 表中 student_id 匹配的行,即每個學生所選的課程信息。

2.左連接(LEFT JOIN)
左連接返回左表中的所有行,以及右表中匹配的行。如果右表中沒有匹配的行,則返回 NULL。例如,我們要查詢所有學生及其所選的課程,如果學生沒有選課,課程信息顯示為 NULL:

SELECT students.student_name, courses.course_name
FROM students
LEFT JOIN courses ON students.student_id = courses.student_id;

3.索引
索引是一種數據結構,用于提高數據庫查詢的速度。在 MySQL 中,常見的索引類型有主鍵索引、唯一索引、普通索引等。

3.1創建索引
以下是創建索引的示例:
1.普通索引
如果你經常根據 students 表的 student_name 字段進行查詢,可以為該字段創建一個普通索引:

CREATE INDEX idx_student_name ON students (student_name);

測試:

mysql> create index cl_na_in on class1(name);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 

2.唯一索引
如果你希望 courses 表的 course_name 字段的值是唯一的,可以為該字段創建一個唯一索引:

CREATE UNIQUE INDEX idx_course_name ON courses (course_name);

3.查看索引
可以使用以下語句查看表的索引信息:

SHOW INDEX FROM students;

4.刪除索引
如果不再需要某個索引,可以使用以下語句刪除它:

DROP INDEX idx_student_name ON students;

5.查詢測試索引

SELECT * FROM stux.class1 WHERE name = 'zhangsan';

6使用 EXPLAIN 分析查詢語句
在你原本的查詢語句前加上 EXPLAIN 關鍵字,例如,你之前想要查詢 name 為 ‘zhangsan’ 的記錄,可執行如下語句:

EXPLAIN SELECT * FROM stux.class1 WHERE name = 'zhangsan';

在這里插入圖片描述

執行該語句后,MySQL 會返回一個結果集,其中包含了查詢執行計劃的相關信息

---------------------------------------------
案例實操測試:

mysql> select * from crs;
+------+---------+-------+
| c_id | c_name  | st_id |
+------+---------+-------+
|    1 | jsj     |     1 |
|    2 | english |     1 |
|    3 | sx      |     2 |
|    4 | ty      |     3 |
+------+---------+-------+
4 rows in set (0.01 sec)mysql> select * from class1;
+----+----------+------+
| id | name     | age  |
+----+----------+------+
|  1 | zhangsan |   20 |
|  2 | wanger   |   21 |
|  3 | xxw      |   25 |
+----+----------+------+
3 rows in set (0.00 sec)mysql> select class1.name,crs.c_name-> from class1-> INNER JOIN crs ON class1.id = crs.st_id;
+----------+---------+
| name     | c_name  |
+----------+---------+
| zhangsan | jsj     |
| zhangsan | english |
| wanger   | sx      |
| xxw      | ty      |
+----------+---------+
4 rows in set (0.00 sec)mysql> select class1.name,crs.c_name from class1 LEFT JOIN
crs ON class1.id = crs.st_id;
+----------+---------+
| name     | c_name  |
+----------+---------+
| zhangsan | jsj     |
| zhangsan | english |
| wanger   | sx      |
| xxw      | ty      |
+----------+---------+
4 rows in set (0.00 sec)mysql> insert into class1(name,age) values('zhaoyun',98);
Query OK, 1 row affected (0.00 sec)mysql> select class1.name,crs.c_name from class1 LEFT JOIN
crs ON class1.id = crs.st_id;
+----------+---------+
| name     | c_name  |
+----------+---------+
| zhangsan | jsj     |
| zhangsan | english |
| wanger   | sx      |
| xxw      | ty      |
| zhaoyun  | NULL    |
+----------+---------+
5 rows in set (0.00 sec)

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

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

相關文章

windows第二十章 單文檔應用程序

文章目錄 單文檔定義新建一個單文檔應用程序單文檔應用程序組成:APP應用程序類框架類(窗口類)視圖類(窗口類,屬于框架的子窗口)文檔類(對數據進行保存讀取操作) 直接用向導創建單文檔…

C++ 初階總復習 (16~30)

C 初階總復習 (16~30) 目的16. 2009. volatile關鍵字的作用17. 2010.什么是多態 簡單介紹下C的多態18. 2011. 什么是虛函數 介紹下C中虛函數的原理19. 2012 構造函數可以是虛函數嘛20. 2013.析構函數一定要是虛函數嘛?21. 2015. 什么是C中的虛…

第一天 Linux驅動程序簡介

目錄 一、驅動的作用 二、裸機驅動 VS linux驅動 1、裸機驅動 2、linux驅動 三、linux驅動位于哪里? 四、應用編程 VS 內核編程 1、共同點 2、不同點 五、linux驅動分類 1、字符設備 2、塊設備 3、網絡設備 六、Linux驅動學習難點與誤區 1、學習難點 …

PaddleX產線集成功能的使用整理

一、環境搭建 1.1 安裝paddle-gpu 需要根據安裝機器的cuda的版本,選擇合適的版本進行安裝 #安裝paddle-gpu 官網鏈接 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/pip/linux-pip.html python -m pip install paddle…

docker-compese 啟動mysql8.0.36與phpmyadmin,并使用web連接數據庫

1、找一個文件夾,比如 E:\zqy\file\mysql,cd到這個目錄下創建文件docker-compose.yml 2、將下面的代碼塊復制到docker-compose.yml文件中 version: 3.3 services:mysql:image: mysql:8.0.36container_name: mysqlrestart: alwaysports:- 3306:3306netw…

解決 Gradle 構建錯誤:Could not get unknown property ‘withoutJclOverSlf4J’

解決 Gradle 構建錯誤:Could not get unknown property ‘withoutJclOverSlf4J’ 在構建 Spring 源碼或其他基于 Gradle 的項目時,可能會遇到如下錯誤: Could not get unknown property withoutJclOverSlf4J for object of type org.gradle…

mcp 接freecad畫齒輪

from mcp.server.fastmcp import FastMCP import freecad.gears.commands import os from freecad import app from freecad import part mcp FastMCP("Demo")mcp.tool() def create_gear(num_teeth20,height10,double_helix True):"""創建一個漸開線…

【大前端系列19】JavaScript核心:Promise異步編程與async/await實踐

JavaScript核心:Promise異步編程與async/await實踐 系列: 「全棧進化:大前端開發完全指南」系列第19篇 核心: 深入理解Promise機制與async/await語法,掌握現代異步編程技術 📌 引言 在JavaScript的世界中,異步編程是無…

如何排查java程序的宕機和oom?如何解決宕機和oom?

排查oom 用jmap生成我們的堆空間的快照Heap Dump(堆轉儲文件),來分析我們的內存占用 用可視化工具,例如java中的jhat分析Heap Dump文件 ,它分析完會通過一個瀏覽器打開一個可視化頁面展示分析結果 根據oom的類型來調…

什么是 OLAP 數據庫?企業如何選擇適合自己的分析工具

引言:為什么企業需要 OLAP 數據庫? 你是否曾經經歷過這樣的場景: 市場部門急需一份用戶行為分析報告,數據團隊告訴你:“數據太大了,報表要跑 4 個小時”;業務負責人在會議中提出一個臨時性分析…

測試:認識Bug

目錄 一、軟件測試的生命周期 二、bug 一、軟件測試的生命周期 軟件測試貫穿于軟件的生命周期。 需求分析: ???度:軟件需求是否合理 技術?度:技術上是否可?,是否還有優化空間 測試?度:是否存在業務邏輯錯誤、…

綜合實驗2

1、sw1和sw2之間互為備份 [sw1]interface Eth-Trunk 0 (創建聚合接口) [sw1-Eth-Trunk0]trunkport g0/0/1 (將物理接口劃入到聚合接口中) [sw1-Eth-Trunk0]trunkport g0/0/2 [sw2]interface Eth-Trunk 0 [sw2-Eth-T…

【ArcGIS】ArcGIS10.6徹底卸載和ArcGIS10.2安裝全過程

卸載python3后,解決了ArcGIS與python3沖突問題后,軟件可以正常打開使用了 但是還是出現了問題 用ArcGIS 進行空間分析時,中間操作沒有任何報錯和問題,但是就是沒有運行結果 在別人的軟件上操作一遍可以出現運行結果 關閉確有這個,但真的不是我給它的運行時間不夠,反反復復試…

Django之旅:第五節--Mysql數據庫操作(一)

Django開發操作數據庫更簡單,內部提供了ORM框架 一、安裝第三方模塊 pip install mysqlclient注:最新的django框架需要使用mysqlclient模塊,之前pymysql模塊與django框架有編碼兼容問題。 二、ORM 1、ORM可以幫助我們做兩件事:…

docker部署mongodb數據庫

1、下載 MongoDB 鏡像 使用Docker部署MongoDB 之前,我們需要從 Docker Hub 上下載 MongoDB 鏡像。這里我們下載最新版本的 MongoDB 鏡像,使用以下命令進行下載: docker pull mongo:latest 下載完成后,我們就擁有了最新版本的 Mon…

Enhanced PEC-YOLO:電力施工場景安全裝備檢測的輕量化算法解析

目錄 一、核心概述 二、核心創新點 1. ?C2F_Faster_EMA模塊 2. ?SPPF_CPCA多尺度模塊 3. ?BiFPN頸部網絡

【人工智能】解鎖大模型潛力:Ollama 與 DeepSeek 的分布式推理與集群部署實踐

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著大語言模型(LLM)的快速發展,其推理能力在自然語言處理、代碼生成等領域展現出巨大潛力。然而,單機部署難以滿足高并發、低延遲的需…

RTMP推流服務器nginx在linux上的編譯部署

RTMP(Real-Time Messaging Protocol)推流確實需要服務器支持?。RTMP推流服務器的主要功能是接收來自推流客戶端的數據流,對其進行處理和轉發。服務器會根據RTMP協議與客戶端建立連接,處理推流數據(如轉碼、錄制等&…

PyQt6實例_批量下載pdf工具_主線程停止線程池

目錄 前置: 代碼: 視頻: 前置: 1 本系列將以 “PyQt6實例_批量下載pdf工具”開頭,放在 【PyQt6實例】 專欄 2 本系列涉及到的PyQt6知識點: 線程池:QThreadPool,QRunnable; 信號與…

Tomcat生產服務器性能優化

試想以下這個情景:你已經開發好了一個程序,這個程序的排版很不錯,而且有著最前沿的功能和其他一些讓你這程序增添不少色彩的元素。可惜的是,程序的性能不怎么地。你也十分清楚,若現在把這款產品退出市場,肯…