数据库操作练习6

来源:互联网 发布:windows阻止软件自启 编辑:程序博客网 时间:2024/05/21 09:40

1.按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees

题目描述

按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
输出格式:
dept_noemployeesd00110001,10002d00210006d00310005d00410003,10004d00510007,10008,10010d00610009,10010
sql1:

    本题要用到SQL的聚合函数group_concat(X,Y),其中X是要连接的字段,Y是连接时用的符号,可省略,默认为逗号。此函数必须与 GROUP BY 配合使用。此题以 dept_no 作为分组,将每个分组中不同的emp_no用逗号连接起来(即可省略Y)。

    select dept_no, group_concat(emp_no) from dept_emp group by dept_no

当然也可以:select dept_no, group_concat(emp_no, ',') employees from dept_emp group by dept_no;

2.查找字符串'10,A,B'

题目描述
查找字符串'10,A,B' 中逗号','出现的次数cnt。

sql1:

    由于 SQL中没有直接统计字符串中子串出现次数的函数,因此本题用length()函数与replace()函数的结合灵活地解决了统计子串出现次数的问题,属于技巧题,即先用replace函数将原串中出现的子串用空串替换,再用原串长度减去替换后字符串的长度,最后除以子串的长度(本题中length(',')为1,因此此步可省略,若子串长度大于1则不可省)。

    select (length('10,A,B')-length(replace('10,A,B',',','')))/length(',') as cnt 

sql2:

    select 2 as cnt

3.将employees表中的所有员工的last_name和first_name通过(')连接起来。

题目描述

将employees表中的所有员工的last_name和first_name通过(')连接起来。
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
输出格式:
nameFacello'GeorgiSimmel'BezalelBamford'PartoKoblick'ChirstianMaliniak'KyoichiPreusig'AnnekeZielinski'TzvetanKalloufi'SaniyaPeac'SumantPiveteau'DuangkaewSluis'Mary
sql1:

    sql中的字符串拼接用||表示(类似于java中字符串的+操作),%则表示通配符

select last_name||"'"||first_name as name from employees


原创粉丝点击