首页 > 数据库 >SQL刷题快速入门(一)

SQL刷题快速入门(一)

时间:2025-01-10 22:59:53浏览次数:3  
标签:入门 column 刷题 SQL table NULL column1 name

SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系型数据库的一种标准计算机语言。SQL最初由IBM在20世纪70年代开发,并且自1986年以来,它已经被美国国家标准协会(ANSI)和国际标准化组织(ISO)作为标准发布。

SQL的主要用途包括:

  • 数据查询:通过SELECT语句从数据库中检索数据。
  • 数据更新:使用INSERTUPDATEDELETE语句来添加、修改或移除数据库中的数据。
  • 数据定义:利用CREATEALTERDROP等语句创建、修改或删除数据库对象,如表、索引、视图等。
  • 数据控制:使用GRANTREVOKE等语句管理对数据库的访问权限。
  • 事务控制:通过COMMITROLLBACKSAVEPOINT等语句管理事务,以确保数据的一致性和完整性。

SQL是一种声明式语言,用户指定想要的数据,而不是具体的操作步骤。这意味着编写SQL语句时,你只需说明要执行什么操作,而具体的实现细节则由数据库管理系统(DBMS)负责处理。

此外,SQL还支持复杂查询,例如连接多个表、聚合函数(如SUM()COUNT())、子查询、以及全文搜索等功能。尽管SQL是关系型数据库的标准语言,但不同的数据库系统可能会有自己特有的扩展和方言。因此,在学习SQL时,除了掌握标准语法外,了解特定数据库系统的特性也是很重要的。

SQL语法统一模板

SELECT
    column1,
    column2,
    -- 可以选择多个列或者使用 * 来选择所有列
    -- 可以使用 AS 来给列起别名
    function(column_name) AS alias_name
FROM
    table_name
-- 如果需要,可以加入一个或多个表进行连接
JOIN another_table
    ON table_name.common_column = another_table.common_column
-- 可以使用 WHERE 子句来过滤结果
WHERE
    condition1 AND/OR condition2
-- 可以使用 GROUP BY 子句来对结果进行分组
GROUP BY
    column1,
    column2
-- 可以使用 HAVING 子句来对分组后的结果进行过滤
HAVING
    group_condition
-- 可以使用 ORDER BY 子句来对结果进行排序
ORDER BY
    column1 ASC, -- 升序排序
    column2 DESC -- 降序排序
-- 如果需要,可以使用 LIMIT 子句来限制返回的行数
LIMIT
    row_count OFFSET offset_value;

mysql执行查询代码的顺序

SQL查询的执行顺序与您编写查询的顺序不完全相同。以下是SQL查询通常的执行顺序:

  1. FROM/JOIN:确定查询的数据来源,以及如何通过JOIN子句连接不同的表。
  2. WHERE:基于指定的条件过滤FROMJOIN子句返回的行。
  3. GROUP BY:将过滤后的结果分组。
  4. HAVING:对分组后的结果进行进一步过滤,通常基于聚合函数。
  5. SELECT:选择要显示的列。
  6. DISTINCT:如果使用了DISTINCT关键字,则在此时去除重复的行。
  7. ORDER BY:根据指定的列对结果进行排序。
  8. LIMIT/OFFSET:如果使用了LIMIT或OFFSET子句,则在此时对排序后的结果进行分页。
    以下是这个顺序的一个简化的例子:
SELECT column1, column2, AGGREGATE_FUNCTION(column3)
FROM table1
JOIN table2 ON table1.id = table2.id
WHERE condition
GROUP BY column1, column2
HAVING condition
ORDER BY column1
LIMIT 10;

实际的执行顺序是:

  1. FROM table1 JOIN table2 ON table1.id = table2.id
  2. WHERE condition
  3. GROUP BY column1, column2
  4. HAVING condition
  5. SELECT column1, column2, AGGREGATE_FUNCTION(column3)
  6. ORDER BY column1
  7. LIMIT 10
    需要注意的是,虽然这是逻辑上的执行顺序,但实际上数据库优化器可能会根据查询的成本和数据库的内部机制来调整这个顺序以获得更好的性能。

不要把"date"写成"data" !!! 检查!!!

debug

ambiguous的意思是模糊不清的,如果说某一属性是模糊不清的,那么大概率是两个表有同一名称栏,这时候需要在属性前加上表名的前缀进行限制,例如t1.id

例如:

SQL_ERROR_INFO: “Column ‘device_id’ in field list is ambiguous”

这时就要检查device_id是不是同时出现在多个表中,要在查询语句中加上表名.device_id

排序ASC和DESC

ASCDESC是SQL中用于ORDER BY子句的排序关键字,它们的全称分别是:

  • ASC: Ascending(升序)
  • DESC: Descending(降序)
    这些关键字告诉数据库管理系统按照升序或降序来排列查询结果。升序意味着从小到大排序,而降序则相反,从大到小排序。

distinct

注意:

select distinct id, date from qpd 相当于同时对 id和 date进行修饰,无论id相同,date不同,或者date相同,id不同,都算作为唯一列,符合distinct 要求

在 SQL 中,当你使用 select distinct column1, column2, ... 语法时,distinct 关键字是应用于所有列的组合,而不是单独的每一列。这意味着返回的结果集中 column1column2 的组合必须是唯一的。

在SQL中,DISTINCT关键字用于去除查询结果中的重复行,只返回唯一的记录。当你想要从数据库表中检索不同的(唯一的)值时,DISTINCT非常有用。
这里是一个使用DISTINCT关键字的基本例子:

SELECT DISTINCT column_name FROM table_name;

这个查询将从table_name表中选取column_name列的唯一值。
如果你想要对多个列使用DISTINCT,可以这样做:

SELECT DISTINCT column1, column2 FROM table_name;

这个查询将返回column1column2组合的唯一值。换句话说,如果column1column2的值在多行中是相同的,那么这些行将被合并为一条记录在结果集中显示。
请注意,使用DISTINCT可能会影响查询的性能,因为它需要数据库系统做额外的工作来识别和消除重复的行。因此,在处理大量数据时应该谨慎使用。

为列和表取别名

在SQL中,使用AS关键字来为列或表重命名是一个常见的做法,它提高了查询的可读性。然而,在某些情况下,你可以省略AS关键字,直接在列名后面写上新的别名。
以下是不使用AS关键字进行重命名的示例:

SELECT column_name new_alias FROM table_name;

在这个查询中,column_name被重命名为new_alias,而没有使用AS
同样的规则也适用于表的重命名:

SELECT t.column_name FROM table_name t;

在这个例子中,table_name被重命名为t,之后可以通过t来引用表。
虽然省略AS是可行的,但是使用AS可以增加查询的可读性和清晰度,特别是在复杂的查询或涉及多个表和列的别名时。因此,即使不是强制性的,许多开发者和数据库管理员仍然倾向于使用AS

=和is !=和is not

在SQL中,=IS 通常用于比较操作,但它们在用法和上下文上有所不同。

  1. = (等于)运算符:

    • 用于比较两个值是否相等。
    • 可以用于比较数字、字符串或日期等数据类型。
    • 当比较的是 NULL 值时,使用 = 可能不会得到期望的结果,因为 NULL 与任何值(包括另一个 NULL)的比较结果都是未知的(在 SQL 中表示为 UNKNOWN)。
      示例:
    SELECT * FROM table_name WHERE column_name = 'value';
    
  2. IS 关键字:

    • 通常用于与 NULL 值进行比较。
    • IS NULL 用于检查值是否为 NULL。
    • IS NOT NULL 用于检查值是否不为 NULL。
    • 不能用于非 NULL 值的比较。
      示例:
    SELECT * FROM table_name WHERE column_name IS NULL;
    

    以下是两者之间的主要区别:

  • 当比较的值可能包含 NULL 时,应使用 IS。例如,要找出某列值为 NULL 的记录,应该使用 IS NULL 而不是 column_name = NULL,因为后者不会返回任何结果。
  • 对于非 NULL 值的比较,通常使用 =
    错误的使用例子:
-- 这不会返回任何包含 NULL 的行
SELECT * FROM table_name WHERE column_name = NULL;

正确的使用例子:

-- 这会返回所有包含 NULL 的行
SELECT * FROM table_name WHERE column_name IS NULL;

总结来说,=IS 在处理 NULL 值时有着明显的不同,而对于非 NULL 值的比较,则通常使用 =

字符匹配

在这里插入图片描述
ps:以上图片转自:https://blog.nowcoder.net/n/459173fa716f41478e98509dd98c4747,水印自动加的,不知道怎么去掉,有知道的朋友麻烦告诉我

标签:入门,column,刷题,SQL,table,NULL,column1,name
From: https://blog.csdn.net/qq_51907069/article/details/145017279

相关文章

  • 【MySQL】第五章 数据类型
    系列文章目录《【MySQL】第一章MySQL5.7的安装与卸载》《【MySQL】第二章初识数据库》《【MySQL】第三章库的操作》《【MySQL】第四章表的操作》《【MySQL】第五章数据类型》文章目录系列文章目录环境准备数据类型分类数值类型数值类型分类整数类型浮点数FL......
  • 01 Java入门
    1972年C诞生贴近硬件、运行极快、效率较高操作系统、编译器、数据库、网络系统等指针和内存管理1982年C++诞生面向对象兼容C图形领域、游戏等1995年Java诞生简单性面向对象可移植性高性能分布式动态性多线程安全性健壮性Java三大版本JavaSE:标准版(桌......
  • MySQL索引原理及慢查询优化13
    背景MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等......
  • IDEA执行sql语句自动将驼峰转化成下划线的解决方案
    问题描述IDEA使用mybatis-plus执行sql语句时,自动将驼峰形式转化成了下划线形式,导致数据库查找不到对应字段产生原因这是因为mybatis-plus是默认开启驼峰转化为下划线的。解决方案打开IDEA,找到application.yml文件,加入mybatis-plus:......
  • MySQL 学习指南与资料分享
    MySQL学习资料https://pan.quark.cn/s/4102ccd1336dMySQL学习资料https://pan.quark.cn/s/4102ccd1336dMySQL学习资料https://pan.quark.cn/s/4102ccd1336d在如今数据驱动发展的大趋势下,MySQL作为开源关系型数据库管理系统的佼佼者,广泛应用于各个领域,从个人博客搭建到......
  • 【零基础入门Go语言】Go语言的一等公民:函数和方法
    函数和方法是我们迈向代码复用,多人协作开发的第一步。通过函数,可以把开发任务分解成一个个小的单元,这些小单元可以被其他单元复用,进而提升开发效率、降低代码重复度。再加上现成的函数已经被充分测试和使用过,所以其他函数在使用这个函数时也更安全,相较自己重新写一个相似功......
  • Airflow:SQL Sensor 监控数据库业务变化
    ApacheAirflow是一个功能强大的平台,用于编排复杂的数据工作流,其关键特性之一是能够监控外部条件并基于这些条件触发任务。ApacheAirflow中的SQLSensor支持在执行下游任务之前等待SQL数据库中的特定条件得到满足。在本文中,我们将详细探讨ApacheAirflowSQLSensor,涵盖其......
  • 2025版最新如何在本地部署大语言模型:工具与指南,零基础入门到精通,收藏这一篇就够了
    在快速发展的人工智能领域,大语言模型(LLMs)正成为各类应用的核心。无论是在智能客服、内容生成,还是在教育与医疗等领域,这些模型的应用潜力巨大。然而,云端服务的高昂费用和数据隐私的担忧,让越来越多的用户希望能够在本地环境中部署这些强大的模型。本文将详细介绍如何利用多款......
  • 2025版最新如何用3个月零基础入门网络安全(小白必看)?零基础入门到精通,收藏这一篇就够了
    前言写这篇教程的初衷是很多朋友都想了解如何入门/转行网络安全,实现自己的“黑客梦”。文章的宗旨是:1.指出一些自学的误区2.提供客观可行的学习表3.推荐我认为适合小白学习的资源.大佬绕道哈!一、自学网络安全学习的误区和陷阱1.不要试图先成为一名程序员(以编程为基础的......
  • 【C++】穿越编程岁月,细品C++进化轨迹,深化入门基石(续章)——揭秘函数缺省参数的魅力、函
    文章目录一、函数缺省参数二、函数重载三、引用1.引用的概念和定义2.引用的特性3.引用的使用4.const引用5.指针和引用的关系四、inline内联函数和nullptr1.inline2.nullptr一、函数缺省参数   缺省参数其实就是默认参数,它是声明或定义函数时为函数的参数指定......