最近学习了数据库的基础知识,简单总结一下

本文介绍了SQL查询中的关键概念,如列存储与行存储的区别,以及SELECT、WHERE、ORDERBY、IN/NOTIN、BETWEEN、OR、LIKE、GROUPBY、HAVING、ISNULL和ORDERBY子句的使用。此外,还提及了SQL函数如LENGTH的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库

  • 列存储表中的组织信息

  • 行存储表中的明细记录

SQL select

SELCT * FROM data.company 
# SQL 数据库查询语句
# data 的数据库中选择 company 表格中的所有列和行
limit 100  
# 限制查找数据100条
order by company 
# ORDER BY 关键字用于指定按照哪个列进行排序,如果没有指定排序方式,则默认按照升序进行排序。
order by company desc
# desc关键字降序排列
where companyId = 121
SELECT *
FROM table_name
WHERE column_name = value;
  • “table_name” 是要查询的表名,

  • “column_name” 是要进行比较的列名,

  • “value” 是要与列值进行比较的值。在这个示例中,只有满足条件的行才会被返回。

WHERE

  • WHERE 是 SQL 查询语句中的一个关键字,用于筛选符合指定条件的行。

  • “WHERE” 是用来指定条件的关键字。它通常用于 SELECT、UPDATE 或 DELETE 语句中,用于筛选满足特定条件的数据。

    • “WHERE” 子句通常紧跟在查询语句的 FROM 子句之后,可以使用各种比较运算符和逻辑运算符构建条件表达式,以筛选数据。常见的比较运算符包括等于(=)、大于(>)、小于(<)、不等于(<>)、大于等于(>=)和小于等于(<=),而逻辑运算符包括 AND、OR 和 NOT。

IN/NOT IN

SELECT *
FROM table_name
WHERE column_id IN (12, 122);
  • “table_name” 是要查询的表名,“column_id” 是要进行匹配的列名,(12, 122) 是要进行匹配的值的集合。这个查询将返回列 “column_id” 的值等于 12 或 122 的行。

  • 使用 “IN” 关键字可以方便地在一个查询条件中进行多个值的比较,而无需编写多个条件表达式。这在需要匹配多个值的情况下非常有用。

SELECT *  
FROM table_name  
WHERE column_id NOT IN (12, 122);
  • NOT IN用于在查询中筛选出不在指定列表中的数据。

SELECT *  
FROM customers  
WHERE city = 'New York' AND age > 30;
  • 多条件查找,关键字and

  • WHERE是SQL中用于过滤记录的关键词。

  • city = 'New York'表示只选择那些城市字段(city)值为'New York'的记录。

  • AND是逻辑运算符,表示两个条件都必须满足。


BETWEEN

BETWEEN 是 SQL 中用于指定范围的操作符。它常用于 WHERE 子句中,用来筛选出某个范围内的数值或者日期数据。

SELECT * FROM `销售表` 
WHERE 销售数量 BETWEEN 150 AND 250;
  • WHERE 销售数量 BETWEEN 150 AND 250 表示筛选出销售数量在150到250之间的数据行。这个条件等同于使用 >= 150 AND <= 250 来表示销售数量的范围。


OR

OR 是一个逻辑运算符,用于在查询中组合多个条件。当满足任一条件时,OR 运算符会返回真。

SELECT * 
FROM table_name 
WHERE column1 = 'value1' OR column2 = 'value2';

LIKE是一个用于模糊匹配的运算符,通常与通配符一起使用。它允许你在查询中使用模式匹配来搜索匹配特定模式的字符串。

LIKE运算符用于在WHERE子句中进行模式匹配,以便根据给定的模式筛选出符合条件的记录。它使用两个通配符来表示模式:

  1. %(百分号):表示零个、一个或多个字符。

  2. _(下划线):表示一个单一字符。


group by

SELECT city, COUNT(*) as recordCount, COUNT(DISTINCT resId) as distinctResCount  
FROM work_style  
GROUP BY city;
  • count(*)会计算表中的所有行,而count(1)实际上也会计算所有行

  • 这个查询将返回每个城市的记录数量(通过COUNT(*)计算)和resId的唯一值数量(通过COUNT(DISTINCT resId)计算)。注意我添加了DISTINCT来确保resId的计数是唯一的。


HAVING

HAVING子句主要用于对聚合函数(如SUM(), COUNT(), AVG()等)的结果进行过滤

select * from data.dataanalyst
group by city
having count(positionId) >= 100
  • having子句是在分组后应用条件的地方,用于过滤分组。

  • 在这个查询中:

    • 我们选择city列,并计算每个城市的positionId的数量。

    • 使用group by子句按city列分组。

    • 使用having子句过滤出那些positionId数量大于或等于100的城市。


is null

SELECT * FROM 销售表 
WHERE 销售数量 IS NULL;
# 如果想查非空值:
SELECT * FROM `销售表` WHERE 销售数量 IS NOT NULL;
  • 在 SQL 中,我们使用 IS NULL 来判断 NULL 值,而不是使用等号(=)

  • 条件运算符的=或<>是不能判断NULL值的,必须用 IS NULL 和 IS NOT NULL

  • <=>安全等于可以判断NULL值,也可以判断普通值

  • SELECT * FROM 销售表 WHERE 销售数量 <=> NULL; 但是这个符号可读性差,看到之后不易分清。


sql排序

ASC (升序)

SELECT 字段名 FROM 表名 ORDEY BY 字段名 ASC (ASC可以省略默认升序)

例如:SELECT * FROM 销售表 ORDER BY 销售数量 ASC;

DESC (升序)

SELECT 字段名 FROM 表名 ORDEY BY 字段名 DESC

例如:SELECT * FROM 销售表 ORDER BY 销售数量 DESC;

  • ORDER BY 关键字用于指定按照哪个列进行排序,如果没有指定排序方式,则默认按照升序进行排序。

拓展:添加筛选条件

例如:店号为1,3,7店的数据,按销售数量降序

SELECT * FROM 销售表 WHERE 店号 in(1,3,7) ORDER BY 销售数量 DESC;

排序优先级

SELECT 字段名 FROM 表名 ORDER BY 字段名1 DESC,字段名2 ASC
  • SELECT 字段名:选择要查询的字段,可以是单个字段或多个字段,用逗号分隔。

  • FROM 表名:指定要查询的数据表。

  • ORDER BY 字段名1 DESC, 字段名2 ASC:对查询结果进行排序。字段名1 是第一个排序字段,DESC 表示降序(从大到小),字段名2 是第二个排序字段,ASC 表示升序(从小到大)。

综合起来,这个查询语句将返回指定表中选定字段的数据,并按照字段1降序排列,然后在相同字段1的情况下按照字段2升序排列。注意,DESC 和 ASC 是可选的,默认情况下,如果没有指定排序方式,则为升序。

SQL函数

LENGTH()

LENGTH() 是一种常见的用于获取字符串长度的sql函数,它返回指定字符串表达式的字符串或字节数,取决于使用的数据库系统

例如,如果你想计算一个名为 name 的字段中每个记录的字符数,你可以使用以下语法:

Copy CodeSELECT LENGTH(name) AS 字符数
FROM 表名;

这将返回一个名为 "字符数" 的列,其中包含了每个记录中 name 字段的字符数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值