首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL数据库(三)

一、聚合查询 (一)聚合函数 函数与括号之间不能有空格 1、count  查询到的数据的数量,null不会计入结果 select count(列名) from 表名; 同时,也可以使用全列查询: select...,不是数字没有意义,不能进行全列查询 select avg(列名) from 表名; 4、max 查询到的数据的最大值,不是数字没有意义,不能进行全列查询 select max(列名) from 表名;...5、min 查询到的数据的最小值,不是数字没有意义,不能进行全列查询 select min(列名) from 表名; 二、分组查询 (一)group by 指定一个列,把列里面相同的值分为一组进行查询...(一)内连接 select *from 表1,表2; 也可以在结合两表时,加一些条件限制表的内容: select *from 表1,表2 where 条件; 也可以使用join on 表达式,列如: select...表3 on 条件; (三)自连接 自连接就是自己和自己连接,本质就是把行关系转为列关系 自连接需要指定表的别名!!

22530

SQL查询的高级应用

定义格式为:   列标题=列名   列名 列标题   如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题: SELECT 昵称=nickname,电子邮件...在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。...join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接 内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。...内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。...内连接分三种: 1、等值连接: 在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【MySQL篇】聚合查询,联合查询

    ,不是数字没有意义 MIN([DISTINCT] expr) 返回查询到的数据的 最小值,不是数字没有意义 案例: COUNT 作用:返回某列的非 NULL 值的数量,或返回满足条件的行数。...语法 COUNT(column_name) -- 统计指定列非 NULL 的值的数量 COUNT(*) -- 统计所有行的数量 当具体对某个列查询的时候 count会关注null...如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。...join 表名2 on 连接条件; 内连接: 左外连接: 右外连接: 俩张表存在一一对应的情况 ,所有内连接和外连接找到的结果都是一致的; 当修改其中某个值,让它们不保存一一对应的情况...内连接: 左外连接: 右外连接: 当对应不存在的列 会用null填充 3 自连接 自连接是指在同一张表连接自身进行查询。

    9710

    Mysql之联合查询那些事儿

    Mysql之联合查询那些事儿 联合查询之union union可以合并两个以上 select语句查询出来的表,并消除表中的重复行。 其中,select语句需要拥有相同数量和相同数据类型的列。 1....统计各省地级市的数量,输出省名、地级市数量 select T_City.ProID,ProName,count(CityID) as cc from( T_City join T_Province...两个表之间需要有共同的(列名不一定相同)“语言”才能join。 可以给表起个别名,将T_City表的别名设为tc,将T_Province的别名设为tp。...区县最多的3个城市是哪个省的哪个市,查询结果包括省名,市名,区县数量 select tp.ProName,tcd.CityName,tcd.ci from(select ProID,CityName,count...left join&right join 内连接是基于左右两表公共的部分 左连接是基于左右两表公共的部分加上左表特有的部分 右连接是基于左右两表公共的部分加上右表特有的部分 查询所有省份和它的城市信息

    93520

    MySQL多表查询详解

    (1)别名通常是一个缩短了的表名,用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名(2)如果定义了表的别名就不能再使用表名三合并多个结果集SQL语言中,...SELECT 语句的查询结果合并输出,但不会删除重复行在使用UNION或ALL关键字将多个表合并输出时,查询结果必须具有相同的结构并且数据类型必须兼容,另外使用UNION时两张表的字段数量也必须相同,否则会提示...,在外层语句中的WHERE子句内命名的列必须与内层子查询命名的列兼容(2)由不可更改的比较运算符引入的子查询(比较运算符后面不跟关键字ANY或ALL)不包括GROUP BY 或 HAVING子句,除非预先确定了成组或单个的值...INNER JOIN tb_demo065_tel AS b on a.id=b.id十四复杂内连接查询复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件,如:SELECT a.name,...,通过WHERE 子句或内连接INNER JOIN … ON 语句将两表连接起来,实现查询十五使用外连接实现多表联合查询(1)LEFT OUTER JOIN表示表之间通过左连接方式相互连接,也可简写成LEFT

    1.5K10

    mysql 多表查询

    (1)别名通常是一个缩短了的表名,用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名 (2)如果定义了表的别名就不能再使用表名 三、合并多个结果集...时两张表的字段数量也必须相同,否则会提示SQL语句有错误。...,在外层语句中的WHERE子句内命名的列必须与内层子查询命名的列兼容 (2)由不可更改的比较运算符引入的子查询(比较运算符后面不跟关键字ANY或ALL)不包括GROUP BY 或 HAVING子句,除非预先确定了成组或单个的值...a INNER JOIN tb_demo065_tel AS b on a.id=b.id 十四、复杂内连接查询 复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件,如: SELECT...,通过WHERE 子句或内连接INNER JOIN … ON 语句将两表连接起来,实现查询 十五、使用外连接实现多表联合查询 (1)LEFT OUTER JOIN表示表之间通过左连接方式相互连接,也可简写成

    5.7K10

    MySQL-多表操作

    多表查询 联合查询 联合查询是多表查询的一种方式,在保证多个SELETE语句的查询字段数相同的情况下,合并多个查询的结果 SELECT··· UNION [ALL|DISTINCT] SELECT···...除此之外,若要对联合查询的记录进行排序等操作,需要使用圆括号“()”包裹每- -个SELECT语句,在SELECT语句内或在联合查询的最后添加ORDER BY语句。...并且若要排序生效,必须在ORDER BY后添加LIMIT限定联合查询排序的数量,通常推荐使用大于表记录数的任意值。 连接查询 交叉连接 交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积。...内连接 内连接是一种常见的连接查询,他根据匹配的条件返回第一个表与第二个表所有匹配成功的记录。...但是在MySQL中,CROSS JOIN与INNER JOIN(或JOIN)语法的功能相同,都可以使用ON设置连接的筛选条件,可以互换使用,但是此处不推荐读者将交叉连接与内连接混用 左外连接 左外连接是外连接查询中的一种

    3.2K20

    【数据库】MySQL进阶八、多表查询

    (1)别名通常是一个缩短了的表名,用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名 (2)如果定义了表的别名就不能再使用表名 三 合并多个结果集...时两张表的字段数量也必须相同,否则会提示SQL语句有错误。...,在外层语句中的WHERE子句内命名的列必须与内层子查询命名的列兼容 (2)由不可更改的比较运算符引入的子查询(比较运算符后面不跟关键字ANY或ALL)不包括GROUP BY 或 HAVING子句,除非预先确定了成组或单个的值...AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id 十四 复杂内连接查询 复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件,如: SELECT...,通过WHERE 子句或内连接INNER JOIN … ON 语句将两表连接起来,实现查询 十五 使用外连接实现多表联合查询 (1)LEFT OUTER JOIN表示表之间通过左连接方式相互连接,也可简写成

    2.4K40

    数据库性能优化-索引与sql相关优化

    对于联合索引“a b c”,在B+树中单独看b是无序的,在a等值匹配下,看b部分是有序的 索引不会包含null值的列 每次对数据进行操作,数据库也会对索引进行相应的操作 索引优化...选取不经常修改的列 对索引列的修改在索引文件中也会进行操作 联合索引中,最好将分辨度大的字段放在前面 计算分辨度公式:select distinct(name)/count(name)...in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。...因而在实际开发中,尽量保持查询简单且只返回必需的数据,减小通信间数据包的大小和数量是一个非常好的习惯。 使用*可能会导致order by不适用索引。...也就是说这种情况下是有三级索引,当name相同,查找age,age也相同时,去比较phoneNum;但是如果拿 (18,'18668247652')来检索时,B+树没有拿到一级索引,根本就无法确定下一步的搜索方向

    1.9K30

    MySQL中B+树索引的应用场景大全

    如果key_part_1和key_part_2列的值都是相同的情况下,那记录是按照key_part_3列的值排序的,所以联合索引中的三个列都可能被用到。   ...,不是联合索引。   ...=(也就是)或者LIKE(只能是'a%'前缀字符形式)操作符连接起来,就可以使用到索引,如果你发现没走索引,请检查自己的结果集是否过多,限制一下结果集数量。...无法通过key_part2 = 'a'这个条件来减少扫描的记录数量,只能全表扫描,不会使用 idx_key_part这个联合索引。...---- 十三、如何更好的创建和使用索引 1.只为用于搜索、排序或分组的列创建索引   只为出现在where子句中的列、连接子句中的连接列,或者出现在order by或group by子句中的列创建索引

    41110

    MySQL规范

    ,并且不要超过32个字符 临时数据库命名要以tmp_ 开头并以日期为后缀,备份表以 bak 为前缀并且以日期为后缀 所有存储相同数据的列名和列类型必须一致(一半作为关联列类型不一致会自动进行数据类型隐形转换...原因 列的字段越大,建立索引时所需要的空间也就越大,这样一页中所能存储的索引节点的数量也就越少也越少,在遍历时所需要的IO次数也就越多, 索引的性能也就越差 方法 1)将字符串转换成数字类型存储,如:...索引设计规范 限制每张表上的索引数量,建议单张不超过5个 禁止给表中的每一列都建立单独的索引 每个Innoodb表必须有个主键 常见索引列建议 1、出现在SELECT、UPDATE、DELETE...1、区分度最高的放在联合索引的最左侧(区分度=列中不同值的数量/列的总行数); 2、尽量把字段长度小的列放在联合索引的最左侧(因为字段长度越小,一页能存储的数据量越大,IO性能也就越好); 3、使用最频繁的列放到联合索引的左侧...b,c列上的索引将不会被用到,在定义联合索引时,如果a列要用到范围查找的话,就要把a列放到联合索引的右侧。

    1.3K20

    一、数据库表设计规范「建议收藏」

    2.第二范式 确保表中的每列都和主键相关 每个表只描述一件事 主要针对联合主键而言,不存在部分依赖,每一列都跟联合主键有关系,而与联合主键中的其中一个键无关系 比如要设计一个订单信息表,因为订单中可能会有多种商品...这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。 3.第三范式 确保每列都和主键列直接相关,而不是间接相关,不存在传递依赖。...(5)不同表之间存储相同数据的列名和列类型必须一致(关联列) (6)优先选择符合存储需要的最小、最简单的数据类型。...因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。...(4)限制每张表的索引数量,建议每张表的索引数量不超过5个,并且针对复合索引,最常用的、区分度最高的(列中不同值数量/列的总行数)、字段长度小的放到最左侧 (5)索引列定义为 not null 索引null

    2.8K20

    理解PG如何执行一个查询-2

    实际上嵌套循环只读取那些满足查询条件的行。嵌套循环算子可用于执行内连接、左外连接和联合。因为不处理整个内表,所以它不能用于其他连接类型:全连接和右连接。...此示例显示了一个内连接,但merge join算子可以通过以不同方式遍历排序的输入集来用于其他连接类型。Merge join可以做内连接、外连接、联合。...相反,内表始终是hash表,外表的顺序不重要。首先使用Hash算法创建内表。Hash算子创建一个临时hash索引,该索引覆盖内表的连接列。...创建hash表后,hash join会读取外表每一行,对连接列(从外表)进行hash,并在临时hash索引种搜索匹配值。Hash join算子可用于执行内连接、左外连接和联合。...这个规则背后的原因并不明显--它更多与其他算子的能力有关而不是数据相关结构或者性能有关。Merge Join算子很复杂,要求输入集必须按连接列排序。另一个要求内部输入集必须可重新定位。

    1.8K20

    ⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询

    表1 [INNER] JOIN 表2 ON 连接条件...; == 内连接查询的是两张表交集的部分 == -- 演示: -- 查询员工姓名,以及关联的部门名称(隐式内连接) -- 表:员工表emp、...`id`; 联合查询 —— UNION、UNION ALL 联合查询: UNION查询就是把多次查询的结果合并,行程新的结果集 -- 使用UNION,对结果去重 -- 使用UNION ALL,不对结果去重...-- 要求联合的多个查询字段列表的 类型与数量 需要保持一致 SELECT 字段列表 FROM 表A ......emp WHERE NAME = '方东白'); ②列子查询(子查询结果为一列) 常见操作符: IN:在指定的集合范围之内,多选一。...NOT IN:不在指定的集合范围之内。 ANY:子查询返回列表内,有任意一个满足即可。 SOME:与ANY相同,使用SOME的地方都可以使用ANY。 ALL:子查询返回列表的所有值都必须满足。

    58880

    MySQL数据库的增删改查(进阶)

    这里需要确保查询集合的列数,类型,顺序要和插入表的列数,类型,顺序一致,这里列的名称可以不一样. values 替换成了select 查询的临时表. 2....查询 2.1 聚合查询 2.1.1 聚合查询 函数 说明 COUNT([DISTINCT] expr) 返回查询到的数据的 数量 SUM([DISTINCT] expr) 返回查询到的数据的 总和,不是数字没有意义...计算每个岗位的平均工资,刨除张三,也刨除平均工资超过2000的数据. 2.2 联合查询 实际开发中往往数据来自不同的表,所以需要多表联合查询。...多表查询是对多张表的数据取笛卡尔积: 首先初始化测试数据; 2.2.1 内连接 语法; select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件...如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完 全显示我们就说是右外连接。

    15010

    数据库中的多表查询总结

    大家好,又见面了,我是你们的朋友全栈君。 数据库在单个表里操作其实很简答,但是涉及在多张表里寻找数据的时候,难度会大大增加,这里解释一些多表联合查询常用的操作。...连接主要有以下四种情况: INNER JOIN(内连接):如果表中有至少一个匹配,则返回行 【在语法中可以省略INNER关键字】 LEFT JOIN(左连接):从左表返回所有的行,如果右表中没有匹配,对应的列返回...Null RIGHT JOIN(右连接):从右表返回所有的行 ,如果左表中没有匹配,对应的列返回Null FULL JOIN(全连接):只要其中一个表中存在匹配,则返回行(即结合左连接和右连接的结果)...请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。 这是在展示结果的时候使用。...那么我把三个表按照对应的联系联合起来即可,格式如下。

    2.9K11

    【MySQL】:深入解析多表查询(下)

    自连接 1.1 自连接查询 1.2 联合查询 二....自连接可以让我们在同一张表中进行多次关联查询,联合查询可以将多个查询结果合并为一个结果集,而子查询则允许我们在查询中嵌套其他查询,实现更复杂的逻辑操作。...我们先来学习一下自连接的查询语法: SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ; 而对于自连接查询,可以是内连接查询,也可以是外连接查询。....; 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。 union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。 案例: A....注意: 如果多条查询语句查询出来的结果,字段数量不一致,在进行union/union all联合查询时,将会报错。如: 二.

    22510

    「mysql优化专题」你们要的多表查询优化来啦!请查收(4)

    上一篇讲的是单表查询的优化,(本文末有链接)。当然,对数据表的多表查询也是必不可少的。本篇内容主要讲解多表联合查询的优化 一、多表查询连接的选择: ?...相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了。这图只是让大家回忆一下,各种连接查询。...where条件,但是用cross join+on也是被解释为cross join+where; 2)一般内连接都需要加上on限定条件,如上面场景一;如果不加会被解释为交叉连接; 3)如果连接表格使用的是逗号...如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。...注意: 1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名 2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。

    2K20

    索引-mysql详解(三)

    二级索引:当不能以主键为查询条件来进行搜索的时候,这时候该怎么办呢,当我们以其他列来建立索引,以其他列来排序组成单向链表,存放数据的页组成双向链表,这种b+树的叶子节点存放的不是所有的数据,存放的时候二级索引和主键...联合索引:每个记录页都是列+页码组成,联合索引是两个列以上,先按前面的列进行排序,如果一致,则按后面的列进行排序,本质上也是一个二级索引,如果是联合索引则只会建立一颗b+树,如果联合索引的两个列分开创建索引...前面我们说了非叶子节点(内节点)存放的是列+页码,但这样是不准确的,如果列的数值都相同,那么他就没有唯一性,于是内节点存储的还有主键值,通过三个值来确定唯一性。...联合索引范围查找的时候,最左边的列是可以使用索引查询的,但如果第二个索引需要使用到的话,最左边的列则不可以使用范围查询,需要精确值,因为只有相同的值才可以之后再排序。...当我们控制数量的时候,比如加个limit10,这时候就会更高级别走索引查询,同样的道理适用于排序,当后面加个limit,这时候会走索引。

    38820
    领券