MySQL基本查询实战
MySQL基本查询实战
ZhangCurryMySQL基本查询实战
目录
- 1)创建测试所用表
- 2)查看两个表中存储的数据
- 3)只查询fruits表中f_name列的数据
- 4)只查询fruits表中f_name列和f_price列的数据
- 5)查询fruits表中f_name和f_price的列,并且f_price的数值等于5.2
- 6)查询fruits表中f_name和f_price的列,并且f_price的数值大于或等于10
- 7)查询fruits表中f_name和f_price的列,并且f_price的数值在2到8之间
- 8)查询fruits表中的f_name和s_id列,并且s_id的值为101或者103
- 9)查询fruits表中的f_name和s_id列,并且s_id的值不为101和103
- 10)模糊查询“%”和“_”的使用
- 11)查询fruits表中s_id的值为101并且f_price的值大于2.0的行
- 12)查询fruits表中s_id的值为101或103并且f_price列的值大于5
- 13)查询fruits表中的s_id列,并去除重复值
- 14)查询fruits表中的s_id和f_name列,并以s_id对结果进行排序
- 15)查询fruits表中的f_name及f_price列,并以f_name和f_price列进行排序
- 16)查询fruits表中的f_price列,并对结果以降序进行排序
- 17)查询fruits中s_id列不同值出现的次数,并对其进行分组显示
- 18)查询fruits表中每个相同的s_id对应的f_name列的所有值,f_name的值以一行显示,并且其值在1个以上
- 19)查询customers表中c_email列为空值的行
- 20)查询fruits表中每个s_id对应的所有f_name值
- 21)统计fruits表相同s_id值的行有多少?
- 22)创建所需表并插入数据
- 23) 查询同一个o_num列的quantity(数量)和item_price(价格)相乘结果大于100的行
- 24)limit——限制返回的行数
- 25)查询每个o_num对应的f_id有几个
- 26)查询o_num为30005的quantity(数量)有多少
- 27)查询s_id为103的f_price的平均数是多少(s_id的平均价格是多少)
- 28)查询每个s_id对应的平均价格(f_price)是多少?
- 29)查询每个s_id中f_price值最大的行是哪个?
- 30)查询每个f_price值最大的值及其所对应的s_id、f_name
- 31)创建所需表并插入数据
- 32)表联接类型
- 33)内联接查询,将两个表的指定列生成一个新表
- 34)左外联接查询示例
- 35)内联接查询时指定其他条件
1)创建测试所用表
1 | create table fruits ( |
2)查看两个表中存储的数据
1 | select * from fruits; |
3)只查询fruits表中f_name列的数据
1 | select f_name from fruits; |
4)只查询fruits表中f_name列和f_price列的数据
1 | select f_name,f_price from fruits; |
5)查询fruits表中f_name和f_price的列,并且f_price的数值等于5.2
1 | select f_name,f_price from fruits where f_price=5.2; |
6)查询fruits表中f_name和f_price的列,并且f_price的数值大于或等于10
1 | select f_name,f_price from fruits where f_price>=10; |
7)查询fruits表中f_name和f_price的列,并且f_price的数值在2到8之间
1 | select f_name,f_price from fruits where f_price between 2 and 8; |
8)查询fruits表中的f_name和s_id列,并且s_id的值为101或者103
方法一:
1 | select f_name,s_id from fruits where s_id = 101 or s_id = 103; |
方法二:
1 | select f_name,s_id from fruits where s_id in (101,103); |
9)查询fruits表中的f_name和s_id列,并且s_id的值不为101和103
方法一:
1 | select f_name,s_id from fruits where s_id != 101 and s_id != 103; |
方法二:
1 | select f_name,s_id from fruits where s_id not in (101,103); |
10)模糊查询“%”和“_”的使用
① 查询fruits表中的f_name列,并且值以“b”开头
1 | select f_name from fruits where f_name like 'b%'; |
② 查询fruits表中的f_name列,并且值以“b”开头,以“y”结尾
1 | select f_name from fruits where f_name like 'b%y'; |
③ 查询fruits表中的f_name列,值以“b”开头,以“y”结尾,并且b和y之间有三个字符
1 | select f_name from fruits where f_name like 'b___y'; |
11)查询fruits表中s_id的值为101并且f_price的值大于2.0的行
1 | select * from fruits where s_id = 101 and f_price > 2.0; |
12)查询fruits表中s_id的值为101或103并且f_price列的值大于5
1 | select * from fruits where s_id in (101,103) and f_price > 5; |
13)查询fruits表中的s_id列,并去除重复值
1 | select distinct s_id from fruits; |
14)查询fruits表中的s_id和f_name列,并以s_id对结果进行排序
1 | select s_id,f_name from fruits order by s_id; |
15)查询fruits表中的f_name及f_price列,并以f_name和f_price列进行排序
1 | select distinct f_name,f_price from fruits order by f_name,f_price; |
注:多字段排序,如果第一个排序的字段一致,会依靠第二个字段排序,依次类推,如果第一个字段不一样,则直接以第一段来进行排序!
16)查询fruits表中的f_price列,并对结果以降序进行排序
默认是asc升序排序,可以通过关键字DESC更改为降序!
1 | select f_price from fruits order by f_price desc; |
17)查询fruits中s_id列不同值出现的次数,并对其进行分组显示
调用count(*)函数统计次数,并通过as来对其设置别名,group by来进行分组!
1 | select s_id,count(*) as total from fruits group by s_id; |
18)查询fruits表中每个相同的s_id对应的f_name列的所有值,f_name的值以一行显示,并且其值在1个以上
1 | select s_id,group_concat(f_name) as name from fruits group by s_id having count(f_name) > 1; |
19)查询customers表中c_email列为空值的行
1 | select * from customers where c_email is null; |
20)查询fruits表中每个s_id对应的所有f_name值
1 | select s_id,group_concat(f_name) as name from fruits group by s_id having count(f_name) > 1; |
21)统计fruits表相同s_id值的行有多少?
1 | select s_id,count(*) as total from fruits group by s_id with rollup; |
22)创建所需表并插入数据
1 | create table orderitems ( |
23) 查询同一个o_num列的quantity(数量)和item_price(价格)相乘结果大于100的行
1 | select o_num,SUM(quantity*item_price) as total from orderitems |
24)limit——限制返回的行数
① 仅显示前四行
1 | select * from fruits limit 4; |
② 从第四行开始,显示后三行
1 | select * from fruits limit 4,3; |
25)查询每个o_num对应的f_id有几个
1 | select o_num,count(f_id) as items_total from orderitems group by o_num; |
26)查询o_num为30005的quantity(数量)有多少
1 | select sum(quantity) as items_total from orderitems where o_num = 30005; |
27)查询s_id为103的f_price的平均数是多少(s_id的平均价格是多少)
1 | select avg(f_price) as avg_price from fruits where s_id = 103; |
28)查询每个s_id对应的平均价格(f_price)是多少?
1 | select s_id,avg(f_price) as avg_price from fruits group by s_id; |
29)查询每个s_id中f_price值最大的行是哪个?
1 | select s_id, max(f_price) as max_price from fruits group by s_id; |
30)查询每个f_price值最大的值及其所对应的s_id、f_name
1 | select s_id,f_price,f_name from fruits |
31)创建所需表并插入数据
1 | create table suppliers ( |
32)表联接类型
在进行接下来的查询,有必要说一下多表查询的相关概念!
① 内联接
内联接(inner join)是最常见的一种联接方式,只返回两个数据集合之间匹配关系的行,将位于两个互相交叉的数据集合中重叠部分以内的数据行联接起来。
内联接使用比较运算符进行表间某些列数据的比较操作,并列出这些表中与联接相匹配的数据行。
② 外联接
外联接(outer join)是对内联接的扩充,除了将两个数据集合中重复部分以内的数据行联接起来之外,还可以根据要求返回左侧或右侧表中非匹配的数据或全部的数据。
外联接还可以分为以下几种:
- 左外联接(left join或left outer join)的结果包括左表的所有行,如果左表的某一行在右表中没有匹配行,则右表返回空值,否则返回相应值;
- 右外联接(right join或right outer join)是左外联接的反向联接,将返回右表的所有行,如果右表的某一行在左表中没有匹配行,则左表返回空值,否则返回相应值;
- 全联接(full join 或full outer join)将返回左表和右表中的所有行,当某一行在另一个表中没有匹配行时,另一个表返回空值,否则返回相应值;
33)内联接查询,将两个表的指定列生成一个新表
1 | select suppliers.s_id,s_name,f_name,f_price from fruits inner join suppliers on fruits.s_id = suppliers.s_id; |
34)左外联接查询示例
1 | select customers.c_id,orders.o_num from customers |
35)内联接查询时指定其他条件
1 | select customers.c_id,orders.o_num from customers inner join orders on customers.c_id = orders.c_id; |
*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
分类: mysql



