MySQL常用文法練習問題:集約関数、where、group by、having、inner join on、order by、limit、likeなど

6215 ワード

タイトル:
              ,
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;