1. 程式人生 > >資料庫操作練習6

資料庫操作練習6

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_no employees
d001 10001,10002
d002 10006
d003 10005
d004 10003,10004
d005 10007,10008,10010
d006 10009,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