最全最易理解的数据库查询教程

检索数据表中一个字段的内容

我们将从最简单的 SELECT 语句开始学习。

语法规则为:

SELECT 字段名 FROM 表名 

举个例子
我们想从表 Customers 中得到 cust_name 字段所有的内容,即所有人的姓名。表 Customers 的内容如下图所示:
在这里插入图片描述
输入:

SELECT cust_name
FROM Customers

输出:

在这里插入图片描述
我们成功从表 Customers 中检索到了字段 cust_name 的内容。

检索数据表中多个字段的内容

如果我想检索更多的字段呢?当然可以做到,而且语法结构与检索单个字段的内容类似,只需要你把想要检索的字段,统统放到 SELECT 后面就可以了,记得要加逗号隔开。

语法规则为:

SELECT 字段名1, 字段名2, 字段名3 FROM 表名 

举个例子
我们想从表 Customers 中得到 cust_id 和 cust_name 字段所有的内容。

输入:

SELECT cust_id, cust_name
FROM Customers

输出:
在这里插入图片描述
可以看到,我们成功从表 Customers 中检索到了字段 cust_id 和 cust_name 的内容。

检索数据表中所有字段的内容

如果我想检索一张表内的所有字段呢?是不是需要我把字段一个一个列出来呀?如果我不记得字段都有哪些了怎么办呢?当然有解决办法!
我们可以通过在 SELECT 语句后使用 * 来返回表内所有字段的内容。

语法规则为:

 SELECT * FROM 表名 

举个例子
我们想从表 Customers 中得到所有字段的内容。

输入:

SELECT *
FROM Customers

输出:
在这里插入图片描述

带限制条件的查询

SELECT 语句可以帮你返回所有匹配的内容,甚至整张表的内容。但是如果你仅仅是想要第一行的数据或者前几行的数据怎么办呢?好消息是我们可以通过限制条件来查询,不过限制条件的语法在各个数据库中的语法是不同的。在 SQL Server 中:

语法规则为:

SELECT TOP 行数 字段名 FROM 表名

举个例子
我们想从表 Customers 中得到 cust_name 字段的前 3 行内容。表 Customers 的内容如下图所示:

在这里插入图片描述

输入:

SELECT TOP 3 cust_name
FROM Customers

输出:

在这里插入图片描述

当然,如果你使用的是 MYSQL 或者其他数据库,语法可不一样啊,你得去问 google 咯-

表达式查询

有时候,你并不想知道某个字段的内容,而是想知道经过处理后的内容。这种情况有很多。比如,你想知道这一批的书打6折后都是多少钱?你想知道字段 A 和字段 B 加起来是多少?这是可以做到的,我们可以使用表达式查询来达到此目的。

语法规则为:

 SELECT 包含字段名的表达式 AS 新字段名 FROM 表名

其中,表达式计算的结果会放在新字段名下面,但是新字段名并没有存储在表中,而是暂时把结果返回给你,供你参考。

举个例子
我们想从把表 Customers 中每位消费者的 cust_id 都 +1 。表 Customers 的内容与上例的相同。

输入:

SELECT cust_id, cust_id+1 as new_cust_id
FROM Customers

输出:
在这里插入图片描述

使用 WHERE 语句和逻辑表达式

下表为与 WHERE 语句搭配的操作符列表:
在这里插入图片描述

使用WHERE语句检索单范围数据

如果你想在房屋中介数据库中,寻找小于100万的房子,你应该怎么做?你是不是很自然的就想到了要用操作符 < 的。

让我们举个例子来看看,检索单范围数据是怎么实现的:

我们想从表 Customers 中找到消费大于 1000 的人。表 Customers 的内容如下图所示:
在这里插入图片描述
输入:

SELECT cust_name, cost
FROM Customers
WHERE cost > 1000

输出:
在这里插入图片描述
不仅是 > ,其他操作符 < , <= , >= , !< , !> 的使用方法也是一样的。

使用WHERE语句检索双范围数据

还有一种情况,就是你心目中有一个理想的区间范围。比如你想买房,不能太便宜,因为便宜的有可能又小又偏僻,也不能太贵,因为。。。呵呵大家懂的。这时候,你就需要划定一个范围,SQL 很贴心的为大家提供了自然语言关键字,用来划定数字的范围。

语法规则为:

WHERE 字段名 BETWEEN 数字1 AND 数字2

举个例子
我们想从表 Customers 中找到消费在 1000~3000 之间的人。表 Customers 的内容和上例相同。

输入:

SELECT cust_name, cost
FROM Customers
WHERE cost BETWEEN 1000 AND 3000

输出:
在这里插入图片描述
Tips:
注意,使用 BETWEEN…AND… 时一定要记住较小的数在前边,较大的数在后边!

使用WHERE语句检索不匹配某条件的语句

有很多人可能有过这样的感觉,问你想要什么样的男/女朋友,你可能说想要这样的,那样的,好像都不错,看感觉吧。虽然你可能不知道你最想要什么,但是你一定知道你不想要什么。

SQL 语句也一样,它为你提供了选择不想要什么的机会。

举个例子
我们想从表 Customers 中找到消费者不在 New York 的人。表 Customers 的内容和上例相同。

输入:

SELECT cust_name, cust_city
FROM Customers
WHERE cust_city <> 'New York'

输出:
在这里插入图片描述
Tips:
注意,在SQL Server 中,不等于只能用 <> 符号,不能使用 != 符号。

使用通配符[]模糊匹配数据内容

通配符 [] 是个中括号,一看就知道里面是应该放点什么内容,放点什么呢?它又有什么作用呢?

[] 用于将一组字符囊括在内,这一组字符之间是或的关系,而通配符 [] 出现的位置也严格匹配于括号中出现的字符在整个字符串中的位置。

是不是有点抽象?一会儿我们举个例子你就明白了,先来看看语法吧。

语法规则为:

 SELECT 字段名 
 FROM 表名  
 WHERE  字段名 LIKE '[数据]' 

举个例子
我们想从表 Customers 中,检索到所有 cust_name 以 a 和 t 开头的消费者的所有数据。表 Customers 的内容如下图所示:
在这里插入图片描述
输入:

SELECT *
FROM Customers
WHERE cust_name LIKE '[at]%'

输出:
在这里插入图片描述
分析:
我们在语法中加入了通配符 % 。因为通配符 [] 中出现的只能是有或关系的 单字符 。所以除非你想检索的是单字符,否则不加 % 的话,你将检索不到任何内容。

Tips:
注意,通配符中的字符大小写不敏感 !

使用通配符[]和^模糊匹配取反的数据内容

我们还可以对检索内容进行“取反”。使用符号 ^ 后,我们可以成功的检索到 [] 中没出现的字符。

语法规则为:

SELECT 字段名 
 FROM 表名  
 WHERE  字段名 LIKE '[^数据]' 

举个例子
我们想从表 Customers 中,检索到所有 cust_name 不是以 a 和 t 开头的消费者的所有数据。表 Customers 的内容如下图所示:
在这里插入图片描述
输入:

SELECT *
FROM Customers
WHERE cust_name LIKE '[^at]%'

输出:
在这里插入图片描述
分析:
当然,你也可以使用 NOT 操作符来得到相同的结果。相比来说,^ 唯一的好处就是简化了 WHERE 语句的语法。

举个例子

SELECT *
FROM Customers
WHERE NOT cust_name LIKE '[at]%'

使用通配符_模糊匹配数据内容

另一个很实用的通配符是下划线 _ ,它的使用规则与 % 类似,唯一与 % 不同的是:% 能匹配多个字符,而 _ 只能匹配一个字符!

语法规则为:

SELECT 字段名 
 FROM 表名  
 WHERE  字段名 LIKE '数据和_的组合' 

举个例子
我们想从表 Customers 中检索到 cust_id 尾数只有个位数的消费者的所有数据。表 Customers 的内容如下图所示。大家可以看到,我们只有一个 cust_id 尾数为两位数的消费者 Sol Pozo ,该如何撇开它呢?在这里插入图片描述

输入:

SELECT *
FROM Customers
WHERE cust_id LIKE '100000000_'

输出:
在这里插入图片描述
在这个例子里,通配符 _ 只匹配到了一个字符,那如果想匹配多个连起来的字符呢?那就把通配符 _ 连起来!

使用通配符%模糊匹配数据内容的后半部分

在所有通配符中,最常用的通配符要数 % 了。使用了 % 就意味着,你能从现有的数据中匹配到任意个数的字符(注意,可以是不止一个字符哟)。

语法规则为:

SELECT 字段名 
 FROM 表名  
 WHERE  字段名 LIKE '数据%'; 

举个例子
我们想从表 Customers 中检索到所有叫 Alice 的消费者的所有数据。表 Customers 的内容如下图所示。大家可以看到,我们有 Alice Nicholas 和 Alice Edwards 两个都叫 Alice 的人,该如何做才能同时匹配到他们两个呢?

在这里插入图片描述

输入:

SELECT *
FROM Customers
WHERE cust_name LIKE 'Alice%'

输出:

在这里插入图片描述
在这个例子里,我们使用了模糊匹配模式 Alice% ,运行后,数据库会检索出所有以 Alice 为开头的字符串来,无论 Alice 后有多长的字符串数据库都能检索出来。

Tips:
注意,模式匹配是大小写敏感的!如果你检索的是 alice% ,那就什么都检索不到了!

使用通配符%模糊匹配数据内容的任意部分

如果,你想检索的内容既不在字符串的头部,也不在字符串的尾部,而是在它们的中间,你该如何检索呢?

举个例子
我们想从表 Customers 中得检索到所有拥有 yahoo 邮箱的消费者的所有数据。表 Customers 的内容如下图所示:
在这里插入图片描述
如果我们还按刚才的方法,看看我们能检索到什么?

输入:

SELECT *
FROM Customers
WHERE cust_email LIKE 'yahoo%'

输出:

在这里插入图片描述
啊哦!什么都没检索到!那是因为, yahoo% 模式严格匹配的是以 yahoo 开头的字符串。而大家可以看到,在我们的例子中,包含 yahoo 字符串的邮箱地址是以不同名字作为字符串开头的。

所以,要想匹配到五花八门的名字,我们需要把它们都变成通配符 % 。

输入:

SELECT *
FROM Customers
WHERE cust_email LIKE '%yahoo%'

输出:
在这里插入图片描述
想象一下,如果你在 cust_email 中检索 a%m ,会得到什么样的结果?

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值