SQL tutorials

SQL Literature

SQL運行在資料庫管理系統(Database Management System),如MySQL,Postgre SQL,Microsoft SQL Server, Oracle,etc。

SQL練習平臺:https://sqliteviz.com/

EXAMPLE

SQL 語法

Basis

SELECT * FROM “students”;
  1. SELECT: 選取
  2. *: 全部
  3. FROM “students” : 從 students表格查詢,表格名稱需要用""來做標注。

限制columns屬性

如果不需要全部的columns,只需要部分,那么可以單獨說明需要哪些columns,如:

SELECT 姓名,班級,成績 FROM “students”;

限制rows屬性

  1. 限制rows的數目,如只需要看5行,i.e. 前1-5行
SELECT 姓名,班級,成績 FROM “students” LIMIT 5;

若看完這前5行,想繼續往后看之后的5行,i.e. 前6-10行

SELECT 姓名,班級,成績 FROM “students” LIMIT 5 OFFSET 5;

OFFSET x像是將前x行屏蔽,再進行LIMIT y操作
因此,若是要看第11-15,OFFSET 10, LIMIT 5

SELECT 姓名,班級,成績 FROM “students” LIMIT 5 OFFSET 10;

WHERE

文字比對

WHERE 是用來設定查詢時的篩選條件
例如,在顯示成績時,只顯示1年2班:

SELECT 姓名,班級,成績 FROM “students”;
WHERE 班級 = '1年2班'

或者,在顯示成績時,就不顯示1年2班,(不等于<>)

SELECT 姓名,班級,成績 FROM “students”;
WHERE 班級 <> '1年2班'

ORDER BY

現在若是想要將同班的同學放在一起,可以使用ORDER BY,ORDER BY會針對一個column或多個columns進行排序。
單個column排序,e.g.

SELECT 姓名,班級,成績 FROM “students”;
WHERE 班級 <> '1年2班'
ORDER BY 班級

這樣就可以使得將同班同學放在一起,以排序

多個columns排序,e.g.

SELECT 姓名,班級,成績 FROM “students”;
WHERE 班級 <> '1年2班'
ORDER BY 班級, 成績;

這樣就可以先按班級排序,再在班級內部按照成績正序排序。

若是要按照成績逆序排序,需要在成績后添加DESC

SELECT 姓名,班級,成績 FROM “students”;
WHERE 班級 <> '1年2班'
ORDER BY 班級, 成績DESC

單個人

現在只想查看某一個學生的信息:

SELECT 姓名,班級,成績 FROM “students”;
WHERE 姓名 = '張小婷'

但如若忘記該學生姓名,只記得部分,可以使用如下查詢:
1.

SELECT 姓名,班級,成績 FROM “students”;
WHERE 姓名 LIKE '張%'

其中的“%”表示萬用字元,表示單個或多個字元。如此系統會將所有張姓同學列出。 一定記得要將=改為LIKE!!!

SELECT 姓名,班級,成績 FROM “students”;
WHERE 姓名 LIKE '張_'

其中的“_”表示1個字元。如此系統會將所有張姓且名字只包含兩個字的同學列出。

數字大小判斷

SELECT 姓名,班級,成績 FROM “students”;
WHERE 成績 >= 80 AND 成績< 90;

或者

SELECT 姓名,班級,成績 FROM “students”;
WHERE 成績 BETWEEN 80 AND 90;

AND 還可以更復雜的使用,如

SELECT 姓名,班級,成績 FROM “students”;
WHERE 成績 BETWEEN 80 AND 90 AND (班級 = '1年1班' OR 班級 = '1年2班');

也可以使用 IN來簡化

SELECT 姓名,班級,成績 FROM “students”;
WHERE 成績 BETWEEN 80 AND 90 AND (班級 in ('1年1班' OR '1年2班'));

利用函數對多筆資料進行匯總和計算

常見函數

  1. AVG 求平均值
  2. SUM 求和
  3. MAX 求最大值
  4. MIN 求最小值
  5. COUNT 計算數量

AVG

直接將Average函數套用在成績column,查出所有同學的平均分數

SELECT AVG(成績) FROM “students”;

PS.

  1. 可利用上述函數得到的值命名為新的值
SELECT AVG(成績) AS 成績平均, MAX(成績) AS 最高分
FROM “students”;
  1. 對于所求值四舍五入
SELECT ROUND(AVG(成績))
FROM “students”;

ROUND(AVG(成績)) 四舍五入保留整數位
ROUND(AVG(成績), 1) 四舍五入并保留小數1位

  1. 想分類的并不是全班同學的平均,而是各班的平均
SELECT ROUND(AVG(成績))
FROM “students”;
GROUP BY 班級;
ORDER BY 成績平均 DESC; //引入排序

注意,如果使用了GROUP BY分組后的資料,要使用WHERE篩選,需要改為HAVING

SELECT ROUND(AVG(成績)) AS 平均分
FROM “students”;
GROUP BY 班級;
HAVING 平均分 >= 80;
ORDER BY 成績平均 DESC; //引入排序

關鍵字還需要以一定順序進行書寫:
在這里插入圖片描述

COUNT

  1. 計算整個表格的總行數
SELECT COUNT(*) 
FROM “students”;
  1. 計算表格中某個column的行數
SELECT COUNT(社團) 
FROM “students”;

數字不同是因為,COUNT在針對單一column進行計數時,會自動忽略null。

  1. COUNT 與DISTINCT 進行配合
    DISTINCT用于排除表格中重復的資料
SELECT COUNT(DISTINCT(社團)) 
FROM “students”;

此時,代碼表示學校共有四種不同的社團。

SELECT DISTINCT(社團)
FROM “students”;

這樣就能顯示出不同社團的名字

UNION 聯集

可以將兩個搜索結果合并在一起。
先分別將連個部分結果選出,再在中間加入“UNIOIN”

SELECT `name` FROM `clubs`;
UNION
SELECT `name` FROM `student`;

還可以合并多個,使用多個UNIOIN。注意:使用UNIOIN,所涉及屬性類別以及數目需要完全一致。

用SQL如何建立表格

首先創建資料庫

創建和刪除資料庫

CREATE DATABASE sql_tutorial;
SHOW DATABASES; // show所有的資料庫
DROP DATABASE sql_tutorial;

表格的創立

在某個資料庫中,創建表格,可以用SQL來補齊表格的相關信息

USE sql_tutorial;
CREATE TABLE clubs(
社團編號 INT PRIMARY KEY,
社團名稱 VARCHAR(15),
);

對于PRIMARY KEY有兩種寫法:

USE sql_tutorial;
CREATE TABLE clubs(
社團編號 INT,
社團名稱 VARCHAR(15),
PRIMARY KEY (社團編號)
);

6種常見的屬性(資料形態):

  1. INT: 整數
  2. DECIMAL(m,n): 表示浮點數,m表示一共有幾個數字,n表示其中小數占幾位。e.g. 2.33: DECIAML(3,2)
  3. VARCHAR(n): 字串,其中n表示最多能存放幾個字元
  4. BLOB: Binary large object,用于存放圖片,影像,檔案等…
  5. DATE: 存放日期 ‘YYYY-MM-DD’
  6. TIMESTAMP: 記錄具體時間精確到秒,格式’YYYY-MM-DD HH:MM:SS’

屬性的限制:

CREATE TABLE clubs(	社團編號 INT PRIMARY KEY,社團名稱 VARCHAR(10) NOT NULL
);
CREATE TABLE clubs(	社團編號 INT PRIMARY KEY,社團名稱 VARCHAR(10) UNIQUE
);

對于屬性的預設值:

CREATE TABLE clubs(	社團編號 INT PRIMARY KEY,社團名稱 VARCHAR(10) DEFAULT `aaa`
);

如果要求編號遞增,不想手寫:

CREATE TABLE clubs(	社團編號 INT PRIMARY KEY AUTO_INCREMENT,社團名稱 VARCHAR(10) DEFAULT `aaa`
);

創建表格流程:
1.創建CREATE 表格TABLE
2.在其中補充需要的column:如社團編號,社團名稱
7. 并需要指定column儲存的資料是什么類型,在這里INT表示整數,VARCHAR表示字符串,對于VARCHAR需要指出字數上限
8. 表格內需要指定一個column為 PRIMARY KEY(就像是身份證號,不可以重復!!也不可以是NULL)用于識別每一筆的資料,如這里指定社團編號為PRIMARY KEY。 可以設定多個PRIMARY KEY,例如不同銷售人員對不同客戶對應的銷售額。
9. FOREIGN KEY (外鍵) 對應到另一張表格的PRIMARY KEY。

P.S. 如何刪除表格,使用DROP

DROP TABLE clubs2;

創建完畢后檢查表格

DESCRIBE clubs;

增刪屬性

增加一個屬性

ALTER TABLE `student` ADD gpa DECIMAL(3,2);

增加FOREIGN KEY屬性

ALTER TABLE `student` ADD FOREIGN KEY(`社團編號`) REFERENCES `branch`(`社團編號`) ON DELETE SET NULL;
ALTER TABLE `student` ADD FOREIGN KEY(`社團編號`) REFERENCES `branch` (`社團編號`) ON DELETE CASCADE;

刪除屬性

ALTER TABLE `student` DROP column gpa;

表格中資料存儲

使用 INSERT INTO 表格名(需要插入資料的column標題)

INSERT INTO clubs (社團編號,社團名稱)

現在開始輸入資料,使用VALUE (),注意括號內的順序必須要和表格的所有屬性相互對應,對于字符串要用單或雙引號。這里是按照創建表格時的屬性順序存儲。

INSERT INTO clubs
VALUES (101, 'Guitar Club'), (102, 'Piano Clube');

也可以按照自定義屬性順序存儲:

INSERT INTO clubs (社團名稱,社團編號) VALUES ('Guitar Club', 101), ('Piano Clube', 102);

更新表格中的資料 UPDATE

注意,在更新表格時,要用WHERE說明更新哪一筆記錄,若未設定會導致所有社團名稱都UPDATE。

UPDATE clubs;
SET 社團名稱 = 'Dance Club'
WHERE 社團編號 = 101;

同樣,對于刪除表格中某一筆記錄

DELETE
FROM clubs;
WHERE 社團編號 = 101

SQL跨表格查詢

SELECT students.姓名, students.社團, clubs.社團名稱
FROM students //先引入1個表格
LEFT JOIN clubs //加入另一個表格
On students.社團 = clubs.社團編號
WHERE 班級 = '1年1班'

表格之間如何連接,此處是用students的社團連接上clubs的社團編號
在這里插入圖片描述

  1. INNER JOIN
    只返回兩個表中匹配的記錄
  2. LEFT JOIN
    以左表為中心,返回左表的所有數據,即使右表中沒有匹配;右表沒有匹配時用 NULL 填充。
  3. RIGHT JOIN
    以右表為中心,返回右表的所有數據,即使左表中沒有匹配。
  4. FULL JOIN
    返回兩個表的所有記錄,不匹配的部分用 NULL 填充。

Subquery

子查詢 subquery 在一個查詢語句中篩入另一個查詢。
注意::一定要搞清楚 子查詢返回的是什么內容!!

SELECT `name` FROM `employee`
WHERE `emp_id` = (SELECT `manager_id` FROM `branch`WHERE `branch_name` = '研發'
);
SELECT * FROM `works_with`;SELECT `name` FROM `employee`
WHERE `emp_id` IN (SELECT `emp_id` FROM `works_with`WHERE `total_sales` > 50000
);

ON DELETE

  1. ON DELETE SET NULL一旦對應的內容刪掉,就設置為NULL
  2. ON DELETE CASCADE一旦對應的內容刪掉,就刪掉整筆資料

注意:有些刪掉后對應的內容若是PRIMARY KEY則不可以用ON DELETE SET NULL

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

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

相關文章

MySQL快速恢復數據的N種方案完全教程

目錄 1. 理解MySQL數據恢復的核心邏輯 1.1 數據丟失的常見場景 1.2 MySQL的“救命稻草”:關鍵文件和機制 2. 方案一:利用全量備份+binlog實現點對點恢復 2.1 準備工作 2.2 恢復步驟 2.3 實戰案例 3. 方案二:利用InnoDB的崩潰恢復機制 3.1 崩潰恢復的原理 3.2 恢復步…

雙屏加固筆記本電腦C156-2:堅固與高效的完美融合

在當今數字化時代&#xff0c;筆記本電腦已成為人們工作和生活中不可或缺的工具。然而&#xff0c;對于一些特殊行業和惡劣環境下的應用場景&#xff0c;普通筆記本電腦往往難以滿足需求。此時&#xff0c;具備堅固耐用、高性能等特點的加固筆記本電腦應運而生。魯成偉業的雙屏…

Jenkins 環境部署

下載相關軟件&#xff1a;Jenkins 的安裝和設置 相關工具&#xff1a; Git : Git - Downloads java 17: Java Archive Downloads - Java SE 17.0.12 and earlier python : Download Python | Python.org jenkins、jenkins.war : Jenkins 的安裝和設置 將所有軟件安裝后&am…

如何高效解決 Java 內存泄漏問題方法論

目錄 一、系統化的診斷與優化方法論 二、獲取內存快照:內存泄漏的第一步 (一)自動生成 Heap Dump (二)手動生成 Heap Dump 三、導入分析工具:MAT 和 JProfiler (一)MAT (Memory Analyzer Tool) (二)JProfiler (三)自身企業工具 四、深入分析:逐步排查內存…

HarmonyOS Camera Kit 全解析:從基礎拍攝到跨設備協同的實戰指南

在移動應用開發中&#xff0c;相機功能往往是提升用戶體驗的關鍵模塊&#xff0c;但傳統相機開發面臨權限管理復雜、設備兼容性差、功能實現繁瑣等痛點。HarmonyOS 作為面向全場景的分布式操作系統&#xff0c;其 Camera Kit&#xff08;相機服務&#xff09;通過統一的 API 接…

運用詞向量模型分辨評論

代碼實現&#xff1a;import jieba import pandas as pd hp pd.read_table(優質評價.txt,encodinggbk) cp pd.read_table(差評1.txt,encodinggbk) cp_segments [] contents cp.content.values.tolist() for content in contents:results jieba.lcut(content)if len(result…

基于Apache Flink的實時數據處理架構設計與高可用性實戰經驗分享

基于Apache Flink的實時數據處理架構設計與高可用性實戰經驗分享 一、業務場景描述 在現代電商平臺中&#xff0c;實時用戶行為數據&#xff08;點擊、瀏覽、購物車操作等&#xff09;對業務決策、個性化推薦和風控都至關重要。我們需要搭建一個高吞吐、低延遲且具備高可用性的…

第二十四天:虛函數與純虛函數

虛函數&#xff08;Virtual Function&#xff09; 定義&#xff1a;在基類中使用 virtual 關鍵字聲明的成員函數&#xff0c;允許在派生類中被重新定義&#xff08;覆蓋&#xff0c;override&#xff09;。其目的是實現多態性&#xff0c;即通過基類指針或引用調用函數時&#…

uniapp微信小程序-登錄頁面驗證碼的實現(springboot+vue前后端分離)EasyCaptcha驗證碼 超詳細

一、項目技術棧登錄頁面暫時涉及到的技術棧如下:前端 Vue2 Element UI Axios&#xff0c;后端 Spring Boot 2 MyBatis MySQL Redis EasyCaptcha JWT Maven后端使用IntelliJ IDEA 2024.3.5 前端使用 HBuilder X 和 微信開發者工具二、實現功能及效果圖過期管理驗證碼有…

【Java】HashMap的詳細介紹

目錄 一.HashMap 1.基本概念 2.底層數據結構&#xff1a; 3.HashCode和equals方法 為什么重寫HashCode方法&#xff1f; 為什么重新equals方法&#xff1f; 4.put操作 1.初始化和數組檢查 2.計算索引并檢查桶是否為空 3.桶不為null&#xff0c;處理哈希沖突 4.判斷鏈…

nifi 增量處理組件

在Apache NiFi中&#xff0c;QueryDatabaseTable 是一個常用的處理器&#xff0c;主要用于從關系型數據庫表中增量查詢數據&#xff0c;特別適合需要定期抽取新增或更新數據的場景&#xff08;如數據同步、ETL流程&#xff09;。它的核心功能是通過跟蹤指定列的最大值&#xff…

【數據可視化-90】2023 年城鎮居民人均收入可視化分析:Python + pyecharts打造炫酷暗黑主題大屏

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

Multiverse模型:突破多任務處理和硬件效率瓶頸的AI創新(上)

隨著人工智能技術的快速發展&#xff0c;多模態模型成為了當前研究的熱點。多模態模型的核心思想是能夠同時處理和理解來自不同模態&#xff08;如文本、圖像、音頻等&#xff09;的數據&#xff0c;從而為模型提供更加全面的語境理解和更強的泛化能力。 楊新宇&#xff0c;卡…

OpenCV 高斯模糊降噪

# 高斯模糊處理(降噪) # 參數1: 原始圖像 # 參數2: 高斯核尺寸(寬,高&#xff0c;必須為正奇數) # 其他模糊方法: # - cv.blur(): 均值模糊 # - cv.medianBlur(): 中值模糊 # - cv.bilateralFilter(): 雙邊濾波 blur cv.GaussianBlur(img, (7,7), cv…

常見通信協議詳解:TCP、UDP、HTTP/HTTPS、WebSocket 與 RPC

在現代網絡通信中&#xff0c;各種協議扮演著至關重要的角色&#xff0c;它們決定了數據如何在網絡中傳輸、控制其可靠性、實時性與適用場景。對于開發者而言&#xff0c;理解這些常見的通信協議&#xff0c;不僅有助于更好地設計系統架構&#xff0c;還能在面對不同業務需求時…

深入解析MPLS網絡中的路由器角色

一、 MPLS概述&#xff1a;標簽交換的藝術 在深入角色之前&#xff0c;我們首先要理解MPLS的核心思想。傳統IP路由是逐跳進行的&#xff0c;每一臺路由器都需要對數據包的目的IP地址進行復雜的路由表查找&#xff08;最長匹配原則&#xff09;&#xff0c;這在網絡核心層會造成…

AI的拜師學藝,模型蒸餾技術

AI的拜師學藝&#xff0c;模型蒸餾技術什么是模型蒸餾&#xff0c;模型蒸餾是一種高效的模型壓縮與知識轉移方法&#xff0c;通過將大型教師模型的知識精煉至小型學生模型&#xff0c;讓學生模型模仿教師模型的行為和內化其知識&#xff0c;在保持模型性能的同時降低資源消耗。…

Python爬蟲從入門到精通(理論與實踐)

目錄 1. 爬蟲的魅力:從好奇心到數據寶藏 1.1 爬蟲的基本流程 1.2 準備你的工具箱 2. 第一個爬蟲:抓取網頁標題和鏈接 2.1 代碼實戰:用requests和BeautifulSoup 2.2 代碼解析 2.3 遇到問題怎么辦? 3. 進階爬取:結構化數據抓取 3.1 分析網頁結構 3.2 代碼實戰:抓取…

【DDIA】第三部分:衍生數據

1. 章節介紹 本章節是《設計數據密集型應用》的第三部分&#xff0c;聚焦于多數據系統集成問題。前兩部分探討了分布式數據庫的基礎內容&#xff0c;但假設應用僅用一種數據庫&#xff0c;而現實中大型應用常需組合多種數據組件。本部分旨在研究不同數據系統集成時的問題&#…

Spring配置線程池開啟異步任務

一、單純使用Async注解。1、Async注解在使用時&#xff0c;如果不指定線程池的名稱&#xff0c;則使用Spring默認的線程池&#xff0c;Spring默認的線程池為SimpleAsyncTaskExecutor。2、方法上一旦標記了這個Async注解&#xff0c;當其它線程調用這個方法時&#xff0c;就會開…