MySQL常用文法練習問題:集約関数、where、group by、having、inner join on、order by、limit、likeなど
6215 ワード
タイトル:
答え:
1:データテーブルemployeeとdeptの作成
-- 3.employeeテーブルで、すべてのレコードのe_をクエリーします.no、e_nameとe_salaryフィールド値SELECT e_no , e_name , e_salary FROM employee;
--4:employeeテーブルでdept_をクエリーNo 10と20に等しい全ての記録SELECT*FROM employee WHERE dept_no=10 OR dept_no=20;
--5:employeeテーブルで、800~2500の給与範囲の従業員情報を問い合せます. SELECT * FROM employee WHERE e_salary BETWEEN 800 AND 2500;
--6:employeeテーブルで、部門番号が20の部門の従業員情報を問い合せます. SELECT * FROM employee WHERE dept_no=20; --7:employeeテーブルで、各部門の最高賃金の従業員情報を問い合せます. SELECT * FROM employee GROUP BY dept_no HAVING MAX(e_salary);
--8:社員BLAKEの部署と部署の所在地を調べます. SELECT d_name , d_location FROM employee INNER JOIN dept ON employee.`e_name`="BLAKE"AND employee.`dept_no`=dept.`dept_no`;
--9:接続クエリーを使用して、すべての従業員の部門および部門情報を問い合せます. SELECT e_name , d_name FROM employee INNER JOIN dept ON employee.`dept_no`=dept.`dept_no`;
--10:employeeテーブルで、各部門に何人の従業員がいるかを計算します. SELECT d_name部門、COUNT(e_name)従業員数FROM employee INNER JOIN dept ON dept.`dept_no`=employee.`dept_no` GROUP BY dept.`dept_no`;
--11:employee表では、異なるタイプの従業員の総工数を計算します. SELECT e_job従業員、SUM(e_salary)総給与FROM employee GROUP BY employee.`e_job`;
--12:employee表で、異なる部門の平均賃金を計算します. SELECT d_name部門、AVG(e_salary)平均給与FROM employee INNER JOIN dept ON dept.`dept_no`=employee.`dept_no` GROUP BY employee.dept_no;
--13:employeeテーブルで、給与が1500未満の従業員情報を問い合せます. SELECT * FROM employee WHERE e_salary<1500;
--14:employeeテーブルでは、クエリー・レコードを部門番号別に上位から下位に、従業員給与別に上位から下位に並べます. SELECT * FROM employee ORDER BY dept_no ASC , e_salary ASC; --15:employeeテーブルで、従業員名がアルファベットAまたはSで始まる従業員の情報を問い合せます. SELECT * FROM employee WHERE e_name LIKE 's%' OR e_name LIKE 'A%';
--16:employeeテーブルでは、これまでの勤続年数が10年以上の従業員情報を調べます. SELECT * FROM employee WHERE TIMESTAMPDIFF(YEAR,hireDate,CURRENT_DATE())>10;
,
1:employee
e_no int(11)
e_name varchar(50)
e_gender char(2)
dept_no int(11)
e_job varchar(50)
e_salary int(11)
hireDate date
2:dept
dept_no int(11)
d_name varchar(50)
d_location varchar(100)
1: employee dept
2: , :
dept
INSERT INTO dept
VALUES (10, 'ACCOUNTING', 'ShangHai'),
(20, 'RESEARCH ', 'BeiJing '),
(30, 'SALES ', 'ShenZhen '),
(40, 'OPERATIONS ', 'FuJian ');
employee
INSERT INTO employee
VALUES (1001, 'SMITH', 'm',20, 'CLERK',800,'2005-11-12'),
(1002, 'ALLEN', 'f',30, 'SALESMAN', 1600,'2003-05-12'),
(1003, 'WARD', 'f',30, 'SALESMAN', 1250,'2003-05-12'),
(1004, 'JONES', 'm',20, 'MANAGER', 2975,'1998-05-18'),
(1005, 'MARTIN', 'm',30, 'SALESMAN', 1250,'2001-06-12'),
(1006, 'BLAKE', 'f',30, 'MANAGER', 2850,'1997-02-15'),
(1007, 'CLARK', 'm',10, 'MANAGER', 2450,'2002-09-12'),
(1008, 'SCOTT', 'm',20, 'ANALYST', 3000,'2003-05-12'),
(1009, 'KING', 'f',10, 'PRESIDENT', 5000,'1995-01-01'),
(1010, 'TURNER', 'f',30, 'SALESMAN', 1500,'1997-10-12'),
(1011, 'ADAMS', 'm',20, 'CLERK', 1100,'1999-10-05'),
(1012, 'JAMES', 'm',30, 'CLERK', 950,'2008-06-15');
3: employee , e_no、e_name e_salary
4: employee , dept_no 10 20 。
5: employee , 800 2500 。
6: employee , 20 。
7: employee , 。
8: BLAKE 。
9: , 。
10: employee , 。
11: employee , 。
12: employee , 。
13: employee , 1500 。
14: employee , , 。
15: employee , A S 。
16: employee , , 10 。
答え:
1:データテーブルemployeeとdeptの作成
DROP TABLE IF EXISTS employee;
DROP TABLE IF EXISTS dept;
CREATE TABLE IF NOT EXISTS dept(
dept_no INT PRIMARY KEY,
d_name VARCHAR(50) NOT NULL,
d_location VARCHAR(100) NOT NULL
);
CREATE TABLE IF NOT EXISTS employee(
e_no INT PRIMARY KEY,
e_name VARCHAR(50) NOT NULL,
e_gender CHAR(2),
dept_no INT NOT NULL,
e_job VARCHAR(50) NOT NULL,
e_salary INT NOT NULL,
hireDate DATE NOT NULL,
CONSTRAINT fk_dept_no FOREIGN KEY employee(dept_no) REFERENCES dept(dept_no)
);
INSERT INTO dept
VALUES (10, 'ACCOUNTING', 'ShangHai'),
(20, 'RESEARCH ', 'BeiJing '),
(30, 'SALES ', 'ShenZhen '),
(40, 'OPERATIONS ', 'FuJian ');
INSERT INTO employee
VALUES (1001, 'SMITH', 'm',20, 'CLERK',800,'2005-11-12'),
(1002, 'ALLEN', 'f',30, 'SALESMAN', 1600,'2003-05-12'),
(1003, 'WARD', 'f',30, 'SALESMAN', 1250,'2003-05-12'),
(1004, 'JONES', 'm',20, 'MANAGER', 2975,'1998-05-18'),
(1005, 'MARTIN', 'm',30, 'SALESMAN', 1250,'2001-06-12'),
(1006, 'BLAKE', 'f',30, 'MANAGER', 2850,'1997-02-15'),
(1007, 'CLARK', 'm',10, 'MANAGER', 2450,'2002-09-12'),
(1008, 'SCOTT', 'm',20, 'ANALYST', 3000,'2003-05-12'),
(1009, 'KING', 'f',10, 'PRESIDENT', 5000,'1995-01-01'),
(1010, 'TURNER', 'f',30, 'SALESMAN', 1500,'1997-10-12'),
(1011, 'ADAMS', 'm',20, 'CLERK', 1100,'1999-10-05'),
(1012, 'JAMES', 'm',30, 'CLERK', 950,'2008-06-15');
-- 3.employeeテーブルで、すべてのレコードのe_をクエリーします.no、e_nameとe_salaryフィールド値SELECT e_no , e_name , e_salary FROM employee;
--4:employeeテーブルでdept_をクエリーNo 10と20に等しい全ての記録SELECT*FROM employee WHERE dept_no=10 OR dept_no=20;
--5:employeeテーブルで、800~2500の給与範囲の従業員情報を問い合せます. SELECT * FROM employee WHERE e_salary BETWEEN 800 AND 2500;
--6:employeeテーブルで、部門番号が20の部門の従業員情報を問い合せます. SELECT * FROM employee WHERE dept_no=20; --7:employeeテーブルで、各部門の最高賃金の従業員情報を問い合せます. SELECT * FROM employee GROUP BY dept_no HAVING MAX(e_salary);
--8:社員BLAKEの部署と部署の所在地を調べます. SELECT d_name , d_location FROM employee INNER JOIN dept ON employee.`e_name`="BLAKE"AND employee.`dept_no`=dept.`dept_no`;
--9:接続クエリーを使用して、すべての従業員の部門および部門情報を問い合せます. SELECT e_name , d_name FROM employee INNER JOIN dept ON employee.`dept_no`=dept.`dept_no`;
--10:employeeテーブルで、各部門に何人の従業員がいるかを計算します. SELECT d_name部門、COUNT(e_name)従業員数FROM employee INNER JOIN dept ON dept.`dept_no`=employee.`dept_no` GROUP BY dept.`dept_no`;
--11:employee表では、異なるタイプの従業員の総工数を計算します. SELECT e_job従業員、SUM(e_salary)総給与FROM employee GROUP BY employee.`e_job`;
--12:employee表で、異なる部門の平均賃金を計算します. SELECT d_name部門、AVG(e_salary)平均給与FROM employee INNER JOIN dept ON dept.`dept_no`=employee.`dept_no` GROUP BY employee.dept_no;
--13:employeeテーブルで、給与が1500未満の従業員情報を問い合せます. SELECT * FROM employee WHERE e_salary<1500;
--14:employeeテーブルでは、クエリー・レコードを部門番号別に上位から下位に、従業員給与別に上位から下位に並べます. SELECT * FROM employee ORDER BY dept_no ASC , e_salary ASC; --15:employeeテーブルで、従業員名がアルファベットAまたはSで始まる従業員の情報を問い合せます. SELECT * FROM employee WHERE e_name LIKE 's%' OR e_name LIKE 'A%';
--16:employeeテーブルでは、これまでの勤続年数が10年以上の従業員情報を調べます. SELECT * FROM employee WHERE TIMESTAMPDIFF(YEAR,hireDate,CURRENT_DATE())>10;