摘要: 问题:计算某个列中所有值的和,例如,计算所有职员的工资总额。解决方案:如果将整个表作为一个组或一个窗口求和,则只需对相应列使用SUM函数,而不要使用GROUP BY 子句:select sum(sal) from emp 如果创建了多个数据组或多个窗口,则使用SUM函数的同时,还要使用GROUP B 阅读全文
posted @ 2017-09-14 21:52 屠魔的少年 阅读(198) 评论(0) 推荐(0)
摘要: 问题:计算给定列中的最大值和最小值。例如,计算所有职员的最高工资和最低工资,以及每个部门的最高工资和最低工资。 解决方案:要查所有职员的最低工资和最高工资,只需分别使用函数MIN和MAX:SELECT MAIN(SAL) AS MIN_SAL,MAX(SAL) AS MAX_SAL FROM EMP 阅读全文
posted @ 2017-09-14 21:52 屠魔的少年 阅读(192) 评论(0) 推荐(0)
摘要: 问题:计算某个列的平均值,它可以包含表中的所有行,也可以只包含其中的某个子集。例如,计算所有职员的平均工资以及每个部门的平均工资。解决方法:当计算所有职员的平均工资时,只需要把AVG函数应用于工资列即可。select avg(sal) as avg_sal from emp group by dep 阅读全文
posted @ 2017-09-14 21:51 屠魔的少年 阅读(244) 评论(0) 推荐(0)
摘要: 问题:将一个IP地址字段分解到列中,考虑下面列出的IP地址: 111.22.3.4 要得到如下所示的查询结果: + + + + +| a | b | c | d |+ + + + +| 111 | 22 | 3 | 4 |+ + + + + 解决方案: select substring_index( 阅读全文
posted @ 2017-09-14 21:49 屠魔的少年 阅读(266) 评论(0) 推荐(0)
摘要: 问题:从字符串中提取出一个指定的、由分割符隔开的子字符串。create view v as select 'mo,larry,curly' as namefrom t1union allselect 'tina,gina,jaunita,regina,leena' as name from t1;s 阅读全文
posted @ 2017-09-14 21:45 屠魔的少年 阅读(184) 评论(0) 推荐(0)
摘要: 问题:如果数值与字符混合在一起,需要删除那些字符,只返回数字。 create view v as select concat(substr(ename,1,2),replace(cast(deptno as char(4)),' ',''),substr(ename,3,2)) as mixedfr 阅读全文
posted @ 2017-09-14 21:42 屠魔的少年 阅读(155) 评论(0) 推荐(0)
摘要: 问题:如下的结果集: + +| ename |+ +| ALLEN || WARD || MARTIN || BLAKE || CLARK || KING || TURNER || JAMES || MILLER |+ + 需要结果如下: + + +| ename | group_concat(c 阅读全文
posted @ 2017-09-14 21:42 屠魔的少年 阅读(181) 评论(0) 推荐(0)
摘要: 问题已经有了分隔数据,想要将其转换为WHERE子句IN列表中的项目。考虑下面的字符串:7654,7698,7782,7788要将该字符串用在WHERE子句中,但是下面的SQL语句是错误的,因为EMPNO是一个数值列:select ename,sal,deptno from emp where emp 阅读全文
posted @ 2017-09-14 21:41 屠魔的少年 阅读(294) 评论(0) 推荐(0)
摘要: 要将如下的数据: + + +| deptno | ename |+ + +| 30 | ALLEN || 30 | WARD || 30 | MARTIN || 30 | BLAKE || 10 | CLARK || 10 | KING || 30 | TURNER || 30 | JAMES || 阅读全文
posted @ 2017-09-14 21:41 屠魔的少年 阅读(135) 评论(0) 推荐(0)
摘要: 问题:select ename from emp ;+ +| ename |+ +| ALLEN || WARD || MARTIN || BLAKE || CLARK || KING || TURNER || JAMES || MILLER |+ +如上的记录中按照每个姓名的最后两个字符排序:se 阅读全文
posted @ 2017-09-14 21:37 屠魔的少年 阅读(205) 评论(0) 推荐(0)
摘要: 问题:将全名转换为大写首字母缩写。考虑下面的名字: Stewie Griffin 要返回如下结果: S.G. 解决方案: select case when cnt=2 then trim(trailing '.' from concat_ws('.',substr(substring_index(n 阅读全文
posted @ 2017-09-14 21:36 屠魔的少年 阅读(765) 评论(0) 推荐(0)
摘要: mysqlbinlog限制 该软件利用binlog中记录了操作前的数据镜像和操作后的数据镜像。有如下限制 1)binlog_format=row 2)必须打开binlog 3)只支持insert、update、delete 4)不支持drop 、truncate、alter等ddl语句 特别说明:自 阅读全文
posted @ 2017-09-14 15:13 屠魔的少年 阅读(908) 评论(0) 推荐(0)
摘要: 生成测试数据 create view v asselect ename as data from emp where deptno=10 union allselect concat(ename,', $',sal,'.00') as data from emp where deptno=20 un 阅读全文
posted @ 2017-09-14 07:16 屠魔的少年 阅读(189) 评论(0) 推荐(0)
摘要: 需求:删除所有的0和元音字母。 select ename,replace(replace(replace(replace(replace(ename,'A',''),'E',''),'I',''),'O',''),'U','') as stripped1,sal,replace(sal,0,'') 阅读全文
posted @ 2017-09-14 07:15 屠魔的少年 阅读(180) 评论(0) 推荐(0)
摘要: show index from emp \G; 阅读全文
posted @ 2017-09-14 07:13 屠魔的少年 阅读(169) 评论(0) 推荐(0)
摘要: 遍历一个字符,并将其中的每个字符都作为一行返回,但是SQL没有循环操作。例如,要将表EMP中的ENAME值为“KING”的字符串显示为4行,每行都包含“KING”中的一个字符。 create table t10 (id int);insert into t10 values(1);insert in 阅读全文
posted @ 2017-09-14 07:13 屠魔的少年 阅读(156) 评论(0) 推荐(0)
摘要: select column_name,data_type,ordinal_position from information_schema.columns where table_schema='SCOTT' and table_name='EMP'; 阅读全文
posted @ 2017-09-14 07:12 屠魔的少年 阅读(153) 评论(0) 推荐(0)
摘要: select table_name from information_schema.tables where table_schema='SCOTT'; 阅读全文
posted @ 2017-09-14 07:11 屠魔的少年 阅读(143) 评论(0) 推荐(0)
摘要: 从一个表中删除被另外一个表引用的记录。考虑下面的DEPT_ACCIDENTS表,其中每行代表生产过程中的一次事故,每行记录了发生的部门以及事故类型。create table dept_accidents(deptno integer,accident_name varchar(20));insert 阅读全文
posted @ 2017-09-14 07:10 屠魔的少年 阅读(383) 评论(0) 推荐(0)
摘要: 问题:仅当另一个表中相应的行存在时,更新某表中的一些行。例如,如果表emp_bonus中存在某位员工,则要将该员工的工资增加20%(在表emp中)。解决方案:为了可以将符合条件的员工工资增加20%,可以在update语句的where子句中使用子查询,用以找出哪些员工同时存在于表emp和emp_bon 阅读全文
posted @ 2017-09-14 07:09 屠魔的少年 阅读(151) 评论(0) 推荐(0)
摘要: 从表中删除重复记录,考虑如下所示的表:create table dupes (id integer,name varchar(10));insert into dupes values (1,'NOPOLEON');insert into dupes values (2,'DYNAMITE');in 阅读全文
posted @ 2017-09-14 07:09 屠魔的少年 阅读(134) 评论(0) 推荐(0)
摘要: 问题:要用一个表中的值来更新另外一个表中的行。例如,在表new_sal中保存着某个特定员工的新工资.在表new_sal中,deptno为关键字。要用表new_sal中的值更新表emp中相应员工的工资,条件是emp.deptno与new_sal.deptno相等,将匹配记录的emp.sal更新为new 阅读全文
posted @ 2017-09-14 07:09 屠魔的少年 阅读(180) 评论(0) 推荐(0)
摘要: 问题要修改表中某些(或全部)行的值。例如,可能想要将部门20中所有员工的工资增加10%,下面的结果集显示了该部门员工的deptno ename 和sal字段select deptno,ename,loc from emp where deptno = 20 order by 1,3 要将所有的sal 阅读全文
posted @ 2017-09-14 07:07 屠魔的少年 阅读(165) 评论(0) 推荐(0)
摘要: 问题防止用户或是错误软件应用程序对某几列插入数据。例如,只允许某个程序向emp表中插入empno,ename,和job列解决方案:在表中创建一个视图,该视图只显示允许用户进行操作的列,强制所有的插入操作都通过该视图进行。例如,创建一个只显示表emp中特定3列的视图:create view new_e 阅读全文
posted @ 2017-09-14 07:06 屠魔的少年 阅读(171) 评论(0) 推荐(0)
摘要: 问题:要将一个查询中返回的行插入到多个目标表中。例如,要将表dept中的一些行插入到表dept_east、dept_west、dept_mid中。这三个表与表dept有着相同的结构(相同的列和数据类型),并且这三个表都是空的。解决方案:此解决方案是要将查询的解雇插入到目标表中。现有的版本都不支持这种 阅读全文
posted @ 2017-09-14 07:04 屠魔的少年 阅读(182) 评论(0) 推荐(0)
摘要: 问题:要使用查询从一个表中向另外的表中复制行。该查询可能非常复杂,也可能非常简单。但是最终是需要将该查询的结果插入到其他的表中。(同样的列名称以及数据类型)解决方案:所使用的方法就是在insert语句后面紧跟着一个用来产生所要插入的行的查询:create table dept_east(deptno 阅读全文
posted @ 2017-09-14 07:02 屠魔的少年 阅读(165) 评论(0) 推荐(0)
摘要: 问题:在一个定义了默认值的列插入数据,并且需要不管该列的默认值是什么,都将该列值设为NULL。考虑一下下面的表:create table D (id interger default 0, foo varchar(10))希望插入一行, 其中id值为NULL解决方案:可以在值列表中明确地指定NULL 阅读全文
posted @ 2017-09-14 07:00 屠魔的少年 阅读(232) 评论(0) 推荐(0)
摘要: 问题:定义表时可以为某些列定义默认值,现要以默认值插入一行,而无需指定各列的值。看一下下面列出的表:create table D (id interger default 0)要插入零值,而不像在insert语句的值列表中明确得为该行指定0值,这里明确的要求插入默认值,而不管默认值是什么。解决方案; 阅读全文
posted @ 2017-09-14 06:59 屠魔的少年 阅读(200) 评论(0) 推荐(0)
摘要: 问题:向表中插入一条新的记录,例如,要向dept表中插入一条新的记录。其中,deptno值为50、dname的值为“PROGRAMMING” loc的值为“BALTMORE”解决方案使用带有values子句的insert语句来插入一行:insert into dept (deptno, dname, 阅读全文
posted @ 2017-09-14 06:59 屠魔的少年 阅读(207) 评论(0) 推荐(0)
摘要: 问题:NULL值永远不会等于或不等于任何值,也包括NULL值自己,但是需要像计算真实值一样计算可为空列的返回值。例如,需要在表emp中查出所有比“WARD”提成(COMM)低的员工,提成为NULL(空)的员工也应当包括在其中。解决方案:使用coalesce函数将NULL值转换为一个可以用来作为标准值 阅读全文
posted @ 2017-09-14 00:06 屠魔的少年 阅读(164) 评论(0) 推荐(0)
摘要: 问题:同时返回多个表中丢失的数据。要从表dept中返回emp不存在的行(所有没有员工的部门)需要做外联结。考虑下面的查询。它返回表dept中的deptno和name字段,以及每个部门中所有员工的姓名。(如果该某个部门有员工的话):select d.deptno, d.dname, e.ename f 阅读全文
posted @ 2017-09-14 00:06 屠魔的少年 阅读(176) 评论(0) 推荐(0)
摘要: 修改emp_bonus表,使得在部门10中并不是每个员工都有奖金。select deptno , sum(sal) as total_sal, sum(bonus) as total_bonus from ( select e.empno, e.name, e.sal, e.deptno, e.sa 阅读全文
posted @ 2017-09-14 00:05 屠魔的少年 阅读(130) 评论(0) 推荐(0)
摘要: 问题:要在包含多个表的查询中执行聚集运算,要确保表间连接不能使聚集运算发生错误.例如,要查找在部门10中所有员工的工资合计和奖金合计.由于有些员工的奖金激励不只一条,在表emp和表emp_bonus之间做连接会导致聚集函数sum算得的值错误.现在,考虑一下下面的返回的在部门10中所有员工的工资和奖金 阅读全文
posted @ 2017-09-14 00:04 屠魔的少年 阅读(160) 评论(0) 推荐(0)
摘要: 问题:要返回在部门10中每个员工的姓名,以及部门的工作地点,下面的查询达到的是错误数据:select e.ename,d.loc from emp e ,dept dwhere e.deptno =10解决方案:在from子句对表进行连接来返回正确的结果集:select e.ename,d.loc 阅读全文
posted @ 2017-09-14 00:03 屠魔的少年 阅读(673) 评论(0) 推荐(0)
摘要: 问题:要知道两个表或视图中是否有相同的数据(基数和值)。考虑这个视图:create view Vas select * from emp where deptno !=10 union all select * from emp where ename = 'WARD' 现要检测这个视图与表emp中 阅读全文
posted @ 2017-09-14 00:03 屠魔的少年 阅读(183) 评论(0) 推荐(0)
摘要: 问题:已经有了一个查询可以返回所需要的值,还需要得到其他的信息,但当加入这些信息时,发现原始结果集中的数据有丢失。例如,要返回所有的员工信息,他们工作部门的地点及所获得的奖励。在这个问题中,表EMP_BONUS包含如下内容: select * from emp_bonus;+ + + +| empn 阅读全文
posted @ 2017-09-14 00:02 屠魔的少年 阅读(136) 评论(0) 推荐(0)
摘要: 问题:对于具有相同关键字的两个表,要在一个表中查找与另外一个不匹配的行。例如,要查找没有职员的部门.要查找部门中每个员工的工作岗位需要在表需要在表deptno及emp中有一个等值联接。deptno列就是这两个表之间的公共值。但是,等值联接却不能直接显示出那个部门没有员工。这是因为在表emp和dept 阅读全文
posted @ 2017-09-14 00:02 屠魔的少年 阅读(189) 评论(0) 推荐(0)
摘要: 问题:要根据某些条件逻辑来排序。例如,如果JOB是”SALESMAN”,要根据comm来排序。解决方案:在order by子句中使用case表达式select ename,sal,job,comm from emp order by case when job = 'SALESMAN' then c 阅读全文
posted @ 2017-09-14 00:01 屠魔的少年 阅读(193) 评论(0) 推荐(0)
摘要: 问题:现有字母和数字混合的数据,希望按照数字或字符部分来排序。考虑这个视图: create view V as select concat(ename, ' ',deptno) from emp; mysql> select * from v;+ +| concat(ename, ' ',deptn 阅读全文
posted @ 2017-09-14 00:00 屠魔的少年 阅读(165) 评论(0) 推荐(0)
摘要: 问题:在emp中根据comm排序结果。但是,这个字段可以有空值。需要指定是否将控制排在最后。解决方案:根据数据的显示方式,以及特定的rdbms排序空值的方式,可以按照升序或降序来对空值的列排序。select ename,sal,comm from emp order by 3 select enam 阅读全文
posted @ 2017-09-14 00:00 屠魔的少年 阅读(204) 评论(0) 推荐(0)