一、mysql子查询出现错误“ Every derived table must have its own alias”
原因:进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名。
例子:select max(maxsal) from (select sum(sal) maxsal from emps group by empname) as a; //该情况才一定需要别名,如果是在where后面通过in来实现嵌套子查询则 不需要起别名。
二、基础:增、删、查、改
查:句子结构
上图参考于:http://blog.csdn.net/wzy_1988/article/details/52871636
增: insert into emps(...) values(...);
insert ignore into emps(...) values(...); //ignore:如果发生了unique key冲突,则当前记录不插入,避免重复插入
改:
UPDATE bname SET zda = 'acontent' , zdb = 'bcontent' WHERE zdid='20005';
IGNORE关键字如果使用UPDATE更新多行,并且在更新这些行中的一行或多行时出现一个错误,则整个UPDATE操作被取消,(错误发生前更新的所有行被恢复到他们原来的值)为即使发生错误也继续进行更新。可使用IGNORE关键字
update ignore bname;
删:
delete、truncate、drop
拼接字符串:select concat('员工姓名',empname) from emps;
别名:select empname as 员工姓名 from emps;
操作符:select column1*column2 from emps;
sql文本处理函数:
ltrim():去掉字符串左边空格;
rtrim():去掉字符串右边空格;
trim():去掉字符串两边空格
left(左截取):select left(empname,2) from emps; //从左边第一位开始截取,截取长度为2的一个子字符串。
right(右截取):select right(empname,2) from emps;
length():select length(empname) from emps; //返回字符串长度
locate(substr,str):select locate('jack',empname) from emps; //返回子字符串在字符串中第一次出现的位置,下标从1开始计算
lower():select lower(empname) from emps; //把返回的结果全变为小写字母
upper():select upper(empname) from emps;
substr(str,beginindex,endindex):select substr(empname,1,4) from emps; //截取第一个字符到第四个字符间共四个字符的一个子字符串,下标从1开始计算
soundex():select *from emps where soundex(empname) = soundex('zhangchaowu'); //把empname属性的和'zhangchaowu‘发音类似的行选出来
例子:select *from emps where soundex(empname)=soundex('zhancaowu');
日期处理函数:
select curdate(); //获取当前日期:年月日
select curtime(); //获取当前时间:时分秒
select sysdate(); //获取当前日期和时间:年月日时分秒
select date_format(); //格式化时间,例子:select date_format(sysdate(),'%Y-%m'); //只取年和月两部分。
1.先分组求和,再求和的最大值对应的组名。
例子:先求出分组后求和的最大值是多少。
再求出对应的这个组是那个组
2.求出分组排序后,每组的前两条记录。
例子:找出每个部门最高工资的两位员工。
补充:如果只是查出每个部门工资最高的员工则更方便,先排序再分组即可。
limit的用法:
limit 5,10; //从下标为5的行开始,一共返回10行。(下标从0开始计算)
limit 5,-1; //从下标为5的行开始,把之后的行都返回。
limit 5; //返回符合条件的前5条。
mysql用limit实现分页:sql = "select *from emps limit" + BeginIndex +","+pagesizes; //其中BeginIndex,在前台页面每一次点击上一页或则下一页的时候时候给后台传来当前页码就 可以算出来。
mysql:在数据库表中删除重复记录,只保留id最小的一个记录。
delete *from schools
where school_name in (select school_name from school group by school_name having count(*)>1) //找出所有重复出现的记录
and school_id not in (select min(school_id) from school group by school_name having count(*)>1); //出去id最小的记录,其他的重复记录都删除掉。