MySQL基礎教程:SELECT語句詳解

MySQL基礎教程:SELECT語句詳解

    • 一、SQL概述
      • 1.1 SQL背景知識
      • 1.2 SQL語言排行榜
      • 1.3 SQL分類
    • 二、SQL語言的規則與規范
      • 2.1 基本規則
      • 2.2 大小寫規范
      • 2.3 注釋
      • 2.4 命名規則
      • 2.5 數據導入
    • 三、基本的SELECT語句
      • 3.0 最簡單的SELECT
      • 3.1 SELECT...FROM
      • 3.2 列的別名
      • 3.3 去除重復行
      • 3.4 空值處理
      • 3.5 著重號
      • 3.6 查詢常數
    • 四、顯示表結構
    • 五、過濾數據
    • 六、最佳實踐建議
    • 總結


🌺The Begin🌺點點關注,收藏不迷路🌺

一、SQL概述

1.1 SQL背景知識

SQL(Structured Query Language,結構化查詢語言)是使用關系模型的數據庫應用語言,由IBM在上世紀70年代開發出來。作為一門已經存在45年的語言,SQL展現了驚人的生命力:

  • 1974年:IBM研究員發布《SEQUEL:一門結構化的英語查詢語言》論文
  • 標準化歷程:SQL-86 → SQL-89 → SQL-92 → SQL-99
  • 兩個重要標準:SQL92和SQL99,至今仍被廣泛遵循

SQL之所以經久不衰,是因為它作為數據處理的通用語言,幾乎被所有關系型數據庫系統支持,包括MySQL、Oracle、SQL Server等。

1.2 SQL語言排行榜

在TIOBE編程語言排行榜中,SQL長期保持Top 10的位置,這證明了它在實際開發中的重要性。

1.3 SQL分類

SQL語言按功能主要分為三大類:

  1. DDL(數據定義語言):用于定義數據庫對象

    • 關鍵字:CREATE、DROP、ALTER等
  2. DML(數據操作語言):用于數據操作

    • 關鍵字:INSERT、DELETE、UPDATE、SELECT等
    • 其中SELECT是最基礎且最重要的語句
  3. DCL(數據控制語言):用于權限控制

    • 關鍵字:GRANT、REVOKE等

此外,還有:

  • DQL(數據查詢語言):專指SELECT查詢
  • TCL(事務控制語言):COMMIT、ROLLBACK等

二、SQL語言的規則與規范

2.1 基本規則

  1. 書寫格式:

    • 可以單行或多行書寫
    • 建議子句分行寫并使用縮進
    • 每條命令以;\g\G結束
  2. 關鍵字:

    • 不能縮寫或分行
  3. 標點符號:

    • 括號、引號必須成對出現
    • 使用英文半角輸入
    • 字符串和日期用單引號
    • 列別名建議用雙引號

2.2 大小寫規范

  • Windows:大小寫不敏感
  • Linux:大小寫敏感
  • 推薦規范
    • 數據庫名、表名、字段名等用小寫
    • SQL關鍵字、函數名用大寫

2.3 注釋

MySQL支持三種注釋方式:

# 單行注釋(MySQL特有)
-- 單行注釋(--后必須有空格)
/* 多行注釋 */

2.4 命名規則

  1. 長度限制:

    • 數據庫/表名≤30字符
    • 變量名≤29字符
  2. 合法字符:A-Z、a-z、0-9、_

  3. 禁止事項:

    • 名稱中包含空格
    • 使用保留字(如必須使用,用``包圍)

2.5 數據導入

在命令行中使用source指令導入SQL文件:

mysql> source d:/mysqldb.sql

三、基本的SELECT語句

3.0 最簡單的SELECT

SELECT 1;        -- 返回常數1
SELECT 9/2;      -- 返回計算結果4.5

3.1 SELECT…FROM

基本語法:

SELECT 列名1, 列名2 
FROM 表名;

查詢所有列(不推薦生產環境使用):

SELECT * FROM departments;

查詢特定列:

SELECT department_id, location_id 
FROM departments;

3.2 列的別名

為列指定別名的三種方式:

-- 方式1:使用AS關鍵字
SELECT last_name AS name FROM employees;-- 方式2:省略AS
SELECT last_name name FROM employees;-- 方式3:別名包含空格時用雙引號
SELECT salary*12 "Annual Salary" FROM employees;

3.3 去除重復行

使用DISTINCT關鍵字:

-- 單列去重
SELECT DISTINCT department_id FROM employees;-- 多列組合去重
SELECT DISTINCT department_id, salary FROM employees;

注意

  1. DISTINCT必須放在所有列名前
  2. DISTINCT對后面所有列的組合進行去重

3.4 空值處理

  • 任何與NULL的運算結果都是NULL
  • NULL ≠ 空字符串(NULL占用空間但長度為空)

示例:

SELECT employee_id, salary, commission_pct,12 * salary * (1 + commission_pct) "annual_sal"
FROM employees;
-- 當commission_pct為NULL時,計算結果為NULL

3.5 著重號

當標識符與關鍵字沖突時,使用``包圍:

-- 錯誤寫法
SELECT * FROM ORDER;-- 正確寫法
SELECT * FROM `order`;

3.6 查詢常數

可以在結果集中添加常數列:

SELECT '部門' AS corporation, last_name 
FROM employees;

四、顯示表結構

使用DESCRIBEDESC命令:

DESCRIBE employees;
-- 或
DESC employees;

輸出結果包含:

  • Field:字段名
  • Type:字段類型
  • Null:是否允許NULL
  • Key:索引類型(PRI/UNI/MUL)
  • Default:默認值
  • Extra:附加信息(如AUTO_INCREMENT)

五、過濾數據

使用WHERE子句進行條件過濾:

SELECT 字段1, 字段2
FROM 表名
WHERE 條件;

示例:

SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90;

六、最佳實踐建議

  1. 避免使用SELECT *:只查詢需要的列
  2. 一致的命名規范:團隊統一大小寫規則
  3. 處理NULL值:使用IFNULL或COALESCE函數
  4. 注釋:復雜SQL添加必要注釋
  5. 格式化:保持SQL語句良好的可讀性

總結

SELECT語句作為SQL中最基礎也最重要的語句,掌握其各種用法是數據庫操作的基石。從簡單的數據查詢到條件過濾,SELECT語句提供了豐富靈活的數據檢索能力。理解并遵循SQL的書寫規范和最佳實踐,能夠幫助我們編寫出高效、可維護的數據庫查詢語句。

在這里插入圖片描述


🌺The End🌺點點關注,收藏不迷路🌺

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

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

相關文章

云原生環境下的安全控制框架設計

在這個容器滿天飛、微服務遍地跑的時代,安全問題就像打地鼠游戲一樣,剛按下一個又冒出三個。今天我們來聊聊如何在云原生環境中構建一套靠譜的安全控制框架。 📖 文章目錄 引言:云原生時代的安全新挑戰云原生安全面臨的核心挑戰安…

Python關于numpy的基礎知識

一.首先先安裝numpy windowsr 輸入cmd 然后像我這樣輸入進去,加一句后面的https:.....可以放其他他的鏡像地址比如 清華大學鏡像源:Simple Index阿里云鏡像源:Simple Index中國科學技術大學鏡像源:Verifying - USTC …

生成式人工智能實戰 | 自回歸模型詳解與實現

生成式人工智能實戰 | 自回歸模型詳解與實現 0. 前言 1. 文本生成模型分析 2. 數據處理 2.1 數據預處理 2.2 創建訓練數據批次 3. 模型構建與訓練 3.1 構建 LSTM 模型 3.2 訓練 LSTM 模型 4. 生成文本 4.1 通過預測下一個 token 生成文本 4.2 控制文本生成的創意性 0. 前言 本…

路由器SDH POS接口

SDH POS 可看作“用 SDH 光纖專線給路由器當超級寬帶網線”。 1?? 拆名字 SDH?同步數字體系(Synchronous Digital Hierarchy),運營商的骨干光傳輸標準,顆粒 STM-1/4/16/64…(155 M/622 M/2.5 G/10 G)。P…

響應式單位rpx及搭配使用UI產品工具

🎨? 歡迎來到RPX與即時設計的前端探索之旅 🚀💻 親愛的開發者朋友們: 👋 大家好!很高興能在CSDN這個技術分享的平臺上與各位相遇!🌟 作為一名長期奮戰在前端開發一線的工程師&#…

MC0463四大名著-水滸簽到

碼蹄集OJ-四大名著-水滸簽到 一、題目背景 本問題以《水滸傳》為故事經緯,講述史進對數列數字奧秘的探索。小碼妹向其講解特殊數列求和規則,我們需依據規則,對給定長度 n 的數列,按奇偶分組方式計算奇數組和與偶數組和的運算結果…

前綴和 HASH

前綴和 & HASH 個人模板 560. 和為 K 的子數組 class Solution {public int subarraySum(int[] nums, int k) {// 滑動窗口前綴和int n nums.length;int[] prevSum new int[n 1];for (int i 1; i < n 1; i) {prevSum[i] prevSum[i - 1] nums[i - 1];}int ans …

周末總結(2024/07/19)

工作 人際關系核心實踐&#xff1a; 要學會隨時回應別人的善意&#xff0c;執行時間控制在5分鐘以內 遇到接不住的話題時拉低自己&#xff0c;抬高別人(無陰陽氣息) 朋友圈點贊控制在5min以內&#xff0c;職場社交不要放在5min以外 職場的人際關系在面對利益沖突是直接質疑&am…

若依框架開啟注冊功能全流程指南

在若依&#xff08;RuoYi&#xff09;框架中&#xff0c;用戶注冊功能并非默認開啟&#xff0c;需要通過后端配置、前端調整以及必要的角色分配設置來實現。本文將詳細介紹開啟注冊功能的完整步驟&#xff0c;幫助開發者快速完成配置。一、后端配置&#xff1a;開啟注冊功能開關…

STM32單片機_3

第十章IIC通信協議規定, 起始之后主機必須先發送一個字節: 從機地址讀寫位, 進行尋址然后接收一下應答位, 然后再發送一個字節, 寫入從機寄存器地址 之后就可以進行數據的收發了注意: 在 主機的接收應答的時候, 立刻釋放SDA 然后這時候從機會立刻做出反應, 即拉低SDA, 也就是置…

SpringAI_Chat模型_DeepSeek模型--基礎對話

一、前言 Spring AI 提供跨 AI 供應商&#xff08;如 OpenAI、Hugging Face 等&#xff09;的一致性 API, 通過分裝的ChatModel或ChatClient即可輕松調動LLM進行流式或非流式對話。 本專欄主要圍繞著通過OpenAI方式調用各種大語言模型展開學習&#xff08;因為95%以上模型都…

數據結構:字符串(Strings)

目錄 第一性問題&#xff1a;計算機如何表示文字&#xff1f; ASCII&#xff1a;最早的字符編碼標準&#xff08;美國人寫的&#xff09; Unicode&#xff1a;解決全球語言的編碼方案 字符&#xff08;Character&#xff09; ?編輯 為什么字符常量必須加上單引號 &#…

【vue-5】Vue 3 中的 v-model:雙向數據綁定的全面指南

在 Vue 開發中&#xff0c;v-model 是實現表單輸入和應用狀態之間雙向綁定的關鍵指令。Vue 3 對 v-model 進行了重大改進&#xff0c;使其更加靈活和強大。本文將深入探討 Vue 3 中 v-model 的工作原理、新特性以及最佳實踐。 1. v-model 基礎 1.1 什么是 v-model v-model 是 V…

結合自身,制定一套明確的 Web3 學習路線和技術棧建議

目錄 ? 一、結合自身&#xff0c;明確方向和目的 ? 二、技術路線和建議 &#x1f9ed; 技術路線圖&#xff08;按階段劃分&#xff09; 第一階段&#xff1a;鞏固 Web3 基礎&#xff08;1-2 周&#xff09; 第二階段&#xff1a;NFT 平臺開發實戰&#xff08;4-6 周&…

SPARKLE:深度剖析強化學習如何提升語言模型推理能力

摘要&#xff1a;強化學習&#xff08;Reinforcement Learning&#xff0c;RL&#xff09;已經成為賦予語言模型高級推理能力的主導范式。盡管基于 RL 的訓練方法&#xff08;例如 GRPO&#xff09;已經展示了顯著的經驗性收益&#xff0c;但對其優勢的細致理解仍然不足。為了填…

【Linux服務器】-MySQL數據庫參數調優

一、基礎配置 [mysqld] # 聲明以下配置屬于MySQL服務器&#xff08;mysqld&#xff09;[mysqld]&#xff1a;配置文件的模塊標識&#xff0c;表示這是 MySQL 服務器的配置段。 二、路徑與基礎設置 datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock pid-file/var/run/mys…

sqli-labs靶場通關筆記:第32-33關 寬字節注入

第32關 寬字節注入查看一下本關的源代碼&#xff1a;function check_addslashes($string) // 定義一個用于過濾特殊字符的函數&#xff0c;目的是轉義可能用于注入的特殊符號 {$string preg_replace(/. preg_quote(\\) ./, "\\\\\\", $string); // 轉義…

基于Eureka和restTemple的負載均衡

在微服務架構中&#xff0c;基于 Eureka&#xff08;服務注冊中心&#xff09;和 RestTemplate&#xff08;HTTP 客戶端&#xff09;實現負載均衡是常見的方案&#xff0c;核心是通過 Eureka 獲取服務實例列表&#xff0c;再結合負載均衡策略選擇具體服務實例進行調用。以下是詳…

子線程不能直接 new Handler(),而主線程可以

在 Android 中&#xff0c;子線程不能直接 new Handler()&#xff0c;而主線程可以&#xff0c;原因在于 Looper 機制。下面詳細解釋&#xff1a;1. 為什么主線程可以直接 new Handler()&#xff1f; 主線程&#xff08;UI 線程&#xff09;在啟動時&#xff0c;系統會自動調用…

Android無需授權直接訪問Android/data目錄漏洞

從android11開始&#xff0c;訪問/sdcard/Android/data目錄需要URI授權&#xff0c;而從更高的版本開始甚至URI權限也被收回&#xff0c;返回“無法使用此文件夾”的提示&#xff0c;這里提供一種方法&#xff0c;可以越權強制訪問data目錄&#xff0c;當然也包括obb、media等目…