【牛客SQL快速入门】SQL基础(一)

一、基础查询

SELECT ... FROM ...

查询所需的列名写在 SELECT 关键字之后,FROM 关键字指出从哪个表中查询数据。

查询多个列

要想从一个表中查询多个列,仍然使用相同的 SELECT 语句。唯一的不同是必须在SELECT 关键字后给出多个列名,列名之间必须以逗号分隔

查询所有列

除了指定所需的列外(如上所述,一个或多个列),SELECT 语句还可以查询所有的列而不必逐个列出它们。在实际列名的位置使用星号(*)通配符。

查询结果去重

每个不同的值仅出现一次,distinct 关键字加在去重字段前。

查询结果限制返回行数

在默认情况下,SELECT 语句会返回指定表中所有匹配的行,可以通过Limit语句限制返回结果行数。Limit语句一般加在SQL语句末尾,并且与数字搭配,写作Limit N,N代表想要限制返回的行数。

查询后的列重命名

在默认情况下,查询结果返回的列名会原始表中的列名一致,SQL也提供了列重命名 的语法--'AS',赋予列不同的名字以展示更多的信息

二、条件查询

1. 基础排序

单列排序

对SELECT语句检索出的数据进行排序,可使用 ORDER BY 子句。 ORDER BY 子句取一个或多个列的名字,据此对输出进行排序。(默认为升序排序

多列排序

要按多个列排序,简单指定列名,列名之间用逗号分开即可,在排序时会按照列给出的先后顺序依次排序

升序降序

在默认情况下,ORDER BY会对数据进行升序排序(从 A 到Z),我们还可以使用 ORDER BY 子句进行降序(从 Z 到 A)排 序。为了进行降序排序, 必须指定 DESC 关键字。在order by最后加上desc结果进行降序排序 。

多列排序的降序:

DESC关键字只应用到直接位于其前面的列名。也就是说如果我们SQL语句写的是 Order By age desc, gpa,那么排序将首先按照age降序排序序,再按照gpa升序排序输出。

2. 基础操作符

数据库中一般着包含大量的数据,大多数场景下我们只需要检索满足特定条件的数据。

where语句

在SQL语法中,可以使用WHERE语句对数据进行过滤,WHERE语句通常跟在From语句后

sql 复制代码
Select device_id From user_profile Where gender = 'male'

Where语句需要和操作符搭配使用,选择合适的操作符可以大大提高查询的效率,下面对常见的操作符进行一些介绍。

不等于号

不等于号在SQL中的写法为 < > 或 !=,代表筛选出不满足某条件的数据。

大于号小于号

大于号SQL中的写法为 > ,小于号为 < ,代表筛选出大于或小于某个条件的数据。

范围值

范围值限制方法为 between n1 and n2,n1 和 n2 为要限制的区间范围,使用中需要注意两点:

  • 一是 and 之前的值 需要 小于 and 之后的值,不然查询会返回空结果。
  • 二是在 hive sql 中结果会包括两端值。
空值

在表存储的数据类型中,有一类特殊的值叫空值,其定义为当一个字段不包括任何值时,称其包含空值 NULL,空值与字段包含 0、空字符串或仅仅包含空格是不同的概念。

在对空值进行筛选时,不能用等于号简单的判断是否 '= NULL'。SQL 语句有一个特殊的 WHERE 子句,可用来检查具有 NULL 值的列。这个 WHERE 子句就 是IS NULL 子句。

sql 复制代码
Select device_id,gender,age From user_profile Where gender is Null

这条语句可以返回表中所有性别列值为空的用户数据,同样如果我们想要剔除空值数据的话,也需要用一个特殊的WHERE子句,IS NOT NULL。

sql 复制代码
Select device_id,gender,age From user_profile Where gender is Not Null

3. 高级操作符

为了进行更强的过滤控制,SQL 允许给出多个 WHERE 子句,这些子句有两种使用方式,以 AND 子句或 OR 子句的方式使用。

AND操作符

在过滤数据时如果我们想结果同时满足多个条件,可以使用 AND 操作符给 WHERE子句附加条件

sql 复制代码
Select device_id,age From user_profile 
            Where age <30 and gender = 'male'
OR操作符

OR 操作符逻辑与 AND 操作符正好相反,在过滤数据时如果我们想要结果只需满足多个条件中的一个,可以使用OR操作符对条件进行连接

sql 复制代码
Select device_id,gender,age From user_profile 
    Where university= '山东大学' or university= '复旦大学'
IN 和 Not IN

IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN 取 一组由逗号分隔、括在圆括号中的合法值。 下面的例子说明了这个操作符:

sql 复制代码
Select device_id,gender,age,university,gpa From user_profile
    Where university in ('北京大学','复旦大学')

WHERE 子句中的 NOT 操作符有且只有一个功能,那就是否定其后所跟的任何条件。

所以 NOT 和 IN 一起使用等价于不等于括号中的条件。

操作符混合运用

WHERE 子句可以包含任意数目的 AND 和 OR 操作符,允许两者结合以进行复杂、高级的过滤。在使用时需要注意的一点是两者优先级的问题, SQL在处理OR操作符前,优先处理 AND 操作符。

sql 复制代码
Select device_id,gender,age,university,gpa From user_profile 
    Where university ='北京大学' or gpa>3.5 and university = '山东大学'

代码中Where函数限定条件正确的理解逻辑为:筛选出学校为北京大学或山东大学中gpa大于3.5的学生,SQL是先对and逻辑进行了理解,再处理or的逻辑。一般在使用中为防止表达错误,可以采取括号的形式把想要一起判断的逻辑放在同一个括号中。

sql 复制代码
Select device_id,gender,age,university,gpa From user_profile 
    Where university ='北京大学' or (gpa>3.5 and university = '山东大学')
Like操作符------模糊匹配

在实际运用中,有时我们会需要进行模糊匹配,这时就可以用到Like操作符

Like操作符需要和通配符结合使用,一般最常用的通配符是**%** , 在搜索串中,%表示任何字符出现任意次数。例如,为了找出所有学校中以北京开头的用户,可发布以下 SELECT 语句:

sql 复制代码
Select device_id,gender,age,university,gpa

From user_profile

Where university like '北京%'

在执行这条语句时,将检索任意以北京起头的词, **%表示"北京"之后多少字符都可以。**只要是以北京开头,就会被检索到。

通配符可在搜索模式中的任意位置使用,并且可以使用多个通配符。

相关推荐
IvorySQL2 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·2 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
野生技术架构师2 小时前
SQL语句性能优化分析及解决方案
android·sql·性能优化
IT邦德2 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫3 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i3 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.3 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn3 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露4 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot