一,复习
    子句,建个商场表使用哪些字段,约束条件


    二、函数
    菜鸟教程函数:https://www.runoob.com/mysql/mysql-functions.html
    回文~算法


    三、第五章~练习题
    练习1
    1.写一个查询,分别计算100.456 四舍五入到小数点后第2位,第1位,整数位的值。
    SELECT ROUND(100.456,2);
    SELECT ROUND(100.456,1);
    SELECT ROUND(100.456,0);
    2.写一个查询,分别计算100.456 从小数点后第2位,第1位,整数位截断的值。
    SELECT TRUNCATE(100.456,2);
    SELECT TRUNCATE(100.456,1);
    SELECT TRUNCATE(100.456,0);

    两者的区别在于是否四舍五入,TRUNCATE不进行四舍五入操作!

    练习2
    1.显示所有员工姓名的前三个字符
    SELECT SUBSTRING(ENAME,1,3) FROM emp;
    2.显示正好为5个字符的员工的姓名,工资,部门号
    SELECT ENAME,SAL,DEPTNO FROM emp WHERE CHAR_LENGTH(ENAME)=5;

    练习3
    1.写一个查询,用首字母大写,其它字母小写显示雇员的 ename,显示名字的长度,
    并给每列一个适当的标签,条件是满足所有雇员名字的开始字母是J、A 或 M 的雇员,
    并对查询结果按雇员的ename升序排序。(提示:使用length、substr)
    SELECT LENGTH(ename) AS “名字长度”,CONCAT(UPPER(SUBSTR(ename,1,1)),LOWER(SUBSTR(ename,2,10))) AS “格式化名字”
    FROM emp WHERE SUBSTR(ename,1,1) IN (‘J’,’A’,’M’) ORDER BY ename DESC;
    2.查询员工姓名中中包含大写或小写字母A的员工姓名。
    SELECT ename AS “员工姓名” FROM emp WHERE LOCATE(‘A’,ename) <> 0 OR LOCATE(‘a’,ename);
    —不等于0,说明存在下标位置,即元素存在
    3.显示所有员工的姓名,用a替换所有”A”
    SELECT REPLACE(ename,’A’,’a’) FROM emp;
    4.查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,员工姓名长度
    SELECT LENGTH(ename),ename FROM emp WHERE LOCATE(‘A’,ename)<> 0 AND hiredate>’1981-5-1’ AND deptno IN (10,20);
    5.查询每个职工的编号,姓名,工资
    要求将查询到的数据按照一定的格式合并成一个字符串.
    前10位:编号,不足部分用填充,左对齐
    中间10位:姓名,不足部分用
    填充,左对齐
    后10位:工资,不足部分用填充,右对齐
    SELECT RPAD(empno,10,”
    “) “编号”,RPAD(ename,10,”“) “姓名”,LPAD(SAL,10,’‘) “工资” from emp;

    练习4
    1.查询服务器当前时间
    SELECT SYSDATE();
    2.查询部门10,20的员工截止到2000年1月1日,工作了多少个月,入职的月份。
    SELECT ROUND((DATEDIFF(‘2000-1-1’,hiredate)/30)),MONTH(hiredate) AS “入职月份” FROM emp WHERE deptno IN (10,20);
    3.如果员工试用期6个月,查询职位不是MANAGER的员工姓名,入职日期,转正日期,入职日期是第多少月,第多少周
    SELECT ename,hiredate,ADDDATE(hiredate,INTERVAL 6 MONTH) AS “转正日期”,MONTH(hiredate),WEEKOFYEAR(hiredate) “入职周”
    FROM emp
    WHERE JOB NOT IN(“MANAGER”);

    课后作业
    1.计算2000年1月1日到现在有多少月,多少周(四舍五入)。
    SELECT ROUND(DATEDIFF(SYSDATE(),”2000-1-1”)/30) AS “月份差值”,ROUND(DATEDIFF(SYSDATE(),”2000-1-1”)/7) AS “周数”;

    2.查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。
    SELECT *FROM emp WHERE STRCMP(SUBSTR(ename ,3 , 1),”A”)=0 ;

    3.使用trim函数将字符串‘hello’、‘ Hello ’、‘bllb’、‘ hello ’分别处理得到下列字符串ello、Hello、ll、hello。
    SELECT TRIM(‘h’ FROM’hello’);
    SELECT TRIM(‘ Hello ‘);
    SELECT TRIM(‘b’ from ‘bllb’);
    SELECT TRIM(‘ hello ‘);

    4.将员工工资按如下格式显示:123,234.00 RMB 。
    SELECT FORMAT(sal,3) AS “工资” FROM emp ;

    mysql的where执行顺序从左往右执行,把严苛的条件放在前面。

    四、第六章~练习题
    练习1
    1.写一个查询,显示所有员工姓名,部门编号,部门名称。
    SELECT e.ename AS “员工姓名”,d.deptno “部门编号”,d.dname “部门名称”
    FROM emp e,dept d WHERE e.deptno=d.deptno;
    2.写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金
    SELECT e.ename “员工姓名”,d.loc “工作地点”,e.comm “奖金”
    FROM emp e,dept d WHERE e.deptno=d.deptno;
    3.写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。
    SELECT e.ename,d.loc
    FROM emp e,dept d
    WHERE e.deptno=d.deptno AND LOCATE(‘A’,ename)<>0;

    练习2
    1.查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序。
    SELECT e.empno “员工编号”,e.ename “员工姓名”,e.sal “员工薪资”,s.grade “员工等级”,d.loc “所在工作城市”
    FROM emp e LEFT JOIN dept d ON d.deptno=e.deptno
    JOIN salgrade s
    WHERE sal BETWEEN losal AND hisal ORDER BY s.grade ASC;

    练习3
    1.查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。
    SELECT e.ename “姓名”,e.empno “员工编号”,d.dname “经理姓名”,d.deptno “经理编号”,d.loc
    FROM emp e,dept d
    WHERE e.deptno=d.deptno AND d.loc IN (“NEW YORK”,”CHICAGO”);

    课后作业:
    1.显示员工SMITH的姓名,部门名称,直接上级名称
    SELECT e.ename “员工名字”,m.ename AS “直接上级名字”,d.dname AS “部门名称”
    FROM emp e,emp m,dept d
    WHERE e.mgr=m.empno
    AND e.ename=”SMITH”
    AND e.deptno=d.deptno ;
    2.显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。
    SELECT e.ename “姓名”,d.dname “部门名称”,e.sal “工资”,s.grade “等级”
    FROM emp e,dept d,salgrade s
    WHERE s.grade>1
    AND e.deptno=d.deptno
    AND e.sal BETWEEN s.losal AND s.hisal;
    3.显示员工KING和FORD管理的员工姓名及其经理姓名。
    SELECT e.ename “姓名”,m.ename “经理名字”, d.ename “管理的员工姓名”
    FROM emp m
    JOIN emp e ON e.mgr=m.empno
    JOIN emp d ON e.empno=d.mgr
    WHERE e.ename IN (“KING”,”FORD”);
    SELECT A.ENAME ‘员工’, B.ENAME ‘经理’, C.ENAME ‘管理的员工’ FROM emp A
    LEFT JOIN emp B ON A.MGR = B.EMPNO
    JOIN emp C ON A.EMPNO = C.MGR
    WHERE A.ENAME in (‘KING’, ‘FORD’);

    4.显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。
    SELECT e.ename AS “员工姓名”,m.ename AS “经理姓名”,e.hiredate AS “参加工作时间”
    FROM emp e
    JOIN emp m ON e.mgr=m.empno
    WHERE e.hiredate<m.hiredate;