一、基础查询
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 '北京%'
在执行这条语句时,将检索任意以北京起头的词, **%表示"北京"之后多少字符都可以。**只要是以北京开头,就会被检索到。
通配符可在搜索模式中的任意位置使用,并且可以使用多个通配符。