【初入DW之SQL基础查询(1)】

本文介绍了SQL的基础查询,包括SELECT语句的WHERE子句、算术和比较运算符以及逻辑运算符的使用。通过示例代码展示了如何筛选符合条件的数据,如使用WHERE、NOT、AND和OR运算符。还强调了NULL值在逻辑运算中的特殊性及其处理方式。

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

今天是SQL组队学习的第三天,我将对SQL基础查询的部分学习做一些记录。

一、SELECT语句基础

从表中选取数据时需要使用SELECT语句,也就是只从表中选出(SELECT)必要数据的意思。通过SELECT语句查询并选取出必要数据的过程称为匹配查询或查询(query)。

SELECT <列名>, 
  FROM <表名>;

1.WHERE语句(从表中选取符合条件的数据)

SELECT 语句通过WHERE子句来指定查询数据的条件。在WHERE 子句中可以指定“某一列的值和这个字符串相等”或者“某一列的值大于这个数字”等条件。执行含有这些条件的SELECT语句,就可以查询出只符合该条件的记录了。

SELECT <列名>, ……
  FROM <表名>
 WHERE <条件表达式>;

示例代码,在表product中,两种选择语句,找出product_tyle = ‘衣服’的列
表product
代码部分:

-- 用来选取product type列为衣服的记录的SELECT语句
SELECT product_name, product_type
  FROM product
 WHERE product_type = '衣服';
-- 也可以选取出不是查询条件的列(条件列与输出列不同)
SELECT product_name
  FROM product
 WHERE product_type = '衣服';

输出结果:
输出结果为两列
输出结果为一列
由上图可以看出最终的输出结果由select语句决定,后面有几个列名,在约束条件下就输出几列。

2.相关法则

星号()代表全部列的意思。
SQL中可以随意使用换行符,不影响语句执行(但不可插入空行)。
设定汉语别名时需要使用双引号(“”)括起来。
在SELECT语句中使用DISTINCT可以删除重复行。
注释是SQL语句中用来标识说明或者注意事项的部分。分为1行注释"-- “和多行注释两种”/
*/"。

-- 想要查询出全部列时,可以使用代表所有列的星号(*)。
SELECT *
  FROM <表名>;
-- 想要查询出全部列时,可以使用代表所有列的星号(*)。
select*FROM product;
-- SQL语句可以使用AS关键字为列设定别名(用中文时需要双引号(“”))。
SELECT product_id     As id,
       product_name   As name,
       purchase_price AS "进货单价"
  FROM product;
-- 使用DISTINCT删除product_type列中重复的数据
SELECT DISTINCT product_type
  FROM product;

运行结果:
SELECT*FRON<表名>
设定别名
使用DISTINT删去重复的数据

二、算术运算符和比较运算符

1.算数运算符

SQL语句中可以使用的四则运算的主要运算符如下:
算术运算符

2.比较运算符

SQL常见比较运算符如下:
比较运算符
代码示例:

-- 选取出sale_price列为500的记录
SELECT product_name, product_type
  FROM product
 WHERE sale_price = 500;

对product表中的sale_price列的数据进行比较运算。

3.常用法则

SELECT子句中可以使用常数或者表达式。
使用比较运算符时一定要注意不等号和等号的位置。
字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。
希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。
相关代码如下:

-- SQL语句中也可以使用运算表达式
SELECT product_name, sale_price, sale_price * 2 AS "sale_price x2"
  FROM product;
-- WHERE子句的条件表达式中也可以使用计算表达式
SELECT product_name, sale_price, purchase_price
  FROM product
 WHERE sale_price - purchase_price >= 500;
/* 对字符串使用不等号
首先创建chars并插入数据
选取出大于‘2’的SELECT语句*/
-- DDL:创建表
CREATE TABLE chars
(chr CHAR3NOT NULL, 
PRIMARY KEY(chr));
-- 选取出大于'2'的数据的SELECT语句('2'为字符串)
SELECT chr
  FROM chars
 WHERE chr > '2';
-- 选取NULL的记录
SELECT product_name, purchase_price
  FROM product
 WHERE purchase_price IS NULL;
-- 选取不为NULL的记录
SELECT product_name, purchase_price
  FROM product
 WHERE purchase_price IS NOT NULL;

运行结果如下:
在这里插入图片描述
在这里插入图片描述
chars表
选出大于'2'的语句,字符串
选取product表中为null的记录
选取不为NULL的记录

三、逻辑运算符

1.NOT运算符

SELECT product_name, product_type, sale_price
  FROM product
 WHERE sale_price >= 1000;

在这里插入图片描述

SELECT product_name, product_type, sale_price
  FROM product
 WHERE NOT sale_price >= 1000;

在这里插入图片描述
可以看出,通过否定销售单价大于等于 1000 日元 (sale_price >= 1000) 这个查询条件,选取出了销售单价小于 1000 日元的商品。也就是说 NOT sale_price >= 1000 与 sale_price < 1000 是等价的。
但值得注意的是,虽然通过 NOT 运算符否定一个条件可以得到相反查询条件的结果,但是其可读性明显不如显式指定查询条件,因此,不可滥用该运算符。

2.AND运算符和OR运算符

AND相当于交集,OR相当于取并集。
例子,还是来源于上面的product表,假如要查找这样一个商品
“商品种类为办公用品”并且“登记日期是 2009 年 9 月 11 日或者 2009 年 9 月 20 日” 理想结果为“打孔器”,但当你输入以下信息时,会得到错误结果

-- 将查询条件原封不动地写入条件表达式,会得到错误结果
SELECT product_name, product_type, regist_date
  FROM product
 WHERE product_type = '办公用品'
   AND regist_date = '2009-09-11'
    OR regist_date = '2009-09-20';

结果为:
在这里插入图片描述
可以看见上面的输出结果是登记日期为2009-9-11的办公用品和所有登记日期为2009-9-20的商品。
这是因为AND运算符优先与OR运算符,想要优先执行OR运算,可以使用括号(正确代码如下):

-- 通过使用括号让OR运算符先于AND运算符执行
SELECT product_name, product_type, regist_date
  FROM product
 WHERE product_type = '办公用品'
   AND ( regist_date = '2009-09-11'
        OR regist_date = '2009-09-20');

这样会得到理想的输出结果:在这里插入图片描述
真值表
当碰到条件较复杂的语句时,理解语句含义并不容易,这时可以采用真值表来梳理逻辑关系。
AND 运算符两侧的真值都为真时返回真,除此之外都返回假。

OR 运算符两侧的真值只要有一个不为假就返回真,只有当其两侧的真值都为假时才返回假。

NOT运算符只是单纯的将真转换为假,将假转换为真。
真值表

查询条件为P AND(Q OR R)的真值表
含有NULL的真值
NULL的真值结果既不为真,也不为假,因为并不知道这样一个值,即不确定。
这时真值是除真假之外的第三种值——不确定(UNKNOWN)。一般的逻辑运算并不存在这第三种值。SQL 之外的语言也基本上只使用真和假这两种真值。与通常的逻辑运算被称为二值逻辑相对,只有 SQL 中的逻辑运算被称为三值逻辑。
在这里插入图片描述

四、练习题

在这里插入图片描述

SELECT product_name, regist_date
  FROM product
 WHERE regist_date > '2009-04-28';

运行结果:
在这里插入图片描述
在这里插入图片描述
代码如下:

SELECT product_name,sale_price,purchase_price
  FROM product
 WHERE sale_price-purchase_price >= 500;
SELECT product_name,sale_price,purchase_price
  FROM product
 WHERE NOT sale_price-purchase_price < 500;

结果如下:在这里插入图片描述
在这里插入图片描述
代码如下:

SELECT product_name,product_type,sale_price*0.9 AS profit
FROM product
WHERE sale_price*0.9 - purchase_price >100;

输出结果:
在这里插入图片描述
疑惑点:
在这里插入图片描述
三块命令的运行结果均为:在这里插入图片描述
这是因为NULL只能通过is null或者is not null来判断,其他操作符与null操作都是false,查不出有关null的记录,而对上述代码进行修改后
代码:

SELECT *
  FROM product
 WHERE purchase_price IS NULL;

结果:
在这里插入图片描述
代码:

SELECT *
  FROM product
 WHERE purchase_price IS NOT NULL;

结果:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值