MySQL数据库入门与实践(二):查询与排序

一、简单的查询

sql中核心的东西就是列,查询某一个数值,肯定要先确定要查的是哪一列的数据

--查询一列:select 列名 from 表名
select product_id from product;

在这里插入图片描述
其中select 和 from 分别是两个子句。虽然看上去好像是先选择product_id 再在product中找,显然这并不符合逻辑,其实这里sql执行的顺序应该是先 from product ,我要先知道我在哪个表中查找,再进行选择 select product_id,
当然,可以一次性选择多列:

select product_id,product_name,product_type from product;

在这里插入图片描述
那如果说想要输出所有的列,也就是选择整张表,换句话说就是把整张表显示出来,可以使用

select * from product;

在这里插入图片描述
其中星号(*)表示所有的列,有个好处就是简单,但是不好的是没有办法进行排序。

要知道select 后面跟的并不一定是原来表中的列名,这一点后面会介绍。并且select 后跟的列名实际上该sql语句执行后生成的表的列名,那么这个列名实际上可以任意进行设置。这就要引出 AS 这个关键字。

--设置别名:select 列名1 as 列名2 from 表名
select product_id,product_name as name ,product_type from product;

在这里插入图片描述
可以看出显示的表的列名中显示出name 这个重新设置的列名。
我也可以把列名设置为中文名称,但是注意,中文字符需要加上双引号(")

SELECT product_id AS "商品编号",product_name AS "商品名称",purchase_price AS "进货单价"
FROM Product;

在这里插入图片描述

二、条件查询

上面的查询中,都是把对应的列那一列数据完整地显示出来,但是有时需要查找在一定条件下的数据,这时候我们就需要对查询的数据进行过滤。

  1. 数据去重
--删除重复行:
select distinct product_type from product;

在这里插入图片描述
对于一类特殊的数据就是null 的数据,当有很多行都是 null 的时候,会保留一行。

select distinct purchase_price from product;

在这里插入图片描述
需要注意的是当select 的对象不止一个列时,distinct 只能放在第一个列名之前

SELECT DISTINCT product_type, regist_date FROM Product;

在这里插入图片描述
可以看出此时并不会将种类相同的两行进行去重,而是必须是选择的两行都完全相同时才会去掉一行。

  1. 条件过滤
    有时需要查找特定范围内的数据,比如商品价格超过100的商品,这时候就需要对单元格的值进行筛选。
--select 列名 from 表名 where 条件
select product_name,sale_price from product 
where sale_price >100;

在这里插入图片描述
其中出现的 where sale_price>100 称为条件表达式,用来进行数据的过滤。

需要说明的是,此时sql语句的执行顺序是 from->where>select,这其实也很好理解,第一步是要知道是在哪个表中进行操作,其次是这个表哪部分,最后才是查询。

当然,条件表达式的形式并不只有这种形式,也可以采用别的形式,比如

select product_type,sale_price from product where product_type='衣服';

在这里插入图片描述

三、算术运算符与比较运算符

在上面的例子中可以看到,在where子句进行数据过滤时,使用了>,和= 的运算符,在sql中也会使用到常见的运算符:

运算符名称符号
+
-
*
/
大于>
小于<
大于等于>=
小于等于<=
等于=
不等于<>

这些运算符可以对数值型和日期型数据进行算术运算和比较运算,尤其是对于日期型也可以进行通常意义下的运算,这其实带来了很大的便利。并且需要注意的是,平时使用的括号()优先运算在这里仍然适用。
来看一个例子:

SELECT product_name, sale_price,sale_price * 2 AS "sale_price_x2"
FROM Product;

在这里插入图片描述
这里并不是在where 子句过滤时使用的运算符,而是在select中使用的,这表示算术运算符的使用位置并不局限于数据过滤。
在之前的数据中存在某些单元格数据缺失的现象,是null 的情况,需要说明的是 null 的数据不参加任何的算数运算,任何算术运算符和null 数据结果仍然是 null。
前面说了,算术运算符和比较运算符对于数值型数据和日期型数据的运算是十分方便的,但是对于字符串型数据呢,因为字符串没有办法进行加减乘除,但是对于字符串可以判断是不是相等,并且把字符串看成一个偏序集,可以再上面定义这种顺序,也就是常见的字典排序。
为了搞清楚字符串的比较运算,可以先创建一个字符串的表

CREATE TABLE Chars
(chr CHAR(3) NOT NULL,
PRIMARY KEY (chr));
INSERT INTO Chars VALUES ('1');
INSERT INTO Chars VALUES ('2');
INSERT INTO Chars VALUES ('3');
INSERT INTO Chars VALUES ('10');
INSERT INTO Chars VALUES ('11');
INSERT INTO Chars VALUES ('222');

在这里插入图片描述
下面看一看字符串之间的比较运算:

--选出字符串大于2的行
select chr from Chars where chr > "2";

在这里插入图片描述
对于字符串”10“,”11“,按照字典排序法是在2的左边,也就是小于。
而对于汉字或者英文单词的排序方法,则同理按照字典排序法。
对于null 的比较运算时,需要注意的是,并不能用”sale_price=null“进行"是否是null" 的判断,若要判断是否是null ,则需使用 is null 或者是 is not null 的谓词来判断。

select product_id ,purchase_price from product 
where purchase_price is not null;

在这里插入图片描述

四、逻辑运算符

常见的逻辑运算符有 not and or

  1. 想要指定“不是 ~”这样的否定条件时,需要使用 <> 运算符。 除此之外还存在另外一个表示否定,并且使用范围更广的运算符 NOT。
SELECT product_name, product_type, sale_price
FROM Product
WHERE NOT sale_price >= 1000;

在这里插入图片描述
上述命令也就是把售价在1000以下的行筛选了出来。当然这个筛选条件不使用not 一样可以做,只需要把过滤体哦条件改成 where sale_price <1000;即可。但即使是这样,not 的作用也是不可替代的。

  1. AND 运算符在其两侧的查询条件都成立时整个查询条件才成立,其意思相当于“并且”,也就是交集运算。也是常常用在where 的过滤条件中,表示必须是两个条件同时成立。
SELECT product_name, purchase_price
FROM Product
WHERE product_type = '厨房用具'
AND sale_price >= 3000;

在这里插入图片描述

  1. OR 运算符在其两侧的查询条件有一个成立时整个查询条件都成立,其意思相当于“或者”,也就是并集运算。
SELECT product_name, purchase_price
FROM Product
WHERE product_type = '厨房用具'
OR sale_price >= 3000;

在这里插入图片描述

需要注意的是,三个逻辑运算符之间也存在优先级,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';
SELECT product_name, product_type, regist_date
FROM Product
WHERE (product_type = '办公用品' AND regist_date = '2009-09-11'OR regist_date = '2009-09-20';

这两个代码表示的是一个命令
在这里插入图片描述
逻辑运算符的操作对象其实是真值,也就是true 和false, 对于真值和逻辑运算符之间的运算和离散数学 中的运算保持一致,在此就不多介绍了,但是需要说明的的是有关 null 的真值的逻辑运算。
此时需要介绍第三种真值,也就是和真假都不同的“不确定”,有关这种真值类型,需要说明的是
在and 运算中,and true 结果为不确定,and false 结果为false,在or 运算中,or true 结果为true ,or false 结果为不确定。其实运算背后的本质还是集合论的观点,交运算中只要有一个为假则结果为假,并运算中只要有一个为真,则结果为真,别的情况都是不确定。

总结

在本小节中介绍了mysql最基本的查询语句(select)以及用where 的过滤条件用法,还包括常见的三种运算符:

  1. 算术运算符:加减乘除
  2. 比较运算符:等于,不等于,大于,大于等于,小于,小于等于
  3. 逻辑运算符:not and or
    对于这些运算符针对数值型,日期型和字符串型数据操作时有所差异,并且针对 null 的数据时有不同的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素梦秋影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值