【MySQL必知必会】使用视图
视图 以例子来说明: SELECT salaries.emp_no, dept_emp.dept_no, salary, dept_name FROM salaries, dept_emp, departments WHERE salaries.emp_no = dept_emp.emp_no AND dept_emp.dept_no = departments.dept_no AND salary = 158220; 从三张表中获取薪水为158220的员工的id,部门id,薪水和部门名称。 如果使用视图,这段语句就会变成: SELECT salaries.emp_no, dept_emp.dept_no, salary, dept_name FROM salary_for_department WHE..
更多【MySQL必知必会】插入数据
更多
【MySQL必知必会】全文本搜索
理解全文本搜索 之前学习到了用LIKE关键字,利用通配符来匹配文本,还有通过正则表达式来匹配文本。不过这些匹配都有些缺点: 性能:通配符和正则表达式匹配通常要求MySQL尝试匹配表中所有行。如果搜索行越长匹配就越耗时。 明确控制:通配符和正则表达式很难做到精细的控制,控制在匹配过程中哪些需要匹配哪些需要不匹配,这样会影响性能无法做到优化。 智能化结果:基于通配符和正则表达式的匹配得到的结果你无法控制匹配数量,比方说匹配的关键词是#,在匹配的全文中有多个#,但是我无法控制结果中只返回一个或者n个。 而这些限制都能通过全文本搜索来解决。 使用全文本搜索 一般在建表时启用全文本搜索。 MySQL最常用的两个引擎为MyISAM和InnoDB MyISAM:支持全文索引 InnoDB:不支持全文索引 CREAT..
更多【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..
更多【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..
更多【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 ..
更多【MySQL必知必会】联结表
关系表 什么是关系表,假设有一个学生表,其中包含了学生姓名,出生年月,主键id, 班级id(外键)。 同时还有另外一个表,是一个班级表,其中包含主键id,班级名称。 这样的两个表就形成了关系表,学生表可以通过外键(班级id)查询到该学员的班级名称。这样的关系表也可称为一对多关系表。 外键 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。 这样做的好处: 班级信息不重复,从而不浪费查询的时间和空间。 如果班级信息有变动,直接更新班级表即可,学生表的数据不用改动 因为数据无重复,处理起来也会更加方便 为什么要使用联结 分解数据为多个表能更有效的存储,更方便的处理,并且具有更大的可伸缩性。 但是由于数据存储在多个表中,又不想使用多重子查询这种不易阅读的写法,那可以用联结。 简单来说: ..
更多【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 | | ..
更多【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(*..
更多【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..
更多