資料庫操作練習6
阿新 • • 發佈:2018-12-31
1.按照dept_no進行彙總,屬於同一個部門的emp_no按照逗號進行連線,結果給出dept_no以及連接出的結果employees
題目描述
按照dept_no進行彙總,屬於同一個部門的emp_no按照逗號進行連線,結果給出dept_no以及連接出的結果employeesCREATE 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_no | employees |
---|---|
d001 | 10001,10002 |
d002 | 10006 |
d003 | 10005 |
d004 | 10003,10004 |
d005 | 10007,10008,10010 |
d006 | 10009,10010 |
本題要用到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 |
sql中的字串拼接用||表示(類似於java中字串的+操作),%則表示萬用字元
select last_name||"'"||first_name as name from employees