MySQL基本查询示例(2)

注:本博文基于上一篇博文中的表进行查询,上篇博文:MySQL基本查询示例(1)

1、查询fruits表中每个s_id对应的所有f_name值

<!--以组来进行紧凑-->
mysql> select s_id,group_concat(f_name) as name from fruits group by s_id having count(f_name) > 1;

返回结果如下:

2、统计相同s_id值的行有多少?

mysql> select s_id,count(*) as total
    -> from fruits
    -> group by s_id with rollup;

注:with rollup的作用是将s_id分组后的和再进行相加,统计出来的总数,也就是16。

3、创建一个新表并插入数据

<!--创建新表-->
mysql> create table orderitems
    -> (
    -> o_num int not null,
    -> o_item int not null,
    -> f_id char(10) not null,
    -> quantity int not null,
    -> item_price decimal(8,2) not null,
    -> primary key(o_num,o_item)
    -> );
<!--插入数据-->
mysql> insert into orderitems(o_num,o_item,f_id,quantity,item_price)
    -> values(30001,1,‘a1‘,10,‘5.2‘),
    -> (30001,2,‘b2‘,3,‘7.6‘),
    -> (30001,3,‘bs1‘,5,‘11.2‘),
    -> (30001,4,‘bs2‘,15,‘9.2‘),
    -> (30002,1,‘b3‘,2,‘20.0‘),
    -> (30003,1,‘c0‘,100,10),
    -> (30004,1,‘o2‘,50,‘2.50‘),
    -> (30005,1,‘c0‘,5,‘10‘),
    -> (30005,2,‘b1‘,10,‘8.99‘),
    -> (30005,3,‘a2‘,10,‘2.2‘),
    -> (30005,4,‘m1‘,5,‘14.99‘);

查看表中的数据如下:

4、查询同一个o_num列的quantity(数量)和item_price(价格)相乘结果大于100的行

mysql> select o_num,SUM(quantity*item_price) as total from orderitems
    -> group by o_num having total > 100 order by total;

5、limit——限制返回的行数

限制1:

<!--只显示表中的前四行-->
mysql> select * from fruits limit 4;

返回结果如下:

限制2:

<!--从第四行开始,显示后面3行-->
mysql> select * from fruits limit 4,3;

返回结果如下:

6、查询每个o_num对应的f_id有几个

mysql> select o_num,count(f_id) as items_total
    -> from orderitems
    -> group by o_num;

返回的结果如下:

7、查询o_num为30005的quantity(数量)有多少

mysql> select sum(quantity) as items_total
    -> from orderitems
    -> where o_num = 30005;

返回的结果如下:

8、查询s_id为103的f_price的平均数是多少(s_id的平均价格是多少)

mysql> select avg(f_price) as avg_price from fruitss where s_id = 103;

返回的结果如下:

9、查询每个s_id对应的平均价格(f_price)是多少?

mysql> select s_id,avg(f_price) as avg_price from fruits group by s_id;

返回的结果如下:

10、查询每个s_id中f_price值最大的行是哪个?

mysql> select s_id, max(f_price) as max_price from fruits group by s_id;

返回的结果如下:

同理,若要查看最小的行,只需要将max换为min即可。

11、查询每个f_price值最大的值及其所对应的s_id、f_name。

mysql> select s_id,f_price,f_name from fruits
    -> where f_price in(select max(f_price) from fruits group by s_id);

返回的结果如下:

12、再次创建所需表并插入数据

<!--创建表-->
mysql> create table suppliers
    -> (
    -> s_id int not null auto_increment,
    -> s_name char(50) not null,
    -> s_city char(50) null,
    -> s_zip char(10) null,
    -> s_call char(50) not null,
    -> primary key(s_id)
    -> );
mysql> create table orders
    -> (
    -> o_num int not null auto_increment,
    -> o_date datetime not null,
    -> c_id int not null,
    -> primary key(o_num)
    -> );
<!--插入数据-->
mysql> insert into suppliers(s_id,s_name,s_city,s_zip,s_call)
    -> values(101,‘FastFruit Inc.‘,‘tianjin‘,‘300000‘,‘48075‘),
    -> (102,‘LT Supplies‘,‘chongqing‘,‘400000‘,‘44333‘),
    -> (103,‘acme‘,‘shanghai‘,‘200000‘,‘90046‘),
    -> (104,‘fnk inc.‘,‘zhongshan‘,‘528437‘,‘11111‘),
    -> (105,‘good set‘,‘taivuang‘,‘030000‘,‘22222‘),
    -> (106,‘just eat ours‘,‘beijing‘,‘010‘,‘45678‘),
    -> (107,‘dk inc.‘,‘zhengzhou‘,‘450000‘,‘33332‘);
mysql> insert into orders(o_num,o_date,c_id)
    -> values(30001,‘2008-09-01‘,10001),
    -> (30002,‘2008-09-12‘,10003),
    -> (30003,‘2008-09-30‘,10004),
    -> (30004,‘2008-10-03‘,10005),
    -> (30005,‘2008-10-08‘,10001);

13、表联接类型的概念

在进行接下来的查询,这里有必要说一下多表查询的相关概念。

1)内联接

内联接(inner join)是最常见的一种联接方式,只返回两个数据集合之间匹配关系的行,将位于两个互相交叉的数据集合中重叠部分以内的数据行联接起来。

内联接使用比较运算符进行表间某些列数据的比较操作,并列出这些表中与联接相匹配的数据行。

2)外联接

外联接(outer join)是对内联接的扩充,除了将两个数据集合中重复部分以内的数据行联接起来之外,还可以根据要求返回左侧或右侧表中非匹配的数据或全部的数据。

外联接还可以分为以下几种:

左外联接(left join或left outer join)的结果包括左表的所有行,如果左表的某一行在右表中没有匹配行,则右表返回空值,否则返回相应值。

右外联接(right join或right outer join)是左外联接的反向联接,将返回右表的所有行,如果右表的某一行在左表中没有匹配行,则左表返回空值,否则返回相应值。

全联接(full join 或full outer join)将返回左表和右表中的所有行,当某一行在另一个表中没有匹配行时,另一个表返回空值,否则返回相应值。

14、内联接查询,将两个表的指定列生成一个新表

mysql> select suppliers.s_id,s_name,f_name,f_price from fruits inner join suppliers on fruits.s_id = suppliers.s_id;

返回的结果如下:

15、左外联接查询示例

mysql> select customers.c_id,orders.o_num from customers
    -> left outer join orders on customers.c_id = orders.c_id
    -> ;

返回结果如下:

16、内联接查询时指定其他条件

mysql> select customers.c_id,orders.o_num from customers
    -> left outer join orders on customers.c_id = orders.c_id
    -> ;

返回结果如下:

———————— 本文至此结束,感谢阅读 ————————

原文地址:https://blog.51cto.com/14154700/2456794

时间: 2024-08-30 11:49:39

MySQL基本查询示例(2)的相关文章

MySQL基本查询示例

1.创建所需表及插入数据 <!--创建表--> mysql> 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) ); <!--插入数据--> mysql> insert into fruits(f_id,s_id,f_name,f_price

mysql高级排序&amp;高级匹配查询示例

在大多数应用场景下,我们使用mysql进行查询时只会用到'=', '>' , '<' , in, like 等常用的方法,看起来,大多数情况下,已经足以应付我们的小型应用了.不过,在一些特殊场景,则需要特殊的查询方式了. 1. 根据状态来排序的查询 假设现在一个记录有四种状态,未处理(0).正在处理(2).处理成功(1).处理失败(4),之所以他们的值是这个样子,是因为我们一般情况下是不会用它去排序,所以自然的就想到这样的一些值赋予意义.但是,在排序的时候怎么处理呢? 假如要求的先后顺序是这样

Mysql——子查询

子查询的位置: select 中.from 后.where 中.group by 和order by 中无实用意义. 子查询分为如下几类: 1,标量子查询:返回单一值的标量,最简单的形式. 2,列子查询:返回的结果集是 N 行一列. 3,行子查询:返回的结果集是一行 N 列. 4,表子查询:返回的结果集是 N 行 N 列. 可以使用的操作符:= > < >= <= <> ANY IN SOME ALL EXISTS 标量子查询:是指子查询返回的是单一值的标量,如一个数字

MySQL慢查询日志相关的配置和使用。

MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可以记录到慢sql了,实话讲,相比较sqlserver的trace或者扩展事件(虽然此二者的作用并非仅仅如此),MySQL的配置总是给人一种非常清爽的感觉. 1,慢查询日志的打开 正常情况下,只需要在配置文件中增加slow_query_log = 1配置,即打开慢查询日志,未指定slow_query_

MySQL慢查询(二) - pt-query-digest详解慢查询日志

一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析.可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间.次数.占比等,可以借助分析结果找出问题进行优化. 二.安装pt-query-digest 1.下载页面:https://www.pe

[django/mysql] 使用distinct在mysql中查询多条不重复记录值的解决办法

前言:不废话.,直接进入正文 正文: 如何使用distinct在mysql中查询多条不重复记录值? 首先,我们必须知道在django中模型执行查询有两种方法: 第一种,使用django给出的api,例如filter value distinct order_by等模型查询api; 代码:LOrder.objects.values('finish_time').distinct() 这里应注意,原官方文档中写到: 示例(第一个之后的示例都只能在PostgreSQL 上工作): >>> Au

MySQL模糊查询:LIKE模式和REGEXP模式

MySQL模糊查询提供了两种模式:LIKE模式和REGEXP模式. LIKE模式 LIKE模式是使用的LIKE 或 NOT LIKE 比较运算符进行模糊查询. SELECT 字段 FROM 表 WHERE 字段 LIKE[NOT LIKE] '条件' 针对条件,有以下几种通配符: 通配符 含义 % 表示任意一个或多个字符,可匹配任意类型和长度的字符 _ 表示任意单个字符,匹配单个任意字符 ESCAPE 关键字定义转义符.在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符. 示例: #

Oracle和MySQL分组查询GROUP BY

Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段必须在GROUP BY后边出现,否则会报错:“ORA-00979: not a GROUP BY expression”.而MySQL则不同,如果SELECT出来的字段在GROUP BY后面没有出现,那么会随机取出一个值,而这样查询出来的数据不准确,语义也不明确.所以,作者建议在写SQL语句的时候,

mysql慢查询功能详解

有人的地方就有江湖,数据库也是,sql优化这个问题,任重道远,我们总是禁不住有烂sql.怎么办呢,还好各大数据库都有相关烂sql的收集功能,而mysql的慢查询收集也是异曲同工,配合分析sql的执行计划,这个优化就有了搞头了. 开启mysql慢查询日志1.查看当前慢查询设置情况 #查看慢查询时间,默认10s,建议降到1s或以下, mysql> show variables like "long_query_time"; +-----------------+----------+