ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

mysql(4) 内置函数,复合查询以及内外连接

mysql(4) 内置函数,复合查询以及内外连接 一.日期函数函数名称描述Current_date()当前日期Current_time()当前时间Current_timestamp()当前时间戳Date(datetime)返回datetime参数的日期部分Date_add(date,interval d_value_type)在date中添加日期或时间, interval后的数值单位可以是year minute second dayDate_sub(date,interval d_value_type)在date中减去日期或时间 interval后的数值单位可以是year minute second dayDatediff(date1,date2)两个日期的差单位是天now()当前日期时间获得年月日获得时分秒获得时间戳在日期的基础上加日期在日期的基础上减去时间计算两个日期之间相差多少天案例创建一张表记录生日添加当前日期创建留言表插入数据显示留言的所有信息发布日期只显示日期不显示时间请查询两份钟内发布的贴子二.字符串函数获取emp表的ename列的字符集要求显示exam_result表中的信息显示格式XXX的语文是XXX分数学XXX分英语XXX分求学生表钟学生姓名占用的字节数将emp表中所有名字中有s的替换成‘上海’截取emp表中ename字段的第二个到第三个字符以首字母小写的方式显示所有员工的姓名附substring基础语法substring是mysql里用来从字符串中截取子串的函数substring(str,pos,len)str:原字符串pos:起始位置从1开始len:截取多少个字符(可选)用from/for关键字标准SQL写法substring(str from pos for len)pos为负数的情况当pos是负数时表示从字符串末尾往前数len为负数或0len为0返回空字符串 len为负数在Mysql中返回空字符串 pos超出范围如果pos大于字符串长度或为0返回空字符串与其他截取函数相比函数作用示例结果Substring(str,pos,len)从任意位置截取Substring(‘SMITH’,2,2)MILeft(str,len)从左边截取Left(‘SMITH’,2)SMRIGHT(str,len)从右边截取Right(‘SMITH’,2)THMID(str,pos,len)同substringMid(‘SMITH’,2,2)MI重位置从1开始不是0。pos可为负表示从末尾往前数。len不写就截到末尾len为0或负数返回空串。substring ,mid,sustr在Mysql中基本等价。标准SQL写法substring(str from pos for len)substring(原字符串从哪开始取几个)三.数学函数函数名称描述Abs(number)绝对值函数Bin(decimal_number)十进制转换二进制Hex(decimalNumber)转换成十六进制Conv(number,from_base,to_base)进制转换Ceilling(number)向上去整Floor(number)向下去整Format(number,decimal_places)格式化保留小数位数Hex(decimalNumber)转换成十六进制Rand()返回随机浮点数范围[0.0,1.0)Mod(number,denominator)取模求余四.其他函数user()查询当前用户md5(str)对一个字符串进行md5摘要摘要后得到一个32位字符串database()显示当前正在使用数据库password()函数Mysql数据库使用该函数对用户加密ifnull(val1,val2)如果val1为null,返回val2,否则返回val1的值。五.基本查询查询工资高于500或岗位为MANAGER的雇员同时还要满足他们的姓名首字母为大写的J按照部门号升序而雇员的工资降序排序显示工资最高的员工的名字和工作岗位显示工资高于平均工资的员工信息显示每个部门的平均工资和最高工资显示平均工资低于2000的部门号和它的平均工资显示每种岗位的雇员总数平均工资六.多表查询从第一张表中选出第一条记录和第二个表的所有记录进行组合然后从第一张表中取第二条记录和第二张表中的所有记录组合不加过滤条件得到的结果为笛卡尔积练习1.只要emp表中的deptnodept表中的deptno字段的记录2.显示部门号为10的部门名员工名工资3.显示各个员工的姓名工资及工资级别七.自连接自连接是指在同一张表连接查询案例显示员工FORD的上级领导的编号和姓名mgr是员工领导的编号--empno使用子查询使用多表查询自查询使用到表的别名 from emp leader,emp worker,给自己的表起别名因为要先做笛卡尔积所以别名可以先识别八.子查询子查询是指嵌入在其他sql语句中的select语句也叫嵌套查询1单行子查询例显示SMITH同一部门的员工2多行子查询返回多行记录的子查询in关键字查询和10号部门的工作岗位相同的雇员的名字岗位工资部门号但是不包含10自己的all关键字显示工资比部门30的所有员工的工资高的员工的姓名工资和部门号any关键字显示工资比部门30的任意员工的工资高的员工的姓名工资和部门号包含自己部门的员工(3)多列子查询单行子查询是指子查询只返回单列单行数据多行子查询是指返回单列多行数据都是针对单列而言的而多列子查询则是指返回多个列数据的子查询语句。例查询和SMITH的部门和岗位完全相同的所有雇员不含SMITH本人4在from子句中使用子查询子查询语句出现在from子句中。这里要用到数据查询的技巧把一个子查询当作一个临时表使用例显示每个高于自己部门平均工资的员工的姓名部门工资平均工资查找每个部门工资最高的人和姓名工资部门最高工资显示每个部门的信息部门名编号地址和人员数量方法1使用多表方法2使用子查询5合并查询在实际应用中为了合并多个select的执行结果可以使用集合操作符union,union all该操作符用于取得两个结果集的并集当使用该操作符时会自动去掉结果集中的重复行例将工资大于2500或职位是MANAGER的人找出来该操作符用于取得两个结果集的并集当使用该操作符时不会去掉结果集中的重复行例将工资大于2500或职位是MANAGER的人找出来九.mysql内外连接(1) 内连接实际上就是利用where子句对两种表形成笛卡尔积进行筛选前面学习的查询时内连接也是在开发过程中使用最多的连接查询。语法select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件2外连接如果联合查询左侧的表完全显示我们就说时左外连接select 字段名 from 表名1 left join 表名2 on 连接条件查询所有学生的成绩如果这个学生没有成绩也要将学生的个人信息显示出来3右外连接如果联合查询右侧的表完全显示我们就说是由外连接select 字段 from 表名1 right join 表名2 on 连接条件例对stu表和exam表联合查询把所有成绩都显示出来即使这个成绩没有学生与它对应也要显示出来列出部门名称和这些部门的员工信息同时列出没有员工的部门mysql select d.dname,e.* from dept d left join emp e on d.deptno e.deptno; ---------------------------------------------------------------------------------- | dname | empno | ename | job | mgr | hiredate | sal | comm | deptno | ---------------------------------------------------------------------------------- | ACCOUNTING | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | | ACCOUNTING | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | ACCOUNTING | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | | RESEARCH | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | RESEARCH | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | RESEARCH | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | RESEARCH | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | | RESEARCH | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | | SALES | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | | SALES | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | | SALES | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | | SALES | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | | SALES | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | | SALES | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | | OPERATIONS | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | ---------------------------------------------------------------------------------- 15 rows in set (0.00 sec) mysql select d.dname,e.* from emp e right join dept d on d.deptno e.deptno; ---------------------------------------------------------------------------------- | dname | empno | ename | job | mgr | hiredate | sal | comm | deptno | ---------------------------------------------------------------------------------- | ACCOUNTING | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | | ACCOUNTING | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | ACCOUNTING | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | | RESEARCH | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | RESEARCH | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | RESEARCH | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | RESEARCH | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | | RESEARCH | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | | SALES | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | | SALES | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | | SALES | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | | SALES | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | | SALES | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | | SALES | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | | OPERATIONS | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | ---------------------------------------------------------------------------------- 15 rows in set (0.00 sec)注本文更偏向于数据库日期函数查询连接的复习练习和笔记操作过程更偏向于会用就行。
返回列表