【牛客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 '北京%'

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

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

相关推荐
言之。9 分钟前
Redis 集群方案
java·数据库·redis
tian-ming36 分钟前
黑马点评——基于Redis
数据库·redis·缓存
m0_7482365839 分钟前
Django 后端数据传给前端
前端·数据库·django
go546315846544 分钟前
磁盘调度算法
服务器·数据库·算法
小蒜学长1 小时前
基于Spring Boot的宠物领养系统的设计与实现(代码+数据库+LW)
java·前端·数据库·spring boot·后端·旅游·宠物
m0_748244962 小时前
保姆级JavaWeb项目创建、部署、连接数据库(tomcat)
数据库·tomcat·firefox
2303_763799562 小时前
MySQL数据库函数——日期函数
数据库
张声录13 小时前
【ETCD】【实操篇(十九)】ETCD基准测试实战
java·数据库·etcd
鱼香鱼香rose3 小时前
面经hwl
java·服务器·数据库
m0_748254663 小时前
完美解决phpstudy安装后mysql无法启动
数据库·mysql