SQL快速入门【转自牛客网】

news2025/12/14 21:58:54

来源:牛客网

1、SQL 基础查询

在 SQL 中,SELECT 语句是最基本的查询语句,用于从数据库表中检索数据。通过 SELECT 语句,可以选择表中的所有列或特定列,并根据需要进行过滤和排序。

基本语法

SELECT 语句的基本语法如下:

SELECT column1, column2, ...
FROM table_name;

其中:

  • column1, column2, ...:指定要查询的列名,可以是表中的具体列名或表达式。
  • table_name:指定要查询的表名。
查询所有列

使用 * 通配符查询表中的所有列:

SELECT * FROM table_name;

此语句会返回 table_name 表中的所有列和所有行。

查询特定列

明确指定列名查询表中的特定列:

SELECT first_name, last_name, salary
FROM table_name;

此语句会返回 table_name 表中的 first_namelast_namesalary 列的所有行。

使用别名

为列或表指定别名,使查询结果更易读:

SELECT first_name AS name, last_name AS surname, salary
FROM table_name AS tn;

此语句会将 first_namelast_name 列分别重命名为 namesurname,同时将表 table_name 重命名为 tn

示例

假设 employees 表的数据如下:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
3 Charlie Brown 50000 102
查询所有列
SELECT * FROM employees;

结果:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
3 Charlie Brown 50000 102
查询特定列
SELECT first_name, last_name, salary FROM employees;

结果:

first_name last_name salary
Alice Smith 60000
Bob Johnson 70000
Charlie Brown 50000
使用别名
SELECT first_name AS fname, last_name AS lname FROM employees;

结果:

fname lname
Alice Smith
Bob Johnson
Charlie Brown

2、简单处理查询结果

前面章节中的SELECT语句都是返回所有匹配的行。但是如果想对结果进行简单处理,可以通过以下方法实现:

查询结果的过滤

使用WHERE子句可以根据条件过滤查询结果。

语法:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

condition:限制条件。

查询结果的排序

使用ORDER BY子句可以根据指定的列对查询结果进行排序。

语法:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

column1 [ASC|DESC]:按照column1[升序|降序]进行排序,若不加ASCDESC则默认升序。

查询结果的去重

使用DISTINCT关键字可以去除查询结果中的重复行。

语法:

SELECT DISTINCT column1, column2, ...
FROM table_name;

column1, column2, ...列中的重复行进行去除。

查询结果的限制

在某些数据库系统中,可以使用LIMIT子句限制查询结果的行数。

语法:

SELECT column1, column2, ...
FROM table_name
LIMIT n;

限制输出n行。

示例

假设employees表的数据如下:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
3 Charlie Brown 50000 102
4 David Davis 80000 102
5 Eve White 90000 103
查询结果的过滤

查询employees表中工资大于60000的员工。

SELECT * 
FROM employees
WHERE salary > 60000;

结果:

employee_id first_name last_name salary department_id
2 Bob Johnson 70000 101
4 David Davis 80000 102
5 Eve White 90000 103
查询结果的排序

查询employees表中的所有员工,并按工资降序排序。

SELECT * 
FROM employees
ORDER BY salary DESC;

结果:

employee_id first_name last_name salary department_id
5 Eve White 90000 103
4 David Davis 80000 102
2 Bob Johnson 70000 101
1 Alice Smith 60000 101
3 Charlie Brown 50000 102
查询结果的去重

查询employees表中所有(不重复)的部门ID。

SELECT DISTINCT department_id 
FROM employees;

结果:

department_id
101
102
103
查询结果的限制

查询employees表中工资最高的3名员工。

SELECT * 
FROM employees
ORDER BY salary DESC
LIMIT 3;

结果:

employee_id first_name last_name salary department_id
5 Eve White 90000 103
4 David Davis 80000 102
2 Bob Johnson 70000 101

以下是整理后的Markdown格式内容:

3、SQL 基础排序 - ORDER BY 子句

在 SQL 中,ORDER BY 子句用于对查询结果进行排序。通过 ORDER BY 子句,可以根据一个或多个列对结果集进行升序或降序排列。这在处理大量数据时非常有用,可以帮助更清晰地查看和分析数据。

ORDER BY 子句的使用

ORDER BY 子句的基本语法如下:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC];
  • column1:指定要排序的列名。
  • ASC:表示按升序排序(默认值)。
  • DESC:表示按降序排序。
多列排序

ORDER BY 子句也可以根据多个列进行排序。语法如下:

ORDER BY column1 ASC, column2 DESC;
示例

假设有一个 employees 表,包含以下数据:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
3 Charlie Brown 50000 102
4 David Davis 80000 102
5 Eve White 90000 103
单列排序

查询所有员工,并按工资升序排序:

SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary ASC;

结果:

employee_id first_name last_name salary
3 Charlie Brown 50000
1 Alice Smith 60000
2 Bob Johnson 70000
4 David Davis 80000
5 Eve White 90000

查询所有员工,并按工资降序排序:

SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary DESC;

结果:

employee_id first_name last_name salary
5 Eve White 90000
4 David Davis 80000
2 Bob Johnson 70000
1 Alice Smith 60000
3 Charlie Brown 50000
多列排序

查询所有员工,并先按部门 ID 升序排序,再按工资降序排序:

SELECT employee_id, first_name, last_name, salary, department_id
FROM employees
ORDER BY department_id ASC, salary DESC;

结果:

employee_id first_name last_name salary department_id
2 Bob Johnson 70000 101
1 Alice Smith 60000 101
4 David Davis 80000 102
3 Charlie Brown 50000 102
5 Eve White 90000 103
使用别名排序

也可以在 ORDER BY 子句中使用列的别名进行排序。例如:

SELECT employee_id, first_name, last_name, salary AS emp_salary
FROM employees
ORDER BY emp_salary DESC;

结果:

employee_id first_name last_name emp_salary
5 Eve White 90000
4 David Davis 80000
2 Bob Johnson 70000
1 Alice Smith 60000
3 Charlie Brown 50000

4、SQL 基础操作符

在 SQL 中,操作符用于在 WHERE 子句中指定条件,以过滤查询结果。以下是一些常用的基础操作符及其用法。

1. 比较运算符

比较运算符用于比较两个值返回布尔值(TRUE 或 FALSE)。常用的比较运算符包括:

  • =:等于
  • <>!=:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于
2. 逻辑运算符

逻辑运算符用于组合多个条件,返回布尔值。常用的逻辑运算符包括:

  • AND:逻辑与
  • OR:逻辑或
  • NOT:逻辑非
3. IN 操作符

IN 操作符用于指定多个可能的值,返回布尔值。语法如下:

SELECT column1, column2 
FROM table_name 
WHERE column1 IN (value1, value2, ...);
4. BETWEEN 操作符

BETWEEN 操作符用于指定一个范围,返回布尔值。语法如下:

SELECT column1, column2 
FROM table_name 
WHERE column1 BETWEEN value1 AND value2;
5. LIKE 操作符

LIKE 操作符用于模式匹配,返回布尔值。语法如下:

SELECT column1, column2 
FROM table_name 
WHERE column1 LIKE pattern;
  • %:匹配任意数量的字符(包括零个字符)。
  • _:匹配单个字符。

假设有一个 employees 表,包含以下数据:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
3 Charlie Brown 50000 102
4 David Davis 80000 102
5 Eve White 90000 103
示例 1:比较运算符

查询工资大于 60000 的员工:

SELECT * 
FROM employees
WHERE salary > 60000;

结果:

employee_id first_name last_name salary department_id
2 Bob Johnson 70000 101
4 David Davis 80000 102
5 Eve White 90000 103

示例 2:逻辑运算符

查询工资大于 60000 且部门 ID 为 102 的员工:

SELECT * 
FROM employees
WHERE salary > 60000 AND department_id = 102;

结果:

employee_id first_name last_name salary department_id
4 David Davis 80000 102

示例 3:IN 操作符

查询部门 ID 为 101 或 103 的员工:

SELECT * 
FROM employees
WHERE department_id IN (101, 103);

结果:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
5 Eve White 90000 103

示例 4:BETWEEN 操作符

查询工资在 50000 到 70000 之间的员工:

SELECT * 
FROM employees
WHERE salary BETWEEN 50000 AND 70000;

结果:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
3 Charlie Brown 50000 102

示例 5:LIKE 操作符

查询名字以字母 “A” 开头的员工:

SELECT * 
FROM employees
WHERE first_name LIKE 'A%';

结果:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101

4、SQL 高级操作符

在 SQL 中,高级操作符可以帮助你更灵活和高效地操作数据库中的数据。以下是一些常见的高级操作符及其用法。

1. IS NULLIS NOT NULL

IS NULL 和 IS NOT NULL 用于检查一个列是否为 NULL 或不为 NULL。

  • IS NULL:检查列是否为 NULL。
  • IS NOT NULL:检查列是否不为 NULL。
2. EXISTS 操作符

EXISTS 操作符用于检查子查询是否返回任何行。如果子查询返回至少一行,则 EXISTS 条件为 TRUE。

语法:

SELECT column1, column2 
FROM table_name
WHERE EXISTS (SELECT 1 FROM another_table WHERE condition);
3. ALLANY 操作符

ALL 和 ANY 操作符用于比较一个值与子查询返回的值集

  • ALL:与子查询返回的所有值进行比较。
  • ANY:与子查询返回的任意一个值进行比较。

语法:

SELECT column1, column2 
FROM table_name
WHERE column1 > ALL (SELECT column1 FROM another_table WHERE condition);

假设有一个 employees 表,包含以下数据:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
3 Charlie Brown NULL 102
4 David Davis 80000 102
5 Eve White 90000 103
示例1:IS NULL 和 IS NOT NULL

查询工资为 NULL 的员工:

SELECT * 
FROM employees
WHERE salary IS NULL;

结果:

employee_id first_name last_name salary department_id
3 Charlie Brown NULL 102

查询工资不为 NULL 的员工:

SELECT * 
FROM employees
WHERE salary IS NOT NULL;

结果:

employee_id first_name last_name salary department_id
1 Alice Smith 60000 101
2 Bob Johnson 70000 101
4 David Davis 80000 102
5 Eve White 90000 103
示例2:EXISTS 操作符

现在,我们想查询所有工资不低于表中任何其他员工工资的员工。这里可以使用 EXISTS 操作符来实现。

SELECT e1.employee_id, e1.first_name, e1.last_name, e1.salary
FROM employees e1
WHERE EXISTS (
    SELECT 1
    FROM employees e2
    WHERE e2.salary IS NOT NULL AND e1.salary >= e2.salary
);

子查询:

  • 子查询也从 employees 表中选择数据,但使用别名 e2。
  • 子查询的条件是 e2.salary IS NOT NULL,确保不比较 NULL 值。
  • 子查询的条件是 e1.salary >= e2.salary,确保外层查询的员工工资高于子查询中的任何员工工资。

EXISTS 操作符:

  • 如果子查询返回至少一行,则 EXISTS 条件为 TRUE。
  • 这意味着外层查询的员工工资不低于表中任何其他员工的工资。

结果:

employee_id first_name last_name salary
5 Eve White 90000

员工 Eve 的工资是 90000,这是表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2397348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

行业案例 | OPPO借助Azure AI Speech国际服务实现音频文件智能转录

OPPO是全球领先的智能终端与移动互联网服务提供商&#xff0c;业务覆盖50余国&#xff0c;通过超40万销售网点和2500个服务中心与全球用户共享科技。作为软硬服一体化科技公司&#xff0c;OPPO以ColorOS为核心优化软件平台&#xff0c;为4.4亿月活用户打造智能操作系统&#xf…

基于 OpenCV 和 DLib 实现面部特征调整(眼间距、鼻子、嘴巴)

摘 要 本文介绍如何利用Dlib面部特征点检测和OpenCV图像处理技术&#xff0c;通过Python实现面部特征的精准调整。我们将以改变眼间距为例&#xff0c;演示包括地标检测、三角剖分变形等关键技术&#xff0c;该方法可扩展至嘴唇、眉毛等面部特征的调整。 技术栈 Python 3.8 …

spring-boot接入websocket教程以及常见问题解决

我们使用spring-boot接入websocket有三种方式&#xff1a;使用EnableWebSocket、EnableWebSocketMessageBroker以及ServerEndpoint&#xff0c;本文主要介绍使用ServerEndpoint方式的流程以及碰到的问题解决 接入方式 添加依赖 确保spring-boot-starter-websocket依赖 <d…

迈向分布式智能:解析MCP到A2A的通信范式迁移

智能体与外部世界的桥梁之言&#xff1a; 在深入探讨智能体之间的协作机制之前&#xff0c;我们有必要先厘清一个更基础的问题&#xff1a;**单个智能体如何与外部世界建立连接&#xff1f;** 这就引出了我们此前介绍过的 **MCP&#xff08;Model Context Protocol&…

深度学习|pytorch基本运算-hadamard积、点积和矩阵乘法

【1】引言 pytorch对张量的基本运算和线性代数课堂的教学有一些区别&#xff0c;至少存在hadamard积、点积和矩阵乘法三种截然不同的计算方法。 【2】hadamard积 hadamard积是元素对位相乘&#xff0c;用“*”连接张量&#xff0c;代码&#xff1a; # 导入包 import torch …

FFmpeg移植教程(linux平台)

目录 第三方源码编译三部曲关于 configure 的说明 FFmpeg 移植流程获取源码方法一&#xff1a;git 远程克隆方法二&#xff1a;官网下载压缩包解压 配置安装 第三方源码编译三部曲 Linux平台下有许多开源的第三方库和服务&#xff0c;这些开源代码一般都符合GNU-autotools编码…

Mybatis:灵活掌控SQL艺术

在前面的文章中&#xff0c;小编分享了spring中相关的知识&#xff0c;但是没有分享到&#xff0c;如何去更高效操作数据库。 操作数据库传统的方法就是通过JDBC来进行操作。 这个传统方法使用上可谓是够麻烦的 1.首先创建一个数据源对象 2.设置该数据源的属性&#xff08;…

2025.05.28【Choropleth】群体进化学专用图:区域数据可视化

Load geospatial data Start by loading your geospatial data in R, and build a basic plot. Data from the package The cartography comes with a set of geospatial data included. Learn how to use it to build a choropleth map. 文章目录 Load geospatial dataData …

【春秋云镜】CVE-2022-26965 靶场writeup

知识点 网站的主题或者模块位置一般是可以上传文件的&#xff0c;不过一般为压缩包形式主题或者模块可以上github上找到和cms匹配的源码主题被解压后会放到加入到对应的文件夹中&#xff0c;而且还会自动执行对应的info.php文件(需要主题和cms配套才行)我这里取巧了&#xff0…

JSP、HTML和Tomcat

9x9上三角乘法表 乘法表的实现 <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><title>99 上三角乘法表</title><style>body {font-family: monospace;padding…

(1)pytest简介和环境准备

1. pytest简介 pytest是python的一种单元测试框架&#xff0c;与python自带的unittest测试框架类似&#xff0c;但是比unittest框架使用起来更简洁&#xff0c;效率更高。根据pytest的官方网站介绍&#xff0c;它具有如下特点&#xff1a; 非常容易上手&#xff0c;入门简单&a…

构建高性能风控指标系统

一、引言 在金融风控领域&#xff0c;指标是风险识别的核心依据。风控平台核心系统之一--规则引擎的运行依赖规则、变量和指标&#xff0c;一个高性能的指标系统非常重要&#xff0c;本文将深入探讨风控平台指标系统的全链路技术实现&#xff0c;涵盖从指标配置到查询优化的完…

晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册

晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册 晨控CK-UR12系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题&#xff1a;围绕…

实验一:PyTorch基本操作实验

import torch # PyTorch中初始化矩阵常见有以下几种方法 # 1. 直接使用固定值初始化 # M torch.tensor([[1.0, 2.0, 3.0]]) # 1x3矩阵 # 2. 随机初始化 # M torch.rand(1, 3) # 1x3矩阵&#xff0c;元素在0-1之间均匀分布 # M torch.randn(1, 3) # 1x3矩阵&#xff0c;元…

可视化大屏通用模板Axure原型设计案例

本文将介绍一款基于Axure设计的可视化大屏通用模板&#xff0c;适用于城市、网络安全、园区、交通、社区、工业、医疗、能源等多个领域。 模板概述 这款Axure可视化大屏通用模板集成了多种数据展示模块和组件&#xff0c;旨在为用户提供一个灵活、可定制的数据展示平台。无论…

历年山东大学计算机保研上机真题

历年山东大学计算机保研上机真题 2025山东大学计算机保研上机真题 2024山东大学计算机保研上机真题 2023山东大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school 从1到100找质数 题目描述 从 1 1 1 到 100 100 100 中找出所有的质数。 输入格式 …

Java处理动态的属性:字段不固定、需要动态扩展的 JSON 数据结构

文章目录 引言I `JSONObject` 接收和返回JSONObject 接收和返回数据存储II 签名测试接口dto的定义签名计算III JsonAnySetter 和JsonAnyGetter 注解@JsonAnySetter 的用法@JsonAnyGetter 的用法综合示例引言 应用场景: 签名测试接口、表单配置项、参数列表、插件信息等。技术实…

MAC电脑怎么通过触摸屏打开右键

在Mac电脑上&#xff0c;通过触摸屏打开右键菜单的方法如下&#xff1a; 法1:双指轻点&#xff1a;在触控板上同时用两根手指轻点&#xff0c;即可触发右键菜单。这是Mac上常用的右键操作方法。 法2:自定义触控板角落&#xff1a;可以设置触控板的右下角或左下角作为右键区域…

用 Whisper 打破沉默:AI 语音技术如何重塑无障碍沟通方式?

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

【东枫科技】KrakenSDR 天线阵列设置

标准测向需要五根相同的全向天线。您可以折衷使用更少的天线&#xff0c;但为了获得最佳性能&#xff0c;我们建议使用全部五根天线。这些天线通常是磁铁安装的鞭状天线&#xff0c;或偶极子天线。我们建议始终使用均匀圆形阵列 (UCA) 天线&#xff0c;因为它可以确定来自各个方…