loannes's blog

分类 · 笔记

首页

关于

归档

loading..
MySQL组合查询

【MySQL必知必会】组合查询

组合查询的使用场景 在单个查询中从不同的表返回类似结构的数据 对单个表执行多个查询,按单个查询返回数据 创建组合查询 可以通过UNION操作符来组合多条SQL查询 查询emp_no为10010以及薪水大于150000的员工 SELECT emp_no,salary FROM salaries WHERE salary > 150000 UNION SELECT emp_no, salary FROM salaries WHERE emp_no = 10010; 输出: +--------+--------+ | emp_no | salary | +--------+--------+ | 43624 | 151115 | | 43624 | 153166 | | 43624 | 153..

更多
loading..
MySQL高级联结

【MySQL必知必会】创建高级联结

使用不同类型的联结 上次学到的是等值联结,也是最简单的联结。这次要学习其它三种联结:自联结,自然联结和外部联结。 自联结 id为10031的员工薪水漏发了,需要确认下这个部门的所有员工,利用自联结的方法找出该部门所有员工的emp_no。 方案一: 子查询 SELECT emp_no FROM dept_emp WHERE dept_no = (SELECT dept_no FROM dept_emp WHERE emp_no = '10031') LIMIT 10 输出: +--------+ | emp_no | +--------+ | 10001 | | 10006 | | 10008 | | 10012 | | 10014 | | 10018 | | 10021 | | 1002..

更多
loading..
MySQL子查询

【MySQL必知必会】使用子查询

利用子查询进行过滤 简单来说将就是利用一条SELECT语句的返回结果用于另一条WHERE语句的WHERE子句 比方说查询薪水高于150000的员工全名。这里需要查询2张表,先分开写看下 SELECT emp_no,salary FROM salaries WHERE salary > 150000; 输出: +--------+--------+ | emp_no | salary | +--------+--------+ | 43624 | 151115 | | 43624 | 153166 | | 43624 | 153458 | | 43624 | 157821 | | 43624 | 158220 | | 46439 | 150345 | | 47978 | 151929 ..

更多
loading..
MySQL联结

【MySQL必知必会】联结表

关系表 什么是关系表,假设有一个学生表,其中包含了学生姓名,出生年月,主键id, 班级id(外键)。 同时还有另外一个表,是一个班级表,其中包含主键id,班级名称。 这样的两个表就形成了关系表,学生表可以通过外键(班级id)查询到该学员的班级名称。这样的关系表也可称为一对多关系表。 外键 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。 这样做的好处: 班级信息不重复,从而不浪费查询的时间和空间。 如果班级信息有变动,直接更新班级表即可,学生表的数据不用改动 因为数据无重复,处理起来也会更加方便 为什么要使用联结 分解数据为多个表能更有效的存储,更方便的处理,并且具有更大的可伸缩性。 但是由于数据存储在多个表中,又不想使用多重子查询这种不易阅读的写法,那可以用联结。 简单来说: ..

更多
loading..
MySQL

【MySQL必知必会】分组数据

创建分组 SELECT emp_no, COUNT(*) FROM salaries GROUP BY emp_no HAVING emp_no < 10020; 输出: +--------+----------+ | emp_no | COUNT(*) | +--------+----------+ | 10001 | 17 | | 10002 | 6 | | 10003 | 7 | | 10004 | 16 | | 10005 | 13 | | 10006 | 12 | | 10007 | 14 | | 10008 | 3 | | 10009 | 18 | | ..

更多
loading..
MySQL汇总

【MySQL必知必会】汇总数据

汇总数据 简单来说就是对数据表的检索。观察它的最大值,最小值等 SQL聚集函数 函数 说明 AVG() 返回某列的平均值 COUNT() 返回某列的行数 MAX( ) 返回某列的最大值 MIN() 返回某列的最小值 SUM() 返回某列之和 AVG函数 AVG()函数可用来返回所有列的平均值,也可返回单个列的平均值。 SELECT AVG(salary) AS avg_salary FROM salaries; 输出: +------------+ | avg_salary | +------------+ | 63810.7448 | +------------+ 1 row in set (0.75 sec) COUNT函数 两种使用方式: 使用COUNT(*..

更多
loading..
MySQL

【MySQL必知必会】创建计算字段

计算字段 某些数据需要通过数据库中的其他字段结合,计算,转换等才能使用。这个时候就需要用到计算字段功能了。 其实这种处理客户端和服务端都能完成,但是服务端处理这种事情更快,一般都是由服务端来解决这种事情。 拼接字段 使用Concat()函数来拼接 mysql> SELECT Concat(last_name, first_name) -> FROM employees -> ORDER BY last_name; 输出: 发现打印结果末尾有很多空格,可以使用MySQL的RTrim()函数来删除值右侧多余的空格。 mysql> SELECT Concat(RTrim(last_name), RTrim(emp_no)) AS name_no FROM employ..

更多
loading..
MySQL正则表达式

【MySQL必知必会】正则表达式

正则表达式介绍 正则表达式可用于查找文件,可以在文本块中找到重复的单词。解析URL,处理复杂文本等。 正则表达式与MySQL的关系 通过正则对文本串进行比较来替换LIKE。 见下面例子 基本字符匹配 从first_name这个列中找出所有包含’oo’的行 SELECT first_name FROM employees WHERE first_name REGEXP 'oo'; 该代码等同于 SELECT first_name FROM employees WHERE first_name LIKE '%oo%'; 目前看下来正则在字符长度比较短的情况下,执行效率比通配符来得低。 看下面的例子: 在salaries表中,查找salary列里匹配.0000。这个.表示匹配任意一个字符,这个是通配符%..

更多
loading..
MySQL

【MySQL必知必会】使用数据处理函数

函数 函数提供了对数据转换和处理的功能 上篇文章中的RTrim() 以及处理时间的TIMESTAMPDIFF()都是函数。 因为函数是当前数据库使用的引擎特有,所以如果遇到移植到其他数据库就可能会出现不支持这些函数的情况。 PS:在开发中要注意这种情况,避免在移植后出现不必要的麻烦。如果必须使用函数,写好相关注释 使用函数 大多数SQL支持以下几种类型的函数: 用于处理文本串(如删除,填充,转换大小写) 对数值进行算数操作(如返回绝对值,进行代数运算) 用于处理日期 返回DMBS使用的特殊信息(如用户登录信息,版本细节) 文本处理函数 上篇了解了RTrim是去除右边空格,LTrim是去除左边空格 接下来学习个新函数-Upper(),将文本转换成大写 mysql> SELECT first_nam..

更多
loading..
hashmap

算法图解笔记(四)---哈希表

哈希表 哈希表又称为散列表,是一种key-value表结构。由哈希函数和数组组成,它的原理是通过哈希函数将传入的key值计算出索引,最后从数组中通过索引快速获取数据。 哈希表结构图 一般情况下它的时间复杂度为O(1),相比较于有序列表,它的时间复杂度为O(logn)。 哈希表与列表最大的区别在于哈希表需要通过哈希函数中的算法来将key值换算成列表的索引,并且同一个key只能指向与同一个索引,也就是说一旦某个key换算成了一个索引后任何其他key都无法换算成该索引。如果出现重复的索引就称之为哈希碰撞。 在常用的语言中,哈希表通常以字典(dict)的形式表现。 哈希函数 构造哈希函数有多种方式,比如直接寻址法、数字分析法、平方取中法、折叠法、随机数法、除留余数法。 由于哈希函数有可能会出现不同的输入值会输..

更多
123