一、SQL查询

SQL查询的执行顺序,先对表中现有的字段进行筛选(1、where),再进行聚合分组(2、group),然后根据查询条件进行查找(3、select),紧接着对筛选的结果在再筛选(4、having),接下来根据条件进行排序(5、order),最后对记录的显示进行限制(6、limit)。
            3、select ...聚合函数 from 表名
            1、where ...
            2、group by ...
            4、having ...
            5、order by ...
            6、limit ...;

1、order by

给查询的结果进行排序
            语法:order by 字段名 排序方式
            排序方式
                    a、升序 :ASC(默认)
                    b、降序 :DESC

1、将蜀国的英雄按照攻击值从高到低排序
select * from sanguo
where country="蜀国"
order by gongji DESC;
2、将魏蜀两国的男英雄中名字为三个字符的英雄按防御值升序排列
select * from sanguo
where country in("蜀国","魏国") and sex="男" and name like "___"
order by fangyu ASC;

2、limit(永远放在SQL语句的最后)

限制显示查询记录的个数

a、用法

1)limit n  -->显示n条记录
                2)limit m,n  
                        m :表示从 m+1 条记录开始显示
                        n :表示显示 n 条
                        limit 2,4 :显示第3、4、5、6四条记录
                        limit 0,2 :显示第1、2两条记录

b、示例
1、在蜀国英雄中查找攻击值前三名且名字不为NULL的英雄姓名、攻击值和国家
select name,gongji,country from sanguo
where country="蜀国" and name is not NULL
order by gongji DESC
limit 3;
2、在蜀国英雄中,查找防御值倒数第2名至倒数第4名的英雄信息
select * from sanguo
where country="蜀国" order by fangyu limit 1,3;
c、分页查询

每页显示5(n)条记录,显示第4(m)页
                        第1页:limit 0,5   ## 1 2 3 4 5
                        第2页:limit 5,5   ## 6 7 8 9 10          ## (2-1)*5
                        第3页:limit 10,5 ## 11 12 13 14 15  ##(3-1)*5
                        第4页:limit 15,5 ## 16 17 18 19 20  ##(4-1)*5
            
                分页公式:limit (m-1)*n,n  m:第几页 n:每页显示记录条数

3、聚合函数

avg(字段名) : 平均值
                max(字段名) : 最大值
                min(字段名) : 最小值
                sum(字段名) : 求和
                count(字段名) : 统计该字段记录的个数

1、攻击力最强值
select max(gongji) as best from sanguo;
2、统计一下表中id、name字段分别有多少条记录
select count(id),count(name) from sanguo;
## 空值NULL不会被统计
select count(*) from sanguo;
3、统计蜀国英雄中攻击值大于200的英雄的数量
select count(*) from sanguo where country="蜀国" and gongji > 200;

4、group by(先分组-再聚合-去重)

给查询的结果进行分组

a、示例

计算所有国家的平均攻击力,显示国家名和平均攻击力

                select country,avg(gongji) from sanguo group by country; 
先分组  -  再聚合  -   去重

蜀国    
                        蜀国         400       蜀国
                        蜀国
                        魏国         300       魏国
                        魏国
                        吴国         200       吴国

查找所有国家中,英雄数量最多的前2名,显示国家名称和英雄数量
select country,count(*) as number from sanguo
group by country
order by number DESC limit 2;
b、注意

1)group by之后的字段名必须要为select之后的字段名
                    2)如果select后的字段名和group by之后的字段不一致,则必须对该字段进行聚合处理(聚合函数)

5、having

对查询结果进一步筛选

找出平均攻击力大于105的国家的前2名,显示国家名称和平均攻击力
select country,avg(gongji) from sanguo
group by country
having avg(gongji)>105
order by avg(gongji) DESC limit 2;

注意
                       1)having语句通常与group by语句联合使用,用来过滤由group by语句返回的记录集
                       2)having语句的存在弥补了where条件子句不能与聚合函数联合使用的不足,where操作的是表中实际存在的字段,having操作的是聚合函数生成的显示列

6、distinct

不显示字段的重复值

1、sanguo表中有哪些国家
select distinct country from sanguo;
2、计算魏国一共有多少个英雄
select count(distinct name) from sanguo
where country="魏国";

注意
                        1)distinct处理的是distinct和from之间的所有字段,所有字段的值必须完全相同才可以去重
                        2)distinct不能对任何字段做聚合处理

7、查询表记录时的数学运算

a、运算符

+   -   *    /    %

b、示例
查询时显示所有英雄的攻击力 * 10
select name,gongji*10,country from sanguo;

二、约束

1、作用

为了保证数据的完整性、一致性、有效性,可以限制无效的数据插入到数据表中

2、约束分类

a、默认约束(default)

在插入记录时,如果不给该字段赋值,则使用默认值
                格式:字段名 数据类型 default 默认值,

create  table  tt(sex  enum("男","女","保密") default  "保密");
desc   tt ;
b、非空约束

不允许该字段的值有空值NULL记录
                格式:字段名 数据类型 not null,

create  table xx(id  int  not  null,name  varchar(20)  not  null);
desc  xx;

三、嵌套查询(子查询)

把内层的查询结果作为外层的查询条件

格式:select ... from 表名 where 字段名 运算符(select ....);

1、把攻击值小于 平均攻击值 的名字和攻击值显示出来(分两步)
select name,gongji from MOSHOU.sanguo
where gongji < (select avg(gongji) from MOSHOU.sanguo);
2、找出每个国家攻击力最高的英雄名字和攻击值
select name,gongji from sanguo
where (country,gongji) in (select country,max(gongji) from sanguo group by country);

四、附录1:数据库数据创建

为了方便,建立直接复制、黏贴以下代码,快速创建数据库和表。

create database MOSHOU;
use MOSHOU;
create table hero(
id int,
name char(15),
sex enum("男","女"),
country char(10)
)default charset=utf8;
insert into hero values
(1,"曹操","男","魏国"),
(2,"小乔","女","吴国"),
(3,"诸葛亮","男","蜀国"),
(4,"貂蝉","女","东汉"),
(5,"赵子龙","男","蜀国"),
(6,"魏延","男","蜀国");use MOSHOU;
create table sanguo(
id int,
name char(20),
gongji int,
fangyu tinyint unsigned,
sex enum("男","女"),
country varchar(20)
)default charset=utf8;
insert into sanguo values
(1,'诸葛亮',120,20,'男','蜀国'),
(2,'司马懿',119,25,'男','魏国'),
(3,'关6羽',188,60,'男','蜀国'),
(4,'赵云666',200,66,'男','魏国'),
(5,'8孙权',110,20,'男','吴国'),
(6,'貂蝉',666,10,'女','魏国'),
(7,null,1000,99,'男','蜀国'),
(8,'',1005,88,'女','蜀国');

五、附录2

人工智能(mysql)—— 目录汇总

人工智能(mysql)—— mysql完整的sql查询相关推荐

  1. kettle 查询数据库写入文件_怎么连接数据库-详解如何用kettle连接mysql数据库并导出sql查询结果...

    概述 今天主要介绍下kettle怎么去连接mysql数据库及导出sql查询结果. 1.数据库链接驱动 如果没有安装对应的数据库驱动,在数据库连接的过程中,可能会报某个数据库连接找不到的异常,因此需要下 ...

  2. Mysql常规27种sql查询语句

    Mysql常规27种sql查询语句 话不多说,直接上干货 1.查询部分列 select 列名 from 表名 例:员工表中查询员工编号.名字.邮箱 select employee_id,employe ...

  3. mysql 查询执行过程_深入浅出Mysql(一)——sql查询执行过程

    一.sql查询执行过程概括 下面给出的mysql基本架构示意图,从中你可以清楚的mysql的各个模块和执行过程. 大体来说可以分为两部分Server层和储存引擎层.Server层包括连接器.查询缓存. ...

  4. IDEA连接MySQL数据库并执行SQL查询操作

    打开IDEA后,新建一个项目或者在已有项目上均可操作!!! 1 打开数据库页面 1.1 方式一 在主页面工具栏上找到View(视图)-Tool Windows(工具窗口)-Database(数据库), ...

  5. 「MySQL」- 复杂的SQL查询语句

    任意门 前言 聚合查询 1.聚合函数 count函数 sum函数 avg函数 max函数 min函数 2.分组查询 having子句 多表查询 1.笛卡尔积 2.内连接 3.外连接 左外连接 右外连接 ...

  6. Hello MySQL(五)——SQL查询

    一.单表查询 1.查询所有字段 在SELECT语句中使用星号"*"通配符查询所有字段 在SELECT语句中指定所有字段 select * from `TStudent`; 2.查询 ...

  7. MySQL充电_Mysql 充电站SQL查询1--171221--mysql-sql

    Mysql 充电站SQL查询1--171221--mysql-sql --当月至现在查询支付成功后未成功充电的情况 select c.a 失败数,c.b 总数,c.a1,c.cs 失败率,c.cc 成 ...

  8. Mysql常用30种SQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  9. MySQL 常用30种SQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描.2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及 ...

最新文章

  1. 15个可交互的真实房屋场景,Silvio/李飞飞组开源大型室内场景的模拟环境iGibson...
  2. tensorflow knn 预测房价 注意有 Min-Max Scaling
  3. UVa 11000 - Bee
  4. 1049 Counting Ones (30 分)【难度: 难 / 知识点: 分治 / DP】
  5. OC中的几种延迟执行方式
  6. Git:Rebase和Merge之间的区别,看完这篇文章你就懂了!
  7. Python变量类型
  8. JSON中JObject和JArray,JValue序列化(Linq)
  9. 2017年3月4月无人机航空摄影总结
  10. 玩转微信个性化头像,一键加V/加字/加图片
  11. 技术分析是我的唯一信仰
  12. 解决表格刷新时抖动闪烁问题
  13. 兆骑科创创新创业服务平台,海内外高层次人才引进,活动赛事
  14. 图片过大怎么办?如何把图片压缩到最小
  15. 存储与虚拟主机管理,克隆虚拟机的详细讲解
  16. 两个umijs/max项目使用微前端简单示例
  17. 设计模式---观察者模式(Observer)和委托事件模型(DEM)
  18. Oracle connect by与level的使用
  19. Wish旺季促销活动安排路透,让无数跨境人趋之若鹜!备战重点已划好...
  20. (六)类和对象(二)const

热门文章

  1. APICloud平台常用技术点汇总详解
  2. 一些好的网页设计工具
  3. 02 Python的自我介绍(数字、字符串、列表)
  4. verilog并行数据转换为串行输出
  5. 小白怎么做一个轮播图?(思路+代码)
  6. PC上网页端屏蔽知乎上的视频
  7. 多少牛逼的程序员毁在low逼的英文发音上(JAVA)
  8. 一次幸运的校招小米Java后台offer(1),Java面试2021
  9. 使用js转换数据库时间类型
  10. web服务器—nginx