Sql小白入门(五)查询语句
来源:互联网 发布:合肥万户网络 编辑:程序博客网 时间:2024/06/06 03:21
上篇文章,我们讲解了CRUD操作,其中增加(Create)、更新(Update)和删除(Delete)操作比较简单,唯独查询(Retrieve)比较复杂!上篇文章也只是简单的介绍了查询操作。所以,今天特地将复杂查询操作的相关语句整理总结。
看过上篇文章后,我们都知道查询操作,主要使用的命令是
SELECT 列名称 FROM 表名称或者
SELECT * FROM 表名称那么今天我们就要介绍的是查询的条件语句,即WHERE语句。下面开始文章!
1.WHERE。
用于有条件的从表中选取数据!
语法
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值下面的运算符可在 WHERE 子句中使用:
注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
PS:
(1).BETWEEN
操作符BETWEEN用于寻找位于一个给定最大值和最小值之间的值,这个最大值和最小值是包含在内的。这些值可以是日期、文本和数值。
语法
SELECT column_name(s)FROM table_nameWHERE column_nameBETWEEN value1 AND value2
例如,想要查找students表中‘age’位于19到21之间的所有记录,语句该怎么写呢?思考一下哦!请看截图中的命令以及结果。
(2).IN。
IN 操作符用于把一个值与一个指定列表进行比较,当被比较的值至少与列表中的一个值想匹配时,它会返回true。
语法
SELECT column_name(s)FROM table_nameWHERE column_name IN (value1,value2,...)例如,想要查找students表中‘age’等于19、21或22的记录,语句该怎么写呢?知道怎么写吗?请看截图中的命令以及结果。
使用操作符IN 可以得到与操作符OR一样的结果,但它的速度更快。
(3).LIKE。
LIKE 操作符利用通配符把一个值与类似的值进行比较,通配符有两个:
百分号(%)和下划线(_)。
百分号代表零个、一个或多个字符,下划线代表一个数字或字符。这些符号可以复合使用。
例如下面演示的查询语句,
事例:
(1).想要查询students表中‘age’大于20的所有记录,那么查询语句如何写呢?
select * from students where age>20;最终结果如下所示,
(2).想要查询students表中'sex'为‘nan’的所有记录,那么查询语句如何写呢?
select * from students where sex='nan';最终结果如下所示,
PS:引号的使用
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
2.复杂语句。
(1).AND 和 OR 运算符。
AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
事例:
想要查询students表中'sname'等于‘zhangsan’并且'sex'为‘nan’的记录,那么查询语句如何写呢?
select * from students where sname='zhangsan' and sex='nan';
结果如图所示,
想要查询students表中'sname'等于‘zhangsan’或者'sname'为‘wangwu’的记录,那么查询语句如何写呢?
select * from students where sname='zhangsan' and sname='wangwu';
结果如图所示,
(2).ORDER BY
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。如果对输出为字符的结果进行排序,升序就是A到Z的次序,降序是以Z到A的次序,显示字符结果。对于数字值来说,升序是从1到9,降序是从9到1。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
事例:
想要查询出来的结果按照‘age’升序排序,要输入什么语句呢?
select * from studnets order by age ;查询结果如下图所示,
想要查询出来的结果按照‘age’降序排序,要输入什么语句呢?
select * from studnets order by age desc ;查询结果如下图所示,
(3).GROUP BY 。
语句用于结合合计函数,根据一个或多个列对结果集进行分组。
语法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name
(4).HAVING 子句。
SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
语法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_nameHAVING aggregate_function(column_name) operator value
3.常用函数。
(1).count()。
count()函数用来完成统计工作!
语法如下:
select count(*) from table_name;
count()函数使用一对圆括号来指定目标字段,或是一个星号表示统计表里的全部记录。
PS: 如果被统计的字段是 not null(必前字段),那么其值得数量就与表里记录的数量相同,但一般来说,我们使用count(*)来统计表里的记录数量。
事例:统计表里一共有几条记录,语句如下所示:
select count(*) from students;
结果运行如下,
(2).SUM()。
SUM()函数返回一组记录中某一个字段值得总和。它可以与distinct一起使用。
语法
SELECT SUM(column_name) FROM table_name
PS:SUM()函数所处理的字段类型必须是数值型的,不能是其他类型。
(3).AVG()。
AVG()可以计算一组知道记录的平均值。AVG()返回数值列的平均值。NULL 值不包括在计算中。
语法
SELECT AVG(column_name) FROM table_name
事例,统计表中学生的平均年龄,
(4).MAX()。
MAX ()返回一列中的最大值。NULL 值不包括在计算中。
语法
SELECT MAX(column_name) FROM table_name
事例,统计表中学生的最大年龄,
(5).MIN()。
MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
语法
SELECT MIN(column_name) FROM table_name事例,统计表中学生的最小年龄,
PS:注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。
(6).FIRST()。
FIRST() 返回指定的字段中第一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。
语法
SELECT FIRST(column_name) FROM table_name(7).LAST() 。
LAST() 返回指定的字段中最后一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。
语法
SELECT LAST(column_name) FROM table_name
4.小结。
本篇文章罗列了查询语句中经常出现的语句。当然还有其他的语句,由于时间仓促,没有罗列完,请谅解!
PS:
SQL 的语法并不按照语法顺序执行
SQL 语句有一个让大部分人都感到困惑的特性,就是:SQL 语句的执行顺序跟其语句的语法顺序并不一致。SQL 语句的语法顺序是:
SELECT[DISTINCT]
FROM
WHERE
GROUP BY
HAVING
UNION
ORDER BY
为了方便理解,上面并没有把所有的 SQL 语法结构都列出来,但是已经足以说明 SQL 语句的语法顺序和其执行顺序完全不一样,就以上述语句为例,其执行顺序为:
FROM
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
UNION
ORDER BY
关于 SQL 语句的执行顺序,有三个值得我们注意的地方:
1、 FROM 才是 SQL 语句执行的第一步,并非 SELECT 。数据库在执行 SQL 语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。(译者注:原文为“The first thing that happens is loading data from the disk into memory, in order to operate on such data.”,但是并非如此,以 Oracle 等常用数据库为例,数据是从硬盘中抽取到数据缓冲区中进行操作。)
2、 SELECT 是在大部分语句执行了之后才执行的,严格的说是在 FROM 和 GROUP BY 之后执行的。理解这一点是非常重要的,这就是你不能在 WHERE 中使用在 SELECT 中设定别名的字段作为判断条件的原因。
SELECT A.x + A.y AS zFROM AWHERE z = 10 -- z 在此处不可用,因为SELECT是最后执行的语句!
如果你想重用别名z,你有两个选择。要么就重新写一遍 z 所代表的表达式:
SELECT A.x + A.y AS zFROM AWHERE (A.x + A.y) = 10
…或者求助于衍生表、通用数据表达式或者视图,以避免别名重用。请看下文中的例子。
3、 无论在语法上还是在执行顺序上, UNION 总是排在在 ORDER BY 之前。很多人认为每个 UNION 段都能使用 ORDER BY 排序,但是根据 SQL 语言标准和各个数据库 SQL 的执行差异来看,这并不是真的。尽管某些数据库允许 SQL 语句对子查询(subqueries)或者派生表(derived tables)进行排序,但是这并不说明这个排序在 UNION 操作过后仍保持排序后的顺序。
注意:并非所有的数据库对 SQL 语句使用相同的解析方式。如 MySQL、PostgreSQL和 SQLite 中就不会按照上面第二点中所说的方式执行。
既然并不是所有的数据库都按照上述方式执行 SQL 预计,那我们的收获是什么?我们的收获是永远要记得: SQL 语句的语法顺序和其执行顺序并不一致,这样我们就能避免一般性的错误。如果你能记住 SQL 语句语法顺序和执行顺序的差异,你就能很容易的理解一些很常见的 SQL 问题。
当然,如果一种语言被设计成语法顺序直接反应其语句的执行顺序,那么这种语言对程序员是十分友好的,这种编程语言层面的设计理念已经被微软应用到了 LINQ 语言中。
- Sql小白入门(五)查询语句
- SQL server 实验五 (sql 查询语句)
- SQL 语句(五)--------------数据查询(集合查询)
- sql一些小查询语句
- sql一些小查询语句
- oracle中sql语句查询优化(五)
- SQL语句小例(多表查询)
- 黑马程序员-------SQL查询语句入门
- SQL 小白入门
- sql语句中出现笛卡尔乘积 SQL查询入门篇(转)
- (转载)sql语句中出现笛卡尔乘积 SQL查询入门篇
- MySQL (五)上 DQL 数据查询语言(sql 语句)
- sql语句查询(待续)
- SQL查询语句(一)
- SQL查询语句(二)
- SQL查询语句(一)
- Oracle分页查询语句(五)
- Sql小白入门(一)概述
- iOS编译FFmpeg、kxmovie实现视频播放
- supermap三维场景基本操作代码
- C 排序算法 (冒泡)(选择)|(插入)|(快速)
- [LeetCode]96. Unique Binary Search Trees
- Scientific.Toolworks.Understand.v4.0.872.MACOSX-AMPED
- Sql小白入门(五)查询语句
- git使用之一——git的基本使用
- Windows下查询IPv4的BAT脚本
- 6.操作系统历史与我们的学习任务——操作系统历史
- 出国留学成绩要求主要看点在雅思
- 小程序服务端集成微信支付
- redis、memcache、mongoDB对比分析
- GBK点阵显示字库的制作和使用
- 《我是一只IT小小鸟》