相信很多人和我一样,学习sql 就是记忆各种sql的语法,但是记了一大堆的语法,在遇到实际查询问题时又无从下手的感觉。本文主要是针对sql 中select用法的总结,用于帮助大家解决记了相关语法却不知如何应用的问题。

首先对select查询用法有一个大概的了解:分组查询(group by), 连接查询(join), 聚合查询(使用到sum,avg等函数)。遇到具体查询问题,心里有一个方向,要使用哪种查询方式。

在MySql中,查询格式为:

select 

eg1: 现有一张商品销售表sales_info, 有四列属性分别为商品编号id, 日期date,对应日期价格price, 销售量sales_num; 这张表记录了不同商品在不同日期以各种价格对应的销售量。

一、分组查询(group by)

group by 关键字可以将查询结果按某个字段或多个字段进行分组,字段中值相等的为一组

语法规则;

group by 属性名 [having 条件表达式] [with rollup]

1.单独使用group by 时,只能查询出每个分组的第一条记录,一般在使用集合函数时才使用。

2. group_concat()函数可以将每个分组中指定字段值都显示出来。

3. having 条件表达式,作用于分组后的记录,用于选择满足条件的组。

4. 多个字段分组,先按照第一个字段分组,若第一个字段相等,再按第二个,以此类推。

5.with rollup 将会在所有记录的最后一条加上一条记录:上面所有记录的总和。

以eg1为例,现需要统计不同商品最大的售价:

select id , max(price) as max_price from sales_info
group by id with ollup

现需查询不同商品的销售总量小于100的商品以及销售总量:

select 

二、连接查询

连接查询是将两个或两个以上的表按某些条件连接起来,从中选取需要的数据。可以分为内连接查询(通过where实现)和外连接查询(join)。

内连接查询:只有不同表中有相同意义的字段时才能进行连接,而且内连接查询只查询出指定字段取值相同的记录。

一般语法:
select a.* , b.*
from table_a as a, table_b as b
where a.id = b.id;

外连接查询:需要通过指定字段来进行连接。当该字段取值相等时,可以查询出该记录;而且当该字段不等时,也可以查询出来。包括左连接,右连接查询。

一般语法:
select 属性名列表
from 表1
left | right join 表2
on 表1.属性名 = 表2.属性名;

1.进行left join 时,可以查询出表1中所有的记录;只能查询出表2匹配的记录。

2. 与1相反。

3.使用外连接查询时,可以加上各种条件进行筛选。

select table1.column1, table2.column1
from table1
join table2
on table1.column2 = table2.column3;select table1.column1, table2.column1
from table1,table2
where table1.column2 = table2.column3;

三、子查询

子查询时将一个查询语句嵌套在另一个查询语句中,内层查询语句的查询结果,可以为外层查询语句提供查询条件。在特定情况下:一个查询语句的条件需要另一个查询语句来获取。

子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。

子查询可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和union等;但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set或 者do。

注:一个查询语句只能有一个order by ,在子查询中只能位于外部查询后面.

1.分类

子查询分为如下几类:
1). 标量子查询:返回单一值的标量,最简单的形式。
2). 列子查询:返回的结果集是 N 行一列。
3). 行子查询:返回的结果集是一行 N 列。
4). 表子查询:返回的结果集是 N 行 N 列。
可以使用的操作符:= > < >= <= <> ANY IN SOME ALL EXISTS

释义:一个子查询会返回一个标量(就一个值)、一个行、一个列或一个表,这些子查询称之为标量、行、列和表子查询。

2.带有any关键字的子查询

any关键字表示满足其中任一条件,使用any关键字时,只要满足内层查询语句返回的结果中的任何一个,就可以通过该条件来执行外层查询语句。

从computer表中查询哪些人分数高于任何一个奖学金的最低分。

select * from computer_stu
where score >= ANY(select score From  scholarship);

3. 带有all关键字的子查询

表示需要满足所有的条件。只有满足内层查询语句返回的所有结果,才可以执行外层查询语句。

4.带有exists关键字的子查询

exists关键字表示存在,内层查询语句不返回查询的记录,而是返回一个真假值,如果内层查询语句查询到满足条件的记录,就返回一个true,外层查询语句将进行查询。

select * from employee
where exists (select d_name from department where d_id = 1003);
//如果department存在d_id为1003,则查询employee表。

还可以分为相关子查询,独立子查询。以上子查询与外层查询没有关联,称为独立子查询,如果子查询有用到外层查询的字段,则称相关子查询,相关子查询容易产生性能问题。

最后来做个小练习吧,考考你掌握的如何。

eg1: 现有一张商品销售表sales_info, 有四列属性分别为商品编号id, 日期date,对应日期价格price, 销售量sales_num; 这张表记录了不同商品在不同日期以各种价格对应的销售量。

部分数据如下:

id date price sales_num

10_1004717 20170701 5900 0

10_1004717 20170702 5900 0

10_1004717 20170703 5900 0

10_1004717 20170704 5900 0

10_1004717 20170705 5900 10

10_1004717 20170706 5900 30

10_1004717 20170707 5900 0

10_1004717 20170708 5900 0

10_1004717 20170709 5900 0

10_1004717 20170710 5900 0

10_1004717 20170711 5900 4

10_1004717 20170712 5900 0

10_1004717 20170713 5900 0

10_1004717 20170714 5900 0

10_1004717 20170715 5900 0

10_1004717 20170716 5900 0

10_1004717 20170717 5900 0

10_1004718 20170701 6300 0

10_1004718 20170702 6300 0

10_1004718 20170703 6300 0

那么问题来了:要查询7月1日到7月15日期间,总销量最大的500种商品,以及每种商品单日销量最大那天的日期、价格、销量。(这三种数据并非一一对应)

exists sql用法_彻底弄懂sql select各种查询用法相关推荐

  1. 导出sql文件_(一)SQL基本知识

    一 .SQL的特点 1.综合统一:SQL集数据定义语言DDL.数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生 命周期中的全部活动(定义关系模式,插入数据,建立数据库:对数据库中的数 ...

  2. 为什么preparedstatement能防止sql注入_使用Python防止SQL注入攻击的实现示例

    文章背景 每隔几年,开放式Web应用程序安全项目就会对最关键的Web应用程序安全风险进行排名.自第一次报告以来,注入风险高居其位!在所有注入类型中,SQL注入是最常见的攻击手段之一,而且是最危险的.由 ...

  3. 转储sql文件_在Linux上SQL Server中更改SQL转储文件位置

    转储sql文件 In this article, we will talk about SQL Dump files and the process to change the dump direct ...

  4. java 日志打印sql语句_利用log4j打印sql的log日志

    默认情况下,使用ibatis是不打印ibatis相关的log的,因为内部的sql执行都是内部调用,在server的控制台是不 会 打印log的. 在log4j的配置文件log4j.properties ...

  5. python实现sql数据处理_再见Python, 你好SQL

    原标题:再见Python, 你好SQL 雄凌求职:专注求职内推.金融名企实习内推的教育平台.可内推投行部.研究部门.互联网.私募.基金.四大.咨询等实习和工作岗位.专注大学生背景提升.工作求职.留学申 ...

  6. java接口防抖_彻底弄懂节流和防抖

    节流和防抖 这两个东西,你肯定听过,就是两种优化浏览器性能的手段.相关文章你肯定也看过,如果还是不太清楚,没关系,看完这篇短文,相信你能轻松理解其中差别. 防抖(deounce) 我们先说防抖吧,这里 ...

  7. mysql中以下正确的sql是_总结MySQL中SQL语法的使用

    --where子句操作符: where子句操作符 = 等于 <> 不等于(标准语法) != 不等于(非标准语法,可移植性差) < 小于 <= 小于等于 > 大于 > ...

  8. 程序员 sql面试_非程序员SQL使用指南

    程序员 sql面试 Today, the word of the moment is DATA, this little combination of 4 letters is transformin ...

  9. mysql 运行sql 编码_关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题...

    关于解决运行 sql 文件时, 找不到 MySQL 默认编码 utf8mb4 的问题 本人小白一名, 最近碰到了一个问题, 在 navicat 导入 MySQL 文件时, 报出 MySQL 找不到 u ...

最新文章

  1. mysql需要下载调试_Mysql安装和调试
  2. 英伟达jetson TX1的caffe-ssd配置
  3. Apache Tomcat 5.5 Servlet/JSP 容器
  4. 7.python字符串-内置方法分析
  5. KVM虚拟化的简单概论
  6. 第一次失效_爱搞机官方出品!永不失效的看片神器,第一次使用就爱上了
  7. 工作的习惯,看到好收藏下
  8. linux命令之ln 命令
  9. php 立即执行函数,关于javascrip的立即执行函数的解析
  10. 考上了乡镇的公务员,又不想去了,很纠结,怎么办?
  11. MS CRM 2011 Audit
  12. CSS3新属性:在网站中使用访客电脑里没有安装的字体
  13. H5 37-背景缩写
  14. windows.location属性(常用知识点)
  15. 国家语言文字工作委员会3500个常用字
  16. JUnit5学习之一:基本操作
  17. pip install scikit-image安装失败,而且通过transform.rescale(img,0.6)时,原图像的通道数3变为2了,怎么解决?
  18. 植物大战僵尸 辅助 总结
  19. 【资料】哈代拉马努金相关,悼文,哈佛演讲,及各种杂七杂八资料整理
  20. [NCTF 2018]签到题

热门文章

  1. 手机python3ide加法器_Python3开发常用工具
  2. 为什么要在WebAssembly中使用Rust?
  3. raspberry pi_使用Raspberry Pi和pi-hole阻止网络上的广告
  4. git拉取请求_24个“拉取请求”挑战鼓励卓有成效的贡献
  5. sci写作sci写作模板_有写作错误吗? bibisco简介
  6. HTML5 Canvas中绘制线段
  7. bapi sap 创建物料_DEMO: MIRO 根据物料创建贷项凭证BAPI_INCOMINGINVOICE_CREATE
  8. python远程执行linux命令256_python远程操作Linux——使用paramiko库
  9. xml的应用与dtd约束
  10. [USACO4.2] 草地排水 Drainage Ditches (最大流)