- "+"没有连接数据的作用,只能做+运算,那么在MySQL中如果想要将数据连接在一起又该如何办呢?CONCAT(参数1,参数2,…参数n);
- SELECT IFNULL(参数1,参数2); 参数1:用来判断是否为null 参数2:假如参数1为null,设置参数2为参数1的替代值
- 筛选条件:(1)条件运算 > 、<、=、!=、<>、<=、>= (2) 逻辑运算 & 、 || 、! 、and、or、not (3)模糊查询like、between and 、in、is (not) null
- like通常和通配符搭配使用: ①:%:代表任意多个字符 ②:_:代表任意单个字符
- 常见单行函数:
(1)字符函数concat、length、ifnull、Upper、Lower、Substr(string,start,length)·从string的start位起截取length位、
Instr( string, sub-string, start, nth ) 返回sub-string在string中的位置,从start起查(默认为1),查第n次出现的位置(默认为1)。
Trim([{Both(默认) | Leading(头部)|Trailing(尾部)} [sub-str(默认为空格)] FROM] string) 从string的**(默认左右两侧)删除sub-str
Lpad( string, length, [ sub-str] )对string以 sub-str(默认为空字符)填充,最终结果返回的字符串长度为 length
Replace (String,from_str,to_str) 将String中所有出现的from_str替换为to_str(不写默认为null)。
(2)数学函数: Round()四舍五入;Ceil() 向上取整(返回大于等于该参数的最小整数); Floor() 向下取整,返回小于等于该参数苏的最大整数
Truncate(X,D) 返回X的截断到小数位D号的值 Mod() 取余
内连接:
- 以表1记录为准,连接表2记录,根据连接条件:(1)表1有而表2没有或表1没有而表2有的部分,均删除。
(2)表1有1而表2有n或表1有n而表2有1,按对应关系补齐n条记录 - 根据连接条件,若表1一条记录对应n条表2记录,则生成n条新记录,而不是删除多余的表2的记录
外连接:
- 以主表记录为准,连接从表记录,根据连接条件:(1)主表有从表没有,从表字段填充为null;(内连接与外连接的唯一区别)(2)主表没有从表有的部分,删除。
(3)主表有1而从表有n或主表有n而从表有1,按对应关系补齐n条记录 - left join左边的是主表,right join右边的是主表; 注:内连接无left和right的区分。
select后面的子查询 仅仅支持标量子查询(单行单列) /**案例1:查询每个部门的员工个数 分析:涉及到表departments和表employees:count(*) --> department_id **/ SELECT d.*, ( SELECT COUNT(*) FROM employees e WHERE d.'department_id' = e.'department_id' )员工个数 FROM departments d;
from后面的子查询
/**案例1:查询每个部门的平均工资的工资等级
分析:①查询每个部门的平均工资(查询结果为一个结果集);
②将①的结果集起别名作为一张新表(avg),将表avg和表grade_level进行连接查询 SELECT av.*,grade_level FROM ( SELECT AVG(salary) ag,department_id FROM employees GROUP BY department_id ) av INNER JOIN job_grade ON av.ag BETWEEN lowest_sal AND highest_sal;