SQL刷题快速入门(一)

news/2025/1/10 2:25:26 标签: sql, oracle, 数据库, 刷题, 笔试

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语法统一模板

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;

sql_46">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子句,则在此时对排序后的结果进行分页。
    以下是这个顺序的一个简化的例子:
sql">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关键字的基本例子:

sql">SELECT DISTINCT column_name FROM table_name;

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

sql">SELECT DISTINCT column1, column2 FROM table_name;

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

为列和表取别名

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

sql">SELECT column_name new_alias FROM table_name;

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

sql">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)。
      示例:
    sql">SELECT * FROM table_name WHERE column_name = 'value';
    
  2. IS 关键字:

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

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

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

正确的使用例子:

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

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

字符匹配

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


http://www.niftyadmin.cn/n/5818140.html

相关文章

GO:sync.Map

sync.Map 是 Go 语言 sync 包中提供的一个内置的并发安全的 map 类型。它在设计上考虑了高并发场景,尽量避免加锁操作从而提升读写性能。 这里是一段关于sync.map使用的简单记录 package mainimport ("fmt""sync" )func main() {var m sync.Map…

api开发如何在代码中使用京东商品详情接口的参数?

选择编程语言和相关工具 以 Python 为例,你可以使用requests库来发送 HTTP 请求获取接口数据。如果是 Java,可以使用OkHttp等库。 Python 示例 假设你已经安装了requests库,以下是一个简单的代码示例来获取和使用京东商品详情接口参数&#…

卷积神经网络 (CNN, Convolutional Neural Network) 算法详解与PyTorch实现

卷积神经网络 (CNN, Convolutional Neural Network) 算法详解与PyTorch实现 目录 卷积神经网络 (CNN, Convolutional Neural Network) 算法详解与PyTorch实现1. 卷积神经网络 (CNN) 算法概述1.1 图像处理1.2 CNN的优势2. CNN的核心技术2.1 卷积层2.2 池化层2.3 全连接层2.4 激活…

Solidity合约编写(五)

解决问题 编写 FundMe.sol 一个众筹合约,允许用户向合约转账 ETH,并记录每个地址的转账金额。同时,合约还要求每次转账至少为 1 ETH,否则交易失败。最后,合约管理员可以提取资金,并使用 call 函数发送 ETH…

golang中的字符串,字符串驻留 Intern,unique包

Go1.23 Go字符串 Go语言中的字符串是一个不可变的字节序列,这意味着一旦字符串被创建,其内容就不能被修改(尽管可以通过切片、拼接等方式生成新的字符串)。这一设计选择不仅简化了字符串的处理逻辑,还提高了程序的并…

Netty中用了哪些设计模式?

大家好,我是锋哥。今天分享关于【Netty中用了哪些设计模式?】面试题。希望对大家有帮助; Netty中用了哪些设计模式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 是一个高性能的网络通信框架,广泛…

【25考研】川大计算机复试情况,重点是啥?怎么准备?

24年进入复试的同学中,有10位同学的复试成绩为0分。具体是个人原因还是校方原因,还尚不明确。但是C哥提醒,一定要认真复习!复试完后不要跟任何人讨论有关复试的题目及细节! 一、复试内容 四川大学复试内容较多&#xf…

【C++习题】20. 两个数组的交集

题目:349. 两个数组的交集 - 力扣(LeetCode) 链接🔗:349. 两个数组的交集 - 力扣(LeetCode) 题目: 代码: class Solution { public:// 函数功能:求两个数组…