MySQL DML操作強化練習問題

44428 ワード

MySQL DML操作強化練習問題
タイトル1
1.      emp[       ],      :  、  、  、  、 
 、  、    、    ;      :
A.            
B.          ,  ,  
C.             
D.       18   20          ,  
E.              ,  ,  
F.     、   、      ,  
G.                 ,  ,  
H.       ,    15   25           
I.            
J.             
K.           
L.    ,       
M.             
N.          

Empデータ情報
drop table if exists emp;
create table emp
(
 id varchar(12),
 name varchar(12),
 sex char(2),
 age int,
 phone varchar(11),
 address varchar(20),
 times timestamp,
 email varchar(20)
);
insert into emp values('A100101','  ',' ',58,'13111223344','  ','2000-1-1','[email protected]');
insert into emp values('A100102','   ',' ',38,'13111223344','   ','2000-1-1','[email protected]');
insert into emp values('A100103','   ',' ',28,'13111223344','   ','2001-1-1','[email protected]');
insert into emp values('A100104','  ',' ',27,'13111223344','   ','2002-1-1','[email protected]');
insert into emp values('A100105','   ',' ',18,'13111223344','  ','2010-1-1','[email protected]');
insert into emp values('A100106','   ',' ',19,'13111223344','  ','2011-1-1','[email protected]');
insert into emp values('A100107','   ',' ',20,'13111223344','   ','2015-1-1','[email protected]');
insert into emp values('A100106','    ',' ',19,'13111223344','  ','2011-1-1','[email protected]');
select * from emp;

答え
#   

#A.           
select * from emp;
#B.         ,  ,  
SELECT NAME,PHONE,EMAIL FROM EMP;
#C.            
SELECT * FROM EMP WHERE SEX=' ';
#D.       18   20          ,  
SELECT name,sex FROM emp WHERE age BETWEEN 18 AND 20;
#E.              ,  ,  
SELECT name,phone,address FROM emp WHERE sex=' ' AND address='  ';
#F.     、   、      ,  
SELECT name,phone,address FROM emp WHERE name='  ' or name='   ' or name='   ';
#G.                 ,  ,  
SELECT name,sex,age,address FROM emp WHERE address='   ' or address='  ';
#H.       ,    15   25           
SELECT name FROM emp WHERE address='  ' AND sex=' ' AND age BETWEEN 15 AND 25;
#I.            
SELECT * FROM emp WHERE email IS NULL;
#J.             
SELECT * FROM emp WHERE TIMESTAMPDIFF(YEAR,times,now())>2;
#K.           
SELECT COUNT(SEX) FROM emp WHERE sex=' ';
SELECT COUNT(SEX) FROM emp WHERE sex=' ';
#L.    ,       
SELECT SUM(age) FROM emp WHERE sex=' ';
SELECT SUM(age) FROM emp WHERE sex=' ';
#M.             
SELECT MIN(age) FROM emp WHERE address='  ';
#N.          
SELECT SUM(age) FROM emp;

タイトル2
2.      dept      emps[       ],      :
A.               
B.     12         
C.                 
D.      6          
E.     "R"     
F.               
G.         , "a"     "A"
H.             10         
I.         ,     
J.      ,       ,           。
K.         、     ,              ,     
   
L.                    ,           ,   
         
M.        30              ,    
N.   (     )2         
O.      ,          
P.             "A"        
Q.  、              

2つのテーブルデータ情報
DROP TABLE IF EXISTS EMPS;
DROP TABLE IF EXISTS DEPT;
CREATE TABLE DEPT
(
DEPTNO INT PRIMARY KEY,
DNAME VARCHAR(14),
LOC VARCHAR(13)
);
CREATE TABLE EMPS
(
EMPNO INT PRIMARY KEY,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR INT,
HIREDATE TIMESTAMP,
SAL FLOAT,
COMM FLOAT,
DEPTNO INT,
FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO)
);
INSERT INTO DEPT VALUES(10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES(20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES(30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES(40,'OPERATIONS','BOSTON');

INSERT INTO EMPS VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO EMPS VALUES(7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30);
INSERT INTO EMPS VALUES(7521,'WARD','SALESMAN',7698,'1981-2-22',1250,500,30);
INSERT INTO EMPS VALUES(7566,'JONES','MANAGER',7839,'1981-4-2',2975,NULL,20);
INSERT INTO EMPS VALUES(7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250,1400,30);
INSERT INTO EMPS VALUES(7698,'BLAKE','MANAGER',7839,'1981-5-1',2850,NULL,30);
INSERT INTO EMPS VALUES(7782,'CLARK','MANAGER',7839,'1981-6-9',2450,NULL,10);
INSERT INTO EMPS VALUES(7788,'SCOTT','ANALYST',7566,'1987-4-19',3000,NULL,20);
INSERT INTO EMPS VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO EMPS VALUES(7844,'TURNER','SALESMAN',7698,'1981-9-8',1500,0,30);
INSERT INTO EMPS VALUES(7876,'ADAMS','CLERK',7788,'1987-5-23',1100,NULL,20);
INSERT INTO EMPS VALUES(7900,'JAMES','CLERK',7698,'1981-12-3',950,NULL,30);
INSERT INTO EMPS VALUES(7902,'FORD','ANALYST',7566,'1981-12-3',3000,NULL,20);
INSERT INTO EMPS VALUES(7934,'MILLER','CLERK',7782,'1982-1-23',1300,NULL,10);

SELECT * FROM DEPT;
SELECT * FROM EMPS;

答え
#   

#A.               
SELECT * FROM EMPS WHERE HIREDATE=LAST_DAY(HIREDATE);
#B.     12         
SELECT * FROM EMPS WHERE TIMESTAMPDIFF(YEAR,HIREDATE,NOW())>12;
#C.                 
#regexp               
#binary           MySQL      
#   ^               
#     $        
#  \        [A-Z]        
SELECT ENAME FROM EMPS WHERE ENAME REGEXP BINARY '^\[A-Z]';
#D.      6          
SELECT ENAME FROM EMPS WHERE LENGTH(ENAME)=6;
#E.     "R"     
SELECT ENAME FROM EMPS WHERE ENAME NOT LIKE '%R%';
#F.               
SELECT SUBSTR(ENAME FROM 1 FOR 3) FROM EMPS;
#G.         , "a"     "A"
SELECT REPLACE(ENAME,'A','a') FROM EMPS;
#H.             10         
SELECT ENAME,ADDDATE(HIREDATE,INTERVAL 10 YEAR) FROM EMPS;
#I.         ,     
SELECT * FROM EMPS ORDER BY ENAME;
#      ,       ,           。
SELECT ENAME,HIREDATE FROM EMPS ORDER BY DATEDIFF(NOW(),HIREDATE) DESC;
#K.         、     ,              ,        
SELECT ENAME,JOB,SAL FROM EMPS ORDER BY JOB DESC,SAL ASC;
#L.                    ,           ,            
SELECT ENAME,HIREDATE FROM EMPS ORDER BY DATE_FORMAT(HIREDATE,'%Y') ASC,DATE_FORMAT(HIREDATE,'%m') ASC;
#M.        30              ,    
SELECT ENAME,round(sal/30,0) AS daysal FROM EMPS;
#N.   (     )2         
SELECT * FROM EMPS WHERE DATE_FORMAT(HIREDATE,'%m')=2;
#O.      ,          
SELECT ENAME,TIMESTAMPDIFF(DAY,HIREDATE,NOW()) AS JOBDAY FROM EMPS; 
#P.             "A"        
SELECT ENAME FROM EMPS WHERE ENAME LIKE '%A%';
#Q.  、              
SELECT ENAME,HIREDATE,TIMESTAMPDIFF(YEAR,HIREDATE,NOW()) AS '    ',TIMESTAMPDIFF(MONTH,HIREDATE,NOW()) AS '    ',TIMESTAMPDIFF(DAY,HIREDATE,NOW()) AS '    ' FROM EMPS;