基础查询与排序

本文介绍了SQL的基本查询语句,如创建表、插入数据、筛选与分组,以及使用关键字如DISTINCT、AS别名、逻辑运算符等。通过实例演示了如何选择商品信息,包括日期范围筛选、价格比较和特定条件下的利润计算。同时涵盖了聚合函数和分组操作的应用。
摘要由CSDN通过智能技术生成

查询

一般我们以关键字

SELECT 列名 FROM 表名 WHERE 条件。

来进行查询该表的数据。还有其他关键字,将在下面开始介绍。

首先我们创建表

CREATE TABLE product
(product_id CHAR(4) NOT NULL,
 product_name VARCHAR(100) NOT NULL,
 product_type VARCHAR(32) NOT NULL,
 sale_price INTEGER ,
 purchase_price INTEGER ,
 regist_date DATE ,
 PRIMARY KEY (product_id));

接下来往表里加入数据

INSERT INTO product VALUES('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');
INSERT INTO product VALUES('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');
INSERT INTO product VALUES('0003', '运动T恤', '衣服', 4000, 2800, NULL);
INSERT INTO product VALUES('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');
INSERT INTO product VALUES('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO product VALUES('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');
INSERT INTO product VALUES('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');
INSERT INTO product VALUES('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');

我们查看已经加入的数据:

在这里插入图片描述

先了解一些规则

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

现在开始,我们可以进行基本的语法进行操作数据表了!!!

  • 首先我们将需要找的列用关键字 AS 起别名;
SELECT product_id AS id,
       product_name AS name,
       purchase_price AS "进货单价"
  FROM product;

在这里插入图片描述

  • 用关键字 DISTINCT 消除某列相同的数据;
SELECT DISTINCT product_type
  FROM product;

在这里插入图片描述

  • 需知道 SELECT 和 WHERE 都可以使用常数或表达式;
SELECT product_name, sale_price, sale_price * 2 AS "sale_price x2"
  FROM product
 WHERE sale_price-purchase_price >= 500;

在这里插入图片描述

  • 用逻辑运算符 NOT、AND、OR 进行判断,优先级依次降低
SELECT product_name, product_type, regist_date
  FROM product
 WHERE product_type = '办公用品'
   AND (regist_date = '2009-09-11' OR regist_date = '2009-09-20');

在这里插入图片描述

练习题

编写一条SQL语句,从 product(商品) 表中选取出“登记日期(regist)在2009年4月28日之后”的商品,查询结果要包含 product nameregist_date 两列。

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

在这里插入图片描述

请说出对 product 表执行如下3条SELECT语句时的返回结果。

SELECT *
  FROM product
 WHERE purchase_price = NULL;

False!!!

SELECT *
  FROM product
 WHERE purchase_price <> NULL;

False!!!

SELECT *
  FROM product
 WHERE product_name > NULL;

False!!!
都是错的!!!

代码清单2-22(2-2节)中的SELECT语句能够从product表中取出“销售单价(saleprice)比进货单价(purchase price)高出500日元以上”的商品。请写出两条可以得到相同结果的SELECT语句。执行结果如下所示。

product_name | sale_price | purchase_price 
-------------+------------+------------
T恤衫         |   1000    | 500
运动T恤       |    4000    | 2800
高压锅        |    6800    | 5000

第一种方法:
SELECT product_name, sale_price, purchase_price
FROM product
WHERE sale_price - purchase_price > 500
ORDER BY sale_price;

第二种方法:
SELECT product_name, sale_price, purchase_price
FROM product
WHERE NOT sale_price - purchase_price <= 500
ORDER BY sale_price;

在这里插入图片描述

请写出一条SELECT语句,从product表中选取出满足“销售单价打九折之后利润高于100日元的办公用品和厨房用具”条件的记录。查询结果要包括product_name列、product_type列以及销售单价打九折之后的利润(别名设定为profit)。

提示:销售单价打九折,可以通过saleprice列的值乘以0.9获得,利润可以通过该值减去purchase_price列的值获得。

SELECT product_name, product_type, sale_price * 0.9 AS profit
FROM product
WHERE (product_type = '办公用品' OR product_type = '厨房用具') 
AND ((sale_price * 0.9 - purchase_price ) > 100);

在这里插入图片描述

  • 聚合函数 COUNT、SUM、AVG、MAX、MIN 的使用;
SELECT SUM(sale_price), SUM(DISTINCT sale_price)
 FROM product;
  • 分组函数 GROUP BY;
SELECT product_type, COUNT(*)
  FROM product
 GROUP BY product_type;

在这里插入图片描述

  • HAVING 与 WHERE 类似,用于对分组进行过滤;
SELECT product_type, COUNT(*)
  FROM product
 GROUP BY product_type
HAVING COUNT(*) = 2;

!!!
GROUP BY的子句书写顺序有严格要求,不按要求会导致SQL无法正常执行,目前出现过的子句顺序为:

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。

排序

使用 ORDER BY 可对搜索结果进行排序。

默认为升序
SELECT product_id, product_name, sale_price, purchase_price
  FROM product
 ORDER BY sale_price ASC;

降序
SELECT product_id, product_name, sale_price, purchase_price
  FROM product
 ORDER BY sale_price DESC;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值