SQL基础系列(二)——单表查询

本文以单表查询为边界,介绍如何对一张表进行简单查询、限制条件查询、结果排序等内容。每种情况均有例句和补充说明。

如想看更多示例,请移步《SQL基础教程(第二版)》-MICK(如需电子版,可留邮箱)

目录

1.简单查询

1.1查询表中所有数据

1.2查询数据表中指定的列

1.3删除列中重复数据 

1.4为列设置别名

1.5 对列表中的数据进行计算

1.6 常用统计函数

2.限制条件查询

2.1WHERE子句运算符

2.2条件句中的比较运算

2.3条件句中的逻辑运算

3.排序

4.数据库执行顺序


1.简单查询

简单查询的基础语句是:

SELECT <列名> FROM <表名>;

基础语句的含义是:从<表名>中取出某列数据。

注:SELECT和FROM使用大小写均可,本文讲解中统一使用大写。

1.1查询表中所有数据

SELECT * FROM <表名>;

注释:

  • *代表列表中所有列名
  • 查询结果为数据表中所有的数据内容。

1.2查询数据表中指定的列

SELECT  <列名1> ,<列名2>, <列名3> ,<列名4> 

FROM <表名>;

注释:

  • 列名之间需要用英文逗号(,)隔开
  • 可查询多列数据,按照语句中列的顺序进行展示;

1.3删除列中重复数据 

SELECT DISTINCT product_type

FROM Product;

注释:

  • 使用 SELECT DISTINCT ,查询结果中仅展示去重后的数据;
  • 如果数据中存在空值(null),那么空值也会进行去重,查询结果中展示一个空值;
  • SELECT DISTINCT 后可跟多列,如SELECT DISTINCT A,B ,则当多行数据比较中,A字段和B字段的值均一致,才进行去重;
  • 引申用法:统计不重复的数据,可用COUNT(DISTINCT A);

1.4为列设置别名

SELECT  product_id AS id ,

                porduct_name AS name,

                porduct_price AS price 

FROM product;

注释:

  • 设置别名是为了查看查询结果时更清晰;
  • 设置英文别名时,直接写别名,不需要使用引号;
  •  AS可以写,也可以省略;

1.5 对列表中的数据进行计算

SELECT product_name, sale_price,sale_price-purchase_price AS profit

FROM Product;

 注释:

  • 在SELECT子句中,可使用四则运算符进行数据计算,计算结果作为一列新的数据;
  • 四则运算符:加+减-乘*除/
  • 括号:在计算时可以使用括号(),标识计算的优先顺序。比如(sale_price-purchase_price)*3
  • 计算出的列可赋予一个别名便于理解,如示例中的profit
  • NULL:如果数据为空,则对null值进行的任何计算,结果都为null

1.6 常用统计函数

本部分仅介绍常用的统计函数及其用法。

SELECT count(*) FROM Product;

注释:

  • 在不使用分组(GROUP BY)的情况下,SELECT后跟统计函数时,不能同时跟其他字段,因为统计函数和一个具体的字段无法对应。
  • SELECT后可跟多个统计函数。

常用函数:

  •  AVG(表达式) 返回表达式中所有的平均值。仅用于数字列并自动忽略NULL值。
  • COUNT(表达式) 返回表达式中非NULL值的数量。可用于数字和字符列。
  • COUNT(*) 返回表中的行数(包括有NULL值的列)。
  • MAX(表达式) 返回表达式中的最大值,忽略NULL值。可用于数字、字符和日期时间列。
  • MIN(表达式) 返回表达式中的最小值,忽略NULL值。可用于数字、字符和日期时间列。
  • SUM(表达式) 返回表达式中所有的总和,忽略NULL值。仅用于数字列

更多函数可参考SQL函数大全及示例汇总 

2.限制条件查询

 限制条件查询的基础语句是:

SELECT <列名> FROM <表名>

WHERE 条件;

限制条件查询,是在查询时增加过滤条件,查询结果中仅展示符合过滤条件的数据。 在本章节主要介绍如何写WHERE条件。

2.1WHERE子句运算符

在WHERE条件句中,条件的书写需要用到运算符。本处罗列常用运算符,下文会讲解每个运算符的用法。

运算符符号描述
比较运算符>,<,>=,<=,=,<>,!=<>,!=均为不等于
判断是否为空IS NULL,IS NOT NULL判断某列内容是否为空
逻辑运算符AND,OR

均用于有多个条件时

AND表示条件需要同时满足;

OR表示多个条件满足一个即可;

逻辑运算符NOT表示“非”,如年纪不大于30,工资不小于10000;
范围查询BETWEEN 最小值 AND 最大值最小值<=结果<=最大值
列表范围查询IN指定查询范围
模糊查询LIKE对指定的字段进行模糊查询

2.2条件句中的比较运算

(1)对数字进行比较

SELECT name,price

FROM Product

WHERE price > 500;

注释:

  •  在对数字类型的数据进行比较时可用到所有的比较运算符:>,<,>=,<=,=,<>,!=
  • 在数据为NULL时,无法判断是否符合条件,因此结果中不会进行展示。
  • 在WHERE子句表达式中,可以运用算式,示例如下:

SELECT name,price

FROM Product

WHERE price-purchase_price > 500;

(2)对字符串进行比较

SELECT name,price

FROM Product

WHERE name='百事可乐'

注释:

  • 对字符串进行比较,常用“=”
  • 字符串的值需要用‘ ’标识
  • 判断数据为空,不能用=,需要用IS NULL,下文会提及

(3)BETWEEN AND

SELECT name,price

FROM Product

WHERE price BETWEEN 100 AND 200;

注释:

  • 查找处于某个区间的数据时,可以使用BETWEEN AND,小值<=目标值<=大值。
  • BETWEEN  小值 AND 大值,其中,小值和大值的位置不可颠倒;
  • 可用于日期判断;

2.3条件句中的逻辑运算

(1)判断是否为空

SELECT name,price

FROM Product

WHERE price IS NULL;

注释:

  • 查找为空的数据时,使用IS NULL,查找不为空的数据时,使用IS NOT NULL;

(2)NOT运算符

SELECT name,price

FROM Product

WHERE NOT price >100;

注释:

  • NOT表示否定条件,直接放在WHERE后使用;
  • 不使用NOT也能获得一样的查询结果,比如条件子句WHERE NOT price <=100 替换上例中的子句,能得到一样的效果。

(3)IN

SELECT name,price

FROM Product

WHERE name in ('玩具','薯条','面包');

注释:

  • 使用IN查找指定范围内的数据;
  • 数据类型如果是字符或者日期,需要用'',数据类型如果是数字,则不需要使用引号;
  • 如果想要查询某个数据不在取值范围内,使用WHERE name NOT IN  ('玩具','薯条','面包')
  • 取值范围中不能有NULL;

(4)模糊查询:LIKE,NOT LIKE

SELECT name,price

FROM Product

WHERE name LIKE '%具';

注释:

  • LIKE用于模糊查询;
  • LIKE后必须加'',数字及日期的数据进行模糊查询时,LIKE 后均需加'';
  • %表示任意类型和长度的字符(0位,1位或多位);
  • 下划线_表示1位字符,条件子句可以写为:WHERE name LIKE '_具';
  • '%%'代表查询全部;

 (5)多条件查询:AND ,OR

SELECT name,price FROM Product

WHERE name LIKE '%具'

AND price>=100;

注释:

  • AND相当于‘并且’,OR相当于或者;
  • 同时使用多个AND和OR时,AND运算符优先于OR运算符;
  • 使用括号:WHERE (name LIKE '%具' OR date>'2012-01-01') AND price>=100; 

3.排序

SELECT name,price FROM Product

WHERE name LIKE '%具'

AND price>=100

ORDER BY price;

注释:

  • 不使用ORDER BY,展示结果的排序是随机的;
  • ORDER BY进行排序时,结果默认由低到高进行排序(升序排序),同ORDER BY XX ASC;
  • ORDER BY XX DESC,结果默认由高到低进行排序(降序排序);
  • ORDER BY 后可以跟多排序列,默认先按照左边排序列进行排序,数据一致时按照左边第二个排序列排序。(ORDER BY XX,YY)或(ORDER BY XX DESC, YY ASC);
  • 对NULL值排序时,由于NULL无法和其他字符、数字比较大小,所以默认展示在最前或最后;
  • 别名:在设定排序列时,可以使用列的别名。
  • 排序列的范围:(1)可以对表中任意一列进行排序,并不限制SELECT后使用的字段列,(2)使用SELECT后的统计函数列排序,即在使用GROUP BY 进行分组统计时,可按照统计函数值进行排序(后续讲GROUP BY 会再举例)。

4.数据库执行顺序

本文共涉及三个子句,分别是SELECT\FROM\WHERE\ORDER BY,在数据库执行的时候,执行顺序是FROM>WHERE>SELECT>ORDER BY。即:1.先取表里的数据,2.按照条件筛选数据,3.筛选选定的列或者统计的内容,4.对最终结果进行排序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值