SQL基礎入門:從CRUD到JOIN再到索引(通俗易懂版)

一、為什么需要SQL?

想象你在管理一個圖書館:

  • 傳統方法:手動記錄每本書的位置、借閱者、歸還日期
  • SQL方法:用數據庫系統自動管理,快速查詢《Java編程思想》在哪個書架

SQL(Structured Query Language)就是數據庫的"魔法咒語",讓你高效管理數據。

二、CRUD操作:數據庫的四大基本技能

1. 創建表(CREATE)

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,age INT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. 插入數據(INSERT)

INSERT INTO users (name, email, age)
VALUES ('張三', 'zhangsan@example.com', 25);

3. 查詢數據(SELECT)

-- 查詢所有用戶
SELECT * FROM users;-- 查詢年齡大于18歲的用戶
SELECT id, name, age 
FROM users 
WHERE age > 18 
ORDER BY created_at DESC;-- 分頁查詢(第2頁,每頁10條)
SELECT * FROM users LIMIT 10 OFFSET 10;

4. 更新數據(UPDATE)

-- 將ID為1的用戶年齡改為26
UPDATE users 
SET age = 26, email = 'new@example.com' 
WHERE id = 1;

5. 刪除數據(DELETE)

-- 刪除ID為5的用戶
DELETE FROM users WHERE id = 5;

三、JOIN操作:關聯表查詢的魔法

假設我們有兩個表:

-- 用戶表
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50)
);-- 訂單表
CREATE TABLE orders (id INT PRIMARY KEY,user_id INT,amount DECIMAL(10,2),FOREIGN KEY (user_id) REFERENCES users(id)
);

1. 內連接(INNER JOIN)

SELECT u.name, o.amount
FROM users u
INNER JOIN orders o 
ON u.id = o.user_id;

結果:只顯示同時存在于用戶表和訂單表的數據。

2. 左連接(LEFT JOIN)

SELECT u.name, o.amount
FROM users u
LEFT JOIN orders o 
ON u.id = o.user_id;

結果:顯示所有用戶,包括沒有訂單的用戶(訂單金額為NULL)。

3. 右連接(RIGHT JOIN)

SELECT u.name, o.amount
FROM users u
RIGHT JOIN orders o 
ON u.id = o.user_id;

結果:顯示所有訂單,包括未匹配到用戶的訂單(用戶名為NULL)。

4. 全連接(FULL OUTER JOIN)

SELECT u.name, o.amount
FROM users u
FULL OUTER JOIN orders o 
ON u.id = o.user_id;

結果:顯示所有用戶和訂單,無論是否匹配。

四、索引:讓查詢速度起飛的秘籍

1. 為什么需要索引?

  • 未加索引:逐行掃描數據(像在圖書館逐本書找《紅樓夢》)
  • 加索引:快速定位數據(像用圖書館的分類目錄查找)

2. 創建索引

-- 在email字段創建普通索引
CREATE INDEX idx_users_email ON users(email);-- 在name和age字段創建復合索引
CREATE INDEX idx_users_name_age ON users(name, age);

3. 索引適用場景

  • 經常用于查詢條件的字段(如WHERE子句)
  • 外鍵關聯字段
  • 排序字段(ORDER BY)

五、常見問題解答

1. WHERE和HAVING的區別?

  • WHERE:過濾行(在聚合前)
  • HAVING:過濾分組(在聚合后)
SELECT user_id, COUNT(*) AS order_count
FROM orders
WHERE amount > 100  -- 過濾金額>100的訂單
GROUP BY user_id
HAVING order_count > 2;  -- 過濾訂單數>2的用戶

2. 如何防止SQL注入?

  • 使用預編譯語句(PreparedStatement)
  • 避免直接拼接SQL字符串
// Java示例
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE email = ?");
stmt.setString(1, userEmail);

六、推薦學習資源

  1. SQL Zoo 互動教程
  2. W3Schools SQL教程
  3. 《SQL必知必會》
  4. MySQL官方文檔

七、總結

SQL是數據時代的通用語言,掌握CRUD、JOIN和索引將使你:

  • 高效管理數據
  • 快速構建應用
  • 解鎖數據分析能力

現在就打開MySQL客戶端,嘗試用今天學到的知識創建一個用戶表吧!記得每次操作前備份數據,享受SQL的樂趣。🚀

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

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

相關文章

MINIQMT學習課程Day11

現在開始進行策略的交易買賣分析: 還是之前的步驟,打開qmt,選擇獨立交易, 之后使用pycharm,編寫py文件 導入包: import time, datetime, traceback, sys from xtquant import xtdata from xtquant.xttr…

# 實時人臉性別與年齡識別:基于OpenCV與深度學習模型的實現

實時人臉性別與年齡識別:基于OpenCV與深度學習模型的實現 在當今數字化時代,計算機視覺技術正以前所未有的速度改變著我們的生活與工作方式。其中,人臉檢測與分析作為計算機視覺領域的重要分支,已廣泛應用于安防監控、智能交互、…

Python Cookbook-5.14 給字典類型增加排名功能

任務 你需要用字典存儲一些鍵和“分數”的映射關系。你經常需要以自然順序(即以分數的升序)訪問鍵和分數值,并能夠根據那個順序檢查一個鍵的排名。對這個問題,用dict 似乎不太合適。 解決方案 我們可以使用 dict 的子類,根據需要增加或者重…

十四種邏輯器件綜合對比——《器件手冊--邏輯器件》

目錄 邏輯器件 簡述 按功能分類 按工藝分類 按電平分類 特殊功能邏輯器件 應用領域 詳盡闡述 1 邏輯門 一、基本概念 二、主要類型 三、實現方式 四、應用領域 2 反相器 工作原理 基本功能 主要應用 常見類型 特點 未來發展趨勢 3 鎖存器 基本概念 工作原理 主要類型…

如何更改wsl2中的ubuntu默認安裝位置

先前的一篇文章提到了如何更改wsl里面ubuntu的home目錄,wsl裝ubuntu的home目錄在哪,如何更改home?_wsl安裝的ubuntu在哪里-CSDN博客 這次是要更改wsl中ubuntu的安裝目錄,畢竟默認安裝到c盤下會占用不少空間的。 從微軟商店get后…

最近在工作中感受到了設計模式的重要性

之前了解設計模式:只是應付一下面試 在之前一年多的工作中也沒遇到使用場景 最近在搭建驗證環境的時候,才發現這玩意這么重要 首先是設計模式的使用場景一定是在很復雜繁瑣的場景下進行的 之所以說是復雜/繁瑣的場景,因為一些場景也許邏輯不難…

Python深度學習基礎——卷積神經網絡(CNN)(PyTorch)

CNN原理 從DNN到CNN 卷積層與匯聚 深度神經網絡DNN中,相鄰層的所有神經元之間都有連接,這叫全連接;卷積神經網絡 CNN 中,新增了卷積層(Convolution)與匯聚(Pooling)。DNN 的全連接…

Linux 第三講 --- 基礎指令(三)

前言: 在前面我們已經講了有十幾個Linux的基礎指令,今天我們再補充幾個常用的基礎指令,為后面的學習做準備 。 目錄 前言: 一、兩個與時間相關的指令 1.date指令 演示 : 時間戳 設置時間 2、cal指令 演示&#x…

基于SiamFC的紅外目標跟蹤

基于SiamFC的紅外目標跟蹤 1,背景與原理2,SiamFC跟蹤方法概述2.1 核心思想2.2 算法優勢3,基于SiamFC的紅外跟蹤代碼詳解3.1 網絡定義與交叉相關模塊3.2 SiamFC 跟蹤器實現3.3 主程序:利用 OpenCV 實現視頻跟蹤4,總結與展望在紅外監控、無人機防御以及低光照場景中,紅外圖…

Odoo 部署本地 把現時的excel計算表格部署上odoo 教程

要將現有的 Excel 計算表格部署到 Odoo 平臺上,您可以按照以下步驟進行操作: 將 Excel 表格中的數據轉移到 Odoo 模塊中:首先,您需要將 Excel 表格中的數據導出為 CSV 格式,然后可以使用 Odoo 的數據導入功能將這些數據…

KWDB創作者計劃—KWDB認知引擎:數據流動架構與時空感知計算的范式突破

引言:數據智能的第三范式 在數字化轉型進入深水區的2025年,企業數據系統正面臨三重悖論:數據規模指數級增長與實時決策需求之間的矛盾、多模態數據孤島與業務連續性要求之間的沖突、靜態存儲范式與動態場景適配之間的鴻溝。KWDB(K…

C語言 數據結構 【棧】動態模擬實現

引言 動態模擬實現棧的各個接口 一、棧的概念與結構 棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的數據元素遵守后進先出LIFO(LastInFirstOut…

Python itertools模塊的groupby函數介紹

itertools.groupby 是 Python 標準庫 itertools 模塊中的一個函數,它的主要功能是對可迭代對象中相鄰的相同元素進行分組。 itertools.groupby(iterable, keyNone) 函數 作用: 將連續的(相鄰的)相同元素分組,返回 (…

Python實例題:使用Python生成分形圖片

目錄 Python實例題 題目 題目分析 需求理解 關鍵知識點 實現思路分析 代碼實現 代碼解釋 mandelbrot 函數: 設置復平面區域和圖像參數: 計算分形數據: 繪圖展示: 運行思路 Python實例題 題目 使用Python生成分形圖…

系統編程1(進程的概念與原理)

進程的概念與原理 計算機組成部分一般遵循馮諾依曼結構,也就是由控制器、運算器、存儲器、輸入設備、輸出設備五個部分組成。 ? 程序的編譯 一般在編寫出程序之后,并不能直接運行,而是需要把程序通過編譯器進行編譯,生成可執行…

《Vue Router實戰教程》5.嵌套路由

歡迎觀看《Vue Router 實戰(第4版)》視頻課程 嵌套路由 一些應用程序的 UI 由多層嵌套的組件組成。在這種情況下,URL 的片段通常對應于特定的嵌套組件結構,例如: 通過 Vue Router,你可以使用嵌套路由配置…

使用Python解決Logistic方程

引言 在數學和計算機科學中,Logistic 方程是描述人口增長、傳播過程等現象的一種常見模型。它通常用于表示一種有限資源下的增長過程,比如動物種群、疾病傳播等。本文將帶領大家通過 Python 實現 Logistic 方程的求解,幫助你更好地理解這一經典數學模型。 1.什么是 Logist…

《從零搭建Vue3項目實戰》(AI輔助搭建Vue3+ElemntPlus后臺管理項目)零基礎入門系列第十二篇(完結篇):數據統計功能實現

🤟致敬讀者 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺 📘博主相關 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息 文章目錄 《從零搭建Vue3項目實戰》(AI輔助…

研究嵌入式軟件架構時遇到的初始化堆棧溢出問題

文章目錄 2025年4月10日新增分析PC寄存器指針值排查問題map文件設計到的知識點1. **.bss 段(Block Started by Symbol)**2. **.data 段**3. **.text 段**4. **.heap 段**5. **.stack 段**6. **.rodata 段(只讀數據段)**7. **.init…

軟件架構評估兩大法:ATAM 和 SAAM 的對比與實踐

架構權衡分析方法(ATAM)和軟件架構分析方法(SAAM)是軟件架構評估領域中非常重要的兩種方法,以下為你詳細介紹: 一、架構權衡分析方法(ATAM) 1.背景與起源:ATAM 是由卡耐…