您的位置:首页 > 数据库

数据库操作练习6

2017-08-26 19:32 351 查看

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_noemployees
d00110001,10002
d00210006
d00310005
d00410003,10004
d00510007,10008,10010
d00610009,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`));

输出格式:

name
Facello'Georgi
Simmel'Bezalel
Bamford'Parto
Koblick'Chirstian
Maliniak'Kyoichi
Preusig'Anneke
Zielinski'Tzvetan
Kalloufi'Saniya
Peac'Sumant
Piveteau'Duangkaew
Sluis'Mary
sql1:
sql中的字符串拼接用||表示(类似于java中字符串的+操作),%则表示通配符

select last_name||"'"||first_name as name from employees
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息