如何查询MySQL表中的数据,这些操作你得明白!

前言

本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对于INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)等一些复杂查询。 通过本节的学习,可以让你知道这些基本的复杂查询是怎么实现的,但是建议还是需要多动手去敲,虽然理解了什么是内连接等,但是从理解到学会,是完全不一样的感觉。总结了一张MYSQL知识图谱分享给大家

高性能MySQL.jpg

一、单表查询

创建查询环境

CREATE TABLE fruits(

f_id CHAR(10) NOT NULL,

s_id INT NOT NULL,

f_name char(255) NOT NULL,

f_price DECIMAL(8,2) NOT NULL,

PRIMARY KEY(f_id)

);

解释:

f_id:主键 使用的是CHAR类型的字符来代表主键

s_id:这个其实是批发商的编号,也就是代表该水果是从哪个批发商那里过来的,写这个字段的目的是为了方便后面扩增表。

f_name:水果的名字

f_price:水果的价格,使用的是DECIMAL这个数据类型,如果不清楚这个类型去查看一下上面一篇讲解数据类型的文章。

添加数据。

INSERT INTO fruits(f_id,s_id,f_name,f_price) VALUES

(‘a1’ , 101 , ‘apple’ , 5.2),

(‘b1’ , 101 , ‘blackberry’ , 10.2),

(‘bs1’ , 102 , ‘orange’ , 11.2),

(‘bs2’ , 105 , ‘melon’ , 8.2),

(‘t1’ , 102 , ‘banana’ , 10.3),

(‘t2’ , 102 , ‘grape’ , 5.3),

(‘o2’ , 103 , ‘coconut’ , 9.2),

(‘c0’ , 101 , ‘cherry’ , 3.2),

(‘a2’ , 103 , ‘apricot’ , 2.2),

(‘l2’ , 104 , ‘lemon’ , 6.4),

(‘b2’ , 104 , ‘berry’ , 7.6),

(‘m1’ , 106, ‘mango’ , 15.6),

(‘m2’ , 105 , ‘xbabay’ , 2.6),

(‘t4’ , 107, ‘xbababa’ , 3.6),

(‘m3’ , 105 , ‘xxtt’ , 11.6),

(‘b5’ , 107, ‘xxxx’ , 3.6 );

blackberry:黑莓  melon:甜瓜  grape:葡萄  coconut:椰子  cherry:樱桃  apricot:杏子  berry:浆果  mango:芒果  后面几个xbabay都是为了测试所编写的,没有实际意义。

注意:在复制我的代码到cmd窗口时,应注意语句之间不能有空格,不然会报错,我这里是为了使你们观看更清楚,所以每行前面度加有空格,

1.1、查询所有字段

SELECT * FROM fruits;

image.png

解释:* 代表所有字段,也就是从表中将所有字段下面的记录度查询出来

1.2、查询指定字段

查询f_name 和 f_price 字段的记录

SELECT f_name, f_price FROM fruits;

image.png

1.3、查询指定记录

指定记录:也就是按条件进行查询,将满足一定条件的记录给查询出来,使用WHERE关键字

SELECT * FROM fruits WHERE f_name = ‘apple’;  //将名为apple的记录的所有信息度查询出来

image.png
                    
SELECT * FROM fruits WHERE f_price > 15;    //将价格大于15的记录的所有字段  查询出来

image.png

1.4、带IN关键字的查询

IN关键字:IN(xx,yy,…) 满足条件范围内的一个值即为匹配项

SELECT * FROM fruits WHERE f_name IN(‘apple’,‘orange’);

image.png

SELECT * FROM fruits WHERE s_id IN(101, 105); //s_id 为101 或者 105 的记录

image.png

SELECT * FROM fruits WHERE s_id NOT IN(101,105); //s_id 不为101或者105的记录

image.png

1.5、带BETWEEN AND 的范围查询

BETWEEN … AND … : 在…到…范围内的值即为匹配项,

SELECT * FROM fruits WHERE f_price BETWEEN 5 AND 15;  //f_price 在5到15之间,包括5和15。

image.png
                    
SELECT * FROM fruits WHERE f_price NOT BETWEEN 5 AND 15;  //f_price 不在5到15之间。

image.png

1.6、带LIKE的字符匹配查询

LIKE: 相当于模糊查询,和LIKE一起使用的通配符有 “%”、"_"

“%”:作用是能匹配任意长度的字符。

“_”:只能匹配任意一个字符

SELECT * FROM fruits WHERE f_name LIKE ‘b%’;  //f_name以b字母开头的所有记录

image.png

SELECT * FROM fruits WHERE f_name LIKE ‘b%y’;  //f_name以b字母开头,y字母结尾的所有记录

image.png

SELECT * FROM fruits WHERE f_name LIKE '___y’;   //此处有四个,说明要查询以y字母结尾并且y之前只有四个字符的记录

image.png
                    
总结:’%‘和’_'可以在任意位置使用,只需要记住%能够表示任意个字符,_只能表示一个任意字符

1.7、查询空值

空值不是指为空字符串""或者0,一般表示数据未知或者在以后在添加数据,也就是在添加数据时,其字段上默认为NULL,也就是说,如果该字段上不插入任何值,就为NULL。此时就可以查询出来。

SELECT * FROM 表名 WHERE 字段名 IS NULL;  //查询字段名是NULL的记录

SELECT * FROM 表名 WHERE 字段名 IS NOT NULL;  //查询字段名不是NULL的记录

这里由于没有合适的数据,就不自己在创建表,添加数据,然后来测试这条语句了,很简单,看一下就应该懂了

1.8、带AND的多条件查询

AND: 相当于"逻辑与",也就是说要同时满足条件才算匹配

SELECT * FROM fruits WHERE s_id = 101 AND f_price > 5;  //同时满足s_id = 101、f_price >5 这两个条件才算匹配。

image.png

1.9、带OR的多条件查询

OR: 相当于"逻辑或",也就是说只要满足其中一个条件,就算匹配上了,跟IN关键字效果差不多

SELECT * FROM fruits WHERE s_id = 101 OR f_price > 10;  //s_id =101 或者 f_price >10 ,只要符合其中一个条件,就算匹配

image.png

可以看到,查询出来的记录,f_price有低于10的,那么其肯定s_id=101,s_id不等于101的,其f_price肯定大于10,这就说明了OR的效果。只要满足其中一个条件,就算匹配。

1.10、关键字DISTINCT(查询结果不重复)

SELECT s_id FROM fruits;  //查询所有的s_id,会出现很多重复的值。

image.png
                          
使用DISTINCT就能消除重复的值

SELECT DISTINCT s_id FROM fruits;

image.png

将重复的值删除后,就只留下7条记录了。

1.11、对查询结果排序(ORDER BY)

看上面输出的值没顺序,可以给他们进行排序。使用关键字 ORDER BY,有两个值供选择 DESC 降序 、 ASC 升序(默认值)

SELECT DISTINCT s_id FROM fruits ORDER BY s_id;    //默认就是升序,

image.png

SELECT DISTINCT s_id FROM fruits ORDER BY s_id DESC;  //使用降序,也就是从高到底排列

image.png

1.12、分组查询(GROUP BY)

分组查询很多人不知道什么意思,一开始我也是很蒙圈的,所以没关系,一起来看看。

分组查询就是将相同的东西分到一个组里面去,现实生活中举个例子,厕所分男女,这也是一个分组的应用,在还没有分男女厕所前,大家度共用厕所,后面通过分男女性别,男的跟男的分为一组,女的和女的分为一组,就这样分为了男女厕所了。这就是分组的意思, 在上面对s_id进行查询的时候,发现很多重复的值,我们也就可以对它

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值