SQL基础教程

您所在的位置:网站首页 select修改语句 SQL基础教程

SQL基础教程

2023-03-06 19:41| 来源: 网络整理| 查看: 265

本节视频地址:https://www.ixigua.com/7206688459715838524

查询是平时在操作数据库中最常用的功能了,约90%以上的数据操作其实都是查询,所以掌握查询的SQL操作方法是十分重要的。基础的查询是非常简单的,本节就可以学完,但实际应用中经常会遇到极其复杂的查询,像联表查询、子表查询、查询结果处理、查询条件过滤等等,我曾经遇到过一个查询语句大约500多行。不过也不用太担心,这些查询语句都是有一些基本规则的,随着我们对sql的逐步学习,看懂这些查询语句都是没问题的,有一天你也会写出类似复杂的查询语句的。

列查询

最基础的查询就是列查询,最简单的列查询就是查看所有列,我们在平时的演示中已经经常用到,语法如下:

SELECT * FROM table_name;

这里的*号表示把所有列都查出来。

有时遇到的表会很大,比如有30列,我们实际只想看其中的几列,则此时把*号改成想查看的列名,用逗号分隔,语法如下:

SELECT 列1, 列2, ... FROM table_name;

如:

SELECT id, name FROM product;

指定了列名的查询可以控制展示列的顺序,比如想把name放前面,可以如下这样写:

SELECT name, id FROM product;

是不是很简单!

为列设置别名

定义数据库时,列名(或者叫字段)一般都取的是英文,但是select查询展示时如果显示成中文,就会更加的清晰,所以数据库一般都支持在select时为列指定别名的功能,只用在原列名使用AS关键字即可,直接上个实例吧:

SELECT purchase_price AS "进价", sale_price AS "售价" FROM product;

注意,这里的中文尽量使用英文双引号包起来,当然,新版postgre已经没这个要求了,但是尽量还是包起来安全,如果这里的别名是英文,同时还没有空格,可以不用双引号,如:

SELECT purchase_price as pprice, sale_price as s_price from product;查询常数

这个概念听起来有点不太容易理解,实际上它的意思非常简单,就是我们想加一列,这一列的内容都显示成一样的,就可以使用它了。

在postgresql的终端里直接输出一个常数怎么做:

select 39;

其实还可以使用select来做数学四则运算呢:

select 39 + 20 * 5;

那么在表的查询中,也可以使用这种方法,只不过表的查询结果一般是多行,那就会在每一行中都重复显示这个常数,还是上个例子更清楚:

SELECT id, 39, name FROM product; SELECT id, name, '2023-01-12' FROM product;

这里的39和'2023-01-12'就是常数,关于常数的概念,咱们在第一章讲过,忘了的可以去翻翻教程。

常数列也是可以指定别名的:

SELECT id, name, '2023-01-12' AS "进货日期" FROM product;去除重复的行

当只查询某几列时,有时会查询出来的数据很多行都是重复的,我们只看一行就可以,如何把这些重复的行只保留一行呢,SQL提供了一个DISTINCT关键字,可以去掉重复的行。例如有这种情境,我们想看看商品表中一共有几类商品,以前的查询语句如下:

SELECT product_type FROM product;

这样每一行的商品类型名称都出来了,有大量重复,加上distinct关键字试试:

SELECT DISTINCT product_type FROM product;

这样就只保留下来一份了,是不是清晰了很多。

这里需要注意一点,在请允许空的列中,所有的空只保留一个。

再看一种情况,如果distinct后面跟了多列会怎么样呢:

SELECT DISTINCT product_type, product_name FROM product;

我们会发现,product_type又重现了重复,这是因为distinct关键字执行的是整行去重,而不是只针对某个字段,所以在使用distinct时只能有一个distinct关键字,且要放在所有字段的前面。

使用WHERE来筛选数据

到了极其复杂的WHERE部分了,不过目前我们学习的还只是单表查询,所以where还比较好理解,是对表中的数据进行筛选后再展示,比如我们只想看看所有分类是衣服的商品:

SELECT * FROM product WHERE product_type = '衣服';

所在在语法上很简单,就是在以面的from表后面继续使用WHERE关键字,然后表我们想过滤筛选的条件加上就即可,平时我们常用的条件有等于、大于、小于、不等于、包含、不包含等,后面都会慢慢学习到。

如果在筛选数据时想要同时满足两个或多个条件怎么办,可以使用AND或OR这两个关键字进行条件连接,AND和OR就是并且和或的意思,这就是初中逻辑的基础知识,就不解释了。

来个例子吧,想要查询一下分类是衣服,并且进价小于100的商品:

SELECT * FROM product WHERE product_type = '衣服' AND purchase_price < 100;

想要查询分类是衣服或办公用品的商品:

SELECT * FROM product WHERE product_type = '衣服; OR product_type = '办公用品';

再来一个,查要查询分类是服务或商品,并且价格小于100的商品,初始的想法是不是这样:

SELECT * FROM product WHERE product_type = '衣服' OR product_type = '办公用品' AND purchase_price < 100;

但实际上衣服分类中所有的商品都显示出来了,包括进价大于100的,这是为什么呢?

原来这是因为运算符的执行优先级导致的,就像+-*/四则运算的优先级,先算乘除,再算加减。对于AND和OR来说,AND优先级大于OR,所以先算AND,即product_type = "办公用品" AND purchase_price < 100,再与OR部分进行或。那要想改变这个运算顺序要怎么办呢,依然很简单,跟数学一样,用括号就可以:

SELECT * FROM product WHERE (product_type = '衣服' OR product_type = '办公用品') AND purchase_price < 100;

这些内容我们在下一节学习了这些运算符后就会更加明白了。

视频教程地址

本节视频教程地址:https://www.ixigua.com/7206688459715838524

【下一节】

知乎个人主页地址:https://www.zhihu.com/people/yu19491001



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3