SQL入门-SQL基础查询与排序

目录

SQL入门-SQL基础查询与排序

一、SELECT语句基础

1.1 从表中选取数据

1.2从表中选取符合条件的数据

1.3 相关法则

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

2.1 算术运算符

2.2 比较运算符

2.3 常用法则

三、逻辑运算符

3.1 NOT运算符

3.2 AND运算符和OR运算符

3.3 通过括号优先处理

3.4 真值表

3.5 含有NULL时的真值

练习题-第一部分

练习题1

练习题3

练习题4

四、对表进行聚合查询

4.1 聚合函数

4.2 使用聚合函数删除重复值

4.3 常用法则

五、对表进行分组

5.1 GROUP BY语句

5.2 聚合键中包含NULL时

5.3 GROUP BY书写位置

5.5 常见错误

六、为聚合结果指定条件

6.1 用HAVING得到特定分组

6.2 HAVING特点

七、对查询结果进行排序

7.1 ORDER BY

7.2 ORDER BY中列名可使用别名

练习题-第二部分

练习题6

练习题7


SQL入门-SQL基础查询与排序


一、SELECT语句基础

1.1 从表中选取数据

语法:

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

SELECT子句中列举了希望从表中查询出的列的名称,而FROM子句则指定了选取出数据的表的名称。

1.2从表中选取符合条件的数据

WHERE语句

语法:

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

1.3 相关法则

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

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

2.1 算术运算符

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

含义运算符
加法+
减法-
乘法*
除法/

2.2 比较运算符

SQL常见比较运算符如下:

运算符含义
=和~相等
<>和~不相等
>=大于等于~
>大于~
<=小于等于~
<小于~

2.3 常用法则

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

三、逻辑运算符

3.1 NOT运算符

想要表示“不是……”时,除了前文的<>运算符外,还存在另外一个表示否定、使用范围更广的运算符:NOT。

3.2 AND运算符和OR运算符

当希望同时使用多个查询条件时,可以使用AND或者OR运算符。

AND 相当于“并且”,类似数学中的取交集;

OR 相当于“或者”,类似数学中的取并集。

如下图所示:

AND运算符工作效果图

OR运算符工作效果图

3.3 通过括号优先处理

3.4 真值表

AND 运算符**:**两侧的真值都为真时返回真,除此之外都返回假。

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

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

真值表

查询条件为P AND(Q OR R)的真值表

3.5 含有NULL时的真值

NULL的真值结果既不为真,也不为假,因为并不知道这样一个值。

那该如何表示呢?

这时真值是除真假之外的第三种值——不确定(UNKNOWN)。一般的逻辑运算并不存在这第三种值。SQL 之外的语言也基本上只使用真和假这两种真值。与通常的逻辑运算被称为二值逻辑相对,只有 SQL 中的逻辑运算被称为三值逻辑。

三值逻辑下的AND和OR真值表为:

练习题-第一部分

练习题1

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

答案:

select product_name,regist_date from product WHERE regist_date > '2009-04-28';

练习题3

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

答案:

1.

select product_name,sale_price,purchase_price from product WHERE sale_price -500 > purchase_price;

2.

select product_name,sale_price,purchase_price from product WHERE sale_price > purchase_price+500;

练习题4

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

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

答案:

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

四、对表进行聚合查询

4.1 聚合函数

SQL中用于汇总的函数叫做聚合函数。以下五个是最常用的聚合函数:

  • COUNT:计算表中的记录数(行数)
  • SUM:计算表中数值列中数据的合计值
  • AVG:计算表中数值列中数据的平均值
  • MAX:求出表中任意列中数据的最大值
  • MIN:求出表中任意列中数据的最小值

-- 计算全部数据的行数(包含NULL) SELECT COUNT(*) FROM product;

-- 计算NULL以外数据的行数 SELECT COUNT(purchase_price) FROM product;

-- 计算销售单价和进货单价的合计值 SELECT SUM(sale_price), SUM(purchase_price) FROM product;

-- 计算销售单价和进货单价的平均值 SELECT AVG(sale_price), AVG(purchase_price) FROM product;

-- MAX和MIN也可用于非数值型数据 SELECT MAX(regist_date), MIN(regist_date) FROM product;

4.2 使用聚合函数删除重复值

-- 计算去除重复数据后的数据行数

SELECT COUNT(DISTINCT product_type) FROM product;

4.3 常用法则

  • COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。
  • 聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL。
  • MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。
  • 想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。
  • 在聚合函数的参数中使用DISTINCT,可以删除重复数据。

五、对表进行分组

5.1 GROUP BY语句

按照某列来汇总统计,语法:

SELECT <列名1>,<列名2>, <列名3>, …… FROM <表名> GROUP BY <列名1>, <列名2>, <列名3>, ……;

如图按照商品种类分组显示。

5.2 聚合键中包含NULL时

将NULL作为一组特殊数据进行处理

5.3 GROUP BY书写位置

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

1**.**SELECT → 2. FROM → 3. WHERE → 4. GROUP BY

其中前三项用于筛选数据,GROUP BY对筛选出的数据进行处理。

5.5 常见错误

在使用聚合函数及GROUP BY子句时,经常出现的错误有:

  1. 在聚合函数的SELECT子句中写了聚合健以外的列 使用COUNT等聚合函数时,SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名(也就是聚合键)。
  2. 在GROUP BY子句中使用列的别名 SELECT子句中可以通过AS来指定别名,但在GROUP BY中不能使用别名。因为在DBMS中 ,SELECT子句在GROUP BY子句后执行。
  3. 在WHERE中使用聚合函数 原因是聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,所以相互矛盾会引发错误。 如果想指定条件,可以在SELECT,HAVING(下面马上会讲)以及ORDER BY子句中使用聚合函数。

六、为聚合结果指定条件

6.1 用HAVING得到特定分组

将表使用GROUP BY分组后,怎样才能只取出其中两组?

这里WHERE不可行,因为,WHERE子句只能指定记录(行)的条件,而不能用来指定组的条件(例如,“数据行数为 2 行”或者“平均值为 500”等)。

可以在GROUP BY后使用HAVING子句。

HAVING的用法类似WHERE

6.2 HAVING特点

HAVING子句用于对分组进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名(聚合键)。

-- 数字

SELECT product_type, COUNT(*) FROM product GROUP BY product_type HAVING COUNT(*) = 2;

-- 错误形式(因为product_name不包含在GROUP BY聚合键中)

SELECT product_type, COUNT(*) FROM product GROUP BY product_type HAVING product_name = '圆珠笔';

七、对查询结果进行排序

7.1 ORDER BY

SQL中的执行结果是随机排列的,当需要按照特定顺序排序时,可使用ORDER BY子句。

语法:

SELECT <列名1>, <列名2>, <列名3>, …… FROM <表名> ORDER BY <排序基准列1>, <排序基准列2>, ……

默认为升序排列,降序排列为DESC

7.2 ORDER BY中列名可使用别名

前文讲GROUP BY中提到,GROUP BY 子句中不能使用SELECT 子句中定义的别名,但是在 ORDER BY 子句中却可以使用别名。为什么在GROUP BY中不可以而在ORDER BY中可以呢?

这是因为SQL在使用 HAVING 子句时 SELECT 语句的执行****顺序为:

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

其中SELECT的执行顺序在 GROUP BY 子句之后,ORDER BY 子句之前。也就是说,当在ORDER BY中使用别名时,已经知道了SELECT设置的别名存在,但是在GROUP BY中使用别名时还不知道别名的存在,所以ORDER BY中可以使用别名,但是在GROUP BY中不能使用别名****。

练习题-第二部分

练习题6

请编写一条SELECT语句,求出销售单价(sale_price列)合计值大于进货单价(purchase_price列)合计值1.5倍的商品种类。执行结果如下所示。

练习题7

此前我们曾经使用SELECT语句选取出了product(商品)表中的全部记录。当时我们使用了ORDERBY子句来指定排列顺序,但现在已经无法记起当时如何指定的了。请根据下列执行结果,思考ORDERBY子句的内容。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SQL(Structured Query Language)是一种用于管理关系型数据库的语言。它可以用于数据的提取、修改、删除和插入操作,使用户可以通过简单的语句来获取所需的数据。 从入门到实践,首先需要学习SQL的语法和基本概念。SQL语句通常由关键字、表名、字段、条件和函数等组成。了解这些基本要素可以帮助我们构建合适的查询语句。 在实践中,首先需要明确自己的查询目标。通过分析需求,确定需要查询的数据表、字段和条件。例如,如果我们想要查询一个员工表中的所有员工姓名和薪水,可以使用SELECT语句来实现: SELECT 员工姓名, 薪水 FROM 员工表; 在查询过程中,可以使用WHERE语句来添加筛选条件,以过滤满足特定条件的数据。例如,我们可以使用以下语句来查询薪水大于5000的员工: SELECT 员工姓名, 薪水 FROM 员工表 WHERE 薪水 > 5000; 此外,SQL还提供了一些聚合函数,如SUM、COUNT、AVG等,用于对数据进行统计和计算。例如,我们可以使用SUM函数来计算员工薪水的总和: SELECT SUM(薪水) as 总薪水 FROM 员工表; 学习SQL查询还需要了解连接查询排序、分组和子查询等高级技巧。通过掌握这些技巧,可以更灵活和高效地查询数据库中的数据。 总之,从入门到实践,学习SQL查询需要掌握SQL语法、基本概念,并进行大量的实践。通过不断的练习和实践,我们可以逐渐提升自己在SQL查询中的技能和经验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值