mysql的查询--子查询,order by,group by,having
一、
1.多表查询
格式1:
select 字段列表
from 表1 join 表2 on 表1.字段1=表2.字段1
where 查询条件
格式2:
select 字段列表
from 表1 join 表2 on 表1.字段1=表2.字段1
join 表3 on 表2.字段2=表3.字段2
where 查询条件
格式3:
select 字段列表
from 表1,表2
where 表1.字段1=表2.字段1 and 查询条件
二、子查询
说明:在查询条件中,可以使用另一个查询的结果作为条件的一部分;另一个查询的结果就是子查询。
格式:
select 字段列表
from 表1
where 字段 in/exist/比较运算符 (子查询)
参数说明:in(用于进行一个给定值是否在子查询结果集中的判断)
any/some:比较时,只要有满足条件的即可。
all:比较时,必须所有都满足条件。
exists:用于测试子查询的结果是否为空表,若不为空返回True。
例如:exists
select * from sell as a where exists(
select * from book as b where b.图书编号 = a.图书编号 and 图书类别="网页设计");
三、准备工作
1.获取到.sql源码
2.打开mysql的 workbench 窗口;登陆密码admin@user
3.复制源码的所有代码,粘贴到mysql窗口的查询中,并运行 (即可得到数据库)
4.刷新数据库列表,并在数据库名上双击 (目的:让数据库为当前数据库)
操作1:查找订购册数为7的图书信息
分析:用到两个表sell,book;共有的字段是图书编号;最后要的结果是图书信息;而条件是订购表的信息;
方法1:多表查询
select book.*
from sell join book on sell.图书编号 = book.图书编号
where sell.订购册数=7;
方法2:子查询
select * from book
where 图书编号 in (select 图书编号 from sell where 订购册数=7);
操作2:查找购买了除“网页程序设计”以外图书的会员信息
方法1:
步骤1:找到图书表中除“网页程序设计”外的图书编号
步骤2:通过找到的图书编号,在sell表中查找身份证号
步骤3:通过找到的身份证号,查找会员表的会员信息。
-- 步骤1:
select 图书编号 from book where 书名="网页程序设计";
-- 步骤2
select distinct 身份证号 from sell where 图书编号 not in(
select 图书编号 from book where 书名="网页程序设计");
-- 步骤3
select * from members where 身份证号 in(
select distinct 身份证号 from sell where 图书编号 not in(
select 图书编号 from book where 书名="网页程序设计"));
操作3:查询book表中所有比“网页设计”类图书价格都高的图书基本信息。
-- 步骤1:找到网页设计类图书的所有价格
-- 步骤2:找出比较以上价格都高的图书信息
select * from book where 单价>all(
select 单价 from book where 图书类别="网页设计");
-- 等价于
select * from book where 单价>(
select max(单价) from book where 图书类别="网页设计");
select * from book where 单价>any(
select 单价 from book where 图书类别="网页设计");
-- 等价于
select * from book where 单价>(
select min(单价) from book where 图书类别="网页设计");
练习:查询所有比会员“李华”订购的图书单价都高的订购信息。
select * from sell where 订购单价>all(
select 订购单价 from sell where 身份证号 in (
select 身份证号 from members where 会员姓名="李华"));
四、分类汇总和排序
1.分类汇总:按某列进行分类,并对每一类进行统计。
select
from
where
group by 列名 having 分组条件
例如:统计男生的人数;再统计女生的人数;
例如:统计不同性别的人数;
执行顺序:from----where----group by----having-----select---order by---limit
2.having条件:必须跟在group by后,是对分组结果的筛选。
3.order by 字段名 asc/desc:对查询结果进行排序。
4.limit n: 筛选前n个结果返回
limit m,n :筛选从第m个往后的n个
-- 1、limit关键字
select * from sell;
select * from sell limit 3;
select * from sell limit 3,4;
-- 2、order by关键字
select * from sell order by 身份证号;
select * from sell order by 身份证号,订购单价 desc;
-- 3、group by 关键字
-- 统计计算机类图书的单价平均值
select avg(单价) as 单价平均值 from book where 图书类别="计算机";
select avg(单价) as 单价平均值 from book where 图书类别="网页设计";
-- 统计每类图书的单价平均值
select 图书类别,avg(单价) as 单价平均值 from book group by 图书类别;
-- 统计每类图书的单价平均值 ,找出平均单价大于27的信息;
select 图书类别,avg(单价) as 单价平均值 from book group by 图书类别 having 单价平均值>27;
日行一善:
今天看到几个学校的学生在教学楼楼道抽烟(关键还有一个女生,虽然动作很帅),但这是公共场所。我就友情提醒,他们要到洗手间抽烟。娃们很礼貌的就去了。
日进一步:
今天上午的课,手机没有怎么玩,看了一会爬虫的书。
mysql的查询--子查询,order by,group by,having的更多相关文章
- oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by
select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...
- MySQL里面的子查询
一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任何子句,比如:dis ...
- MySQL的查询,子查询,联结查询,联合查询
MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...
- MYSQL 查询方法 统计查询 链接查询 子查询
mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as ...
- 【MySQL】02_子查询与多表查询
子查询 指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入. SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者 ...
- MySQL中IN子查询会导致无法使用索引
今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表 ...
- MySQL中in子查询会导致无法使用索引问题(转)
MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, pay_id int, pay_time ...
- mysql 数据操作 多表查询 子查询 介绍
子查询就是: 把一条sql语句放在一个括号里,当做另外一条sql语句查询条件使用 拿到这个结果以后 当做下一个sql语句查询条件mysql 数据操作 子查询 #1:子查询是将一个查询语句嵌套在另一个 ...
- MySQL数据库:子查询的应用
子查询 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. # 子查询的用法 # 在字段 select (select cNam ...
- mysql关联、子查询索引优化
1.驱动表:加索引不起作用,因为全表扫描.表1 left join 表2 ,此时表1是驱动表 被驱动表:给这个加索引. 关联查询 子查询时 尽量不使用not in 或者not exists 而是用 ...
随机推荐
- C#MSDN简体中文 最后一版本 2007年的
我在学习C# 需要 先看 MSDN文档,英文看的很吃力,就找了好久 MSDN简体中文版本的: 因为微软已经关闭网站(MSDN中文的链接),我找到的就是 磁力链接的: 我分享出来 ,有需要的 自行下载 ...
- Python抓取数据具体流程
之前看了一段有关爬虫的网课深有启发,于是自己也尝试着如如何过去爬虫百科"python"词条等相关页面的整个过程记录下来,方便后期其他人一起来学习. 抓取策略 确定目标:重要的是先确 ...
- centos mail 发邮件
1.安装mailx yum -y install mailx 2. /etc/mail.rc 最后增加邮件配置如 set smtp=smtp.qq.comset smtp-auth=loginset ...
- 十大经典排序之计数排序(C++实现)
计数排序 核心思想:计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中. 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数. 思路: 找出待排序的数组中最大和 ...
- 跨域请求 jQuery的ajax jsonp的使用
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- Asp.net zero项目框架和配置
- centos 添加yum源失败,ping 百度没响应
1. curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.r ...
- MYSQL5.7实现递归查询
根据父id查出所有子级,包括子级的子级,包括自身的id sys_tenant_company_relation为关联表, company_id为子id,parent_company_id为父id SE ...
- mysql80解决不支持中文的问题
1.查看mysql80字符集 show variables like 'character_set%'; 2.修改server编码格式 在mysql安装目录下找到my-default.ini文件并复制 ...
- Jenkins搭建项目过程中遇到的问题解决方法
1.运行时,报没有权限 报错: rm -rf '/root/jar/*' rm: cannot remove '/root/jar/*': Permission denied 解决方法: 将Jenki ...