详解SQL单表查询

ops/2024/11/1 5:56:54/

SQL单表查询

  • 1. `SELECT` 语句的基本结构
  • 2. 查询所有列和指定列
    • 查询所有列
    • 查询特定列
  • 3. `WHERE` 条件筛选
    • 比较运算符
    • 多条件查询:使用 `AND` 和 `OR`
    • `NOT` 操作符
  • 4. `ORDER BY` 进行排序
    • 多列排序
  • 5. `LIMIT` 限制返回行数
    • 只获取前N行数据
    • 使用 `LIMIT` 和 `OFFSET` 进行分页查询
  • 6. 常见的SQL函数操作
  • 7. 使用别名 `AS`
  • 8. 使用 `DISTINCT` 去重
  • 综合实例

1. SELECT 语句的基本结构

单表查询的最基本语句结构是:

sql">SELECT1,2, ... 
FROM 表名
WHERE 条件
ORDER BY 列名 ASC|DESC
LIMIT 数量;

关键要素说明:

  • SELECT:选择列。可以指定多个列,也可以使用通配符(*)选择所有列。
  • FROM:指定查询的数据来源,即数据表的名称。
  • WHERE:条件筛选,设置过滤条件,只返回符合条件的行。
  • ORDER BY:排序,对结果集按指定列进行升序或降序排列。
  • LIMIT:限制结果行数,适合分页或只取前几条数据。

2. 查询所有列和指定列

查询所有列

如果希望一次性查询表中的所有列,可以用星号*代替列名。

示例:查询employees表的所有数据。

sql">SELECT * FROM employees;

此时返回整个表的内容,非常适合快速查看一个表的所有数据。

查询特定列

在很多实际情况下,我们并不需要所有列的数据。我们可以指定要查询的列名,以减少数据传输量。

示例:查询员工姓名和工资

sql">SELECT name, salary FROM employees;

这种方法尤其适合数据量较大时的查询操作,因为只获取所需列的数据能够显著提升查询效率。

3. WHERE 条件筛选

WHERE子句允许我们对数据进行条件过滤。只有符合条件的记录才会被返回。WHERE子句支持多种比较运算符和逻辑运算符。

比较运算符

  • =:等于
  • <>:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于

示例:查询工资大于8000的员工

sql">SELECT * FROM employees WHERE salary > 8000;

返回结果中只有工资高于8000的员工数据。

多条件查询:使用 ANDOR

可以使用ANDOR运算符组合多个条件。

  • AND:只有所有条件都为真时,结果才会返回。
  • OR:只要有一个条件为真,结果就会返回。

示例:查询IT部门且工资大于8000的员工

sql">SELECT * FROM employees WHERE department = 'IT' AND salary > 8000;

只有同时满足两个条件的记录才会返回。

示例:查询IT部门或工资大于8000的员工

sql">SELECT * FROM employees WHERE department = 'IT' OR salary > 8000;

只要满足其中一个条件的记录都会被返回。

NOT 操作符

NOT运算符用于否定条件,返回不符合该条件的记录。

示例:查询非IT部门的员工

sql">SELECT * FROM employees WHERE NOT department = 'IT';

4. ORDER BY 进行排序

ORDER BY子句用于对结果进行排序,可以指定升序(ASC)或降序(DESC)。

  • ASC(升序):从小到大排列(默认)。
  • DESC(降序):从大到小排列。

示例:按工资升序排列

sql">SELECT * FROM employees ORDER BY salary ASC;

示例:按年龄降序排列

sql">SELECT * FROM employees ORDER BY age DESC;

多列排序

可以根据多列进行排序。首先按第一列排序,如果第一列相同,则按第二列排序,以此类推。

示例:先按部门排序,再按工资降序排序

sql">SELECT * FROM employees ORDER BY department, salary DESC;

返回结果会先按部门分组排序,然后在每个部门内按工资降序排列。

5. LIMIT 限制返回行数

LIMIT子句用于限制查询结果返回的行数,特别适用于分页查询和获取前几条记录。

只获取前N行数据

示例:获取工资最高的两位员工

sql">SELECT * FROM employees ORDER BY salary DESC LIMIT 2;

此查询首先按工资降序排序,然后仅返回前两条记录。

使用 LIMITOFFSET 进行分页查询

分页查询时,我们可以配合LIMITOFFSET使用,OFFSET表示从第几行开始返回数据。

示例:从第3行开始返回两条数据

sql">SELECT * FROM employees LIMIT 2 OFFSET 2;

此查询会跳过前两行,从第三行开始返回两条记录。

6. 常见的SQL函数操作

在单表查询中,SQL提供了一些常用的函数来对数据进行处理:

  • COUNT():计算记录行数。
  • SUM():计算数值列的总和。
  • AVG():计算数值列的平均值。
  • MAX():返回数值列中的最大值。
  • MIN():返回数值列中的最小值。

示例:统计员工总数

sql">SELECT COUNT(*) AS total_employees FROM employees;

示例:计算所有员工的平均工资

sql">SELECT AVG(salary) AS avg_salary FROM employees;

示例:查询部门为IT的员工最高工资

sql">SELECT MAX(salary) AS max_salary FROM employees WHERE department = 'IT';

7. 使用别名 AS

别名AS用于给列或表起一个临时名称。别名不会改变列或表的真实名称,但可以使查询结果更加易读。

示例:查询员工姓名和工资,并给工资列起别名为employee_salary

sql">SELECT name, salary AS employee_salary FROM employees;

在查询结果中,列名会显示为employee_salary而不是salary,这在需要重新命名列名时非常方便。

8. 使用 DISTINCT 去重

DISTINCT关键字用于消除结果中的重复值。

示例:查询所有不同的部门名称

sql">SELECT DISTINCT department FROM employees;

返回结果中,每个部门只会出现一次。

综合实例

假设我们想要查询以下信息:

  1. 所有部门中工资最高的员工姓名及其工资。
  2. 只返回IT财务部门,并按工资降序排列。

综合使用多种SQL关键字的查询语句如下:

sql">SELECT name, department, MAX(salary) AS highest_salary
FROM employees
WHERE department IN ('IT', '财务')
GROUP BY department
ORDER BY highest_salary DESC;

通过熟练掌握以上内容,可以灵活应用单表查询从数据中获取所需信息。


http://www.ppmy.cn/ops/130053.html

相关文章

鸿蒙UI开发——基于全屏方案实现沉浸式界面

1、概 述 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条。 其中状态栏和导航条&#xff0c;通常在沉浸式布局下称为避让区&#xff0c;避让区之外的区域称为安全区。 开发应用沉浸式效果主要指&#xff1a;通过调整状态栏、应用界面和导航条的显示效果来减少状态…

【三十八】【QT开发应用】vlcplayer视频播放器(一)实现视频播放,视频暂停,视频停止,进度条调节,音量调节,时长显示功能

效果展示 vlcplayer_test视频播放器 MainWidget.ui 注意控件的布局和命名&#xff0c;控件的命名和信号与槽函数的绑定有关&#xff0c;所以这点很重要。 下载VLC组件和环境配置 videolan下载地址我下载的是vlc-3.0.8-win64版本. 将下载的文件复制粘贴到项目文件中. 复制粘…

尚硅谷-react教程-求和案例-数据共享(下篇)-完成数据共享-笔记

#1024程序员节&#xff5c;征文# public/index.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>redux</title></head><body><div id"root"></div></body> </html&…

Jetson Xavier nx在Ubuntu18.04下安装ros2 使用奥比中光330

安装ROS2过程 添加ros2 软件源 sudo sh -c ‘echo “deb [arch=amd64] http://packages.ros.org/ros2/ubuntu bionic main” > /etc/apt/sources.list.d/ros2-latest.list’ sudo apt install curl gnupg2 lsb-release curl http://repo.ros2.org/repos.key | sudo apt-key…

Golang | Leetcode Golang题解之523题连续的子数组和

题目&#xff1a; 题解&#xff1a; func checkSubarraySum(nums []int, k int) bool {m : len(nums)if m < 2 {return false}mp : map[int]int{0: -1}remainder : 0for i, num : range nums {remainder (remainder num) % kif prevIndex, has : mp[remainder]; has {if …

神经网络:解析人工智能的智慧基石

神经网络&#xff1a;解析人工智能的智慧基石 一、引言 在当今科技飞速发展的时代&#xff0c;人工智能已经成为了一个备受关注的领域。而神经网络作为人工智能的重要组成部分&#xff0c;正逐渐改变着我们的生活和未来。那么&#xff0c;什么是神经网络呢&#xff1f;它又是…

Redis-概念、安装、基本配置

文章目录 一、Redis及Redis集群概念、分布式系统概念一-1 Redis是什么一-2 什么是分布式系统、分布式缓存一-3 什么是Redis集群、实现Redis集群的方法有哪些、这些跟Redis的sentinel和cluster有什么关系一-4 Redis的库一-5 Redis中的Key与Value是什么、如何进行操作使用它们添加…

EnrichmentMap 该怎么用?方法和流程的建立过程

愿武艺晴小朋友一定得每天都开心 1&#xff09;首先在&#xff1a;g:Profiler – a web server for functional enrichment analysis and conversions of gene lists 的网站上输入Degs的基因列表。 具体步骤如下&#xff1a; 2&#xff09;准备富集出来的通路们&#xff08;…