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等目…