数据库经典题目整理摘录

来源:互联网 发布:数据分析助理干啥的 编辑:程序博客网 时间:2024/06/08 07:40
  1. CREATE DATABASE 50q;  
  2. USE 50q;  
  3.   
  4. CREATE TABLE STUDENT  
  5. (  
  6.  SNO       VARCHAR(3) NOT NULL,   
  7.  SNAME     VARCHAR(4) NOT NULL,  
  8.  SSEX      VARCHAR(2) NOT NULL,   
  9.  SBIRTHDAY DATETIME,  
  10.  CLASS     VARCHAR(5)  
  11.  );  
  12.  -- VARCHAR(M) 每个值占用的字节长度=该值字节数+1,M只是其最大值--  
  13.  -- MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format--  
  14.    
  15. CREATE TABLE COURSE  
  16. (  
  17.  CNO   VARCHAR(5)  NOT NULL,   
  18.  CNAME VARCHAR(10) NOT NULL,   
  19.  TNO   VARCHAR(3) NOT NULL  
  20.  );  
  21.    
  22.  CREATE TABLE SCORE   
  23. (  
  24.  SNO    VARCHAR(3)     NOT NULL,   
  25.  CNO    VARCHAR(5)     NOT NULL,   
  26.  DEGREE NUMERIC(10, 1) NOT NULL  
  27.  ) ;  
  28.  -- NUMERIC(5,2)的赋值范围是[-999.99,999.99]--  
  29.  -- NUMERIC(M)等价于NUMERIC(M,0), NUMERIC等价于NUMERIC(10)--  
  30.    
  31.  CREATE TABLE TEACHER   
  32. (  
  33.  TNO       VARCHAR(3)  NOT NULL,   
  34.  TNAME     VARCHAR(4)  NOT NULL,   
  35.  TSEX      VARCHAR(2)  NOT NULL,   
  36.  TBIRTHDAY DATETIME    NOT NULL,   
  37.  PROF      VARCHAR(6),   
  38.  DEPART    VARCHAR(10) NOT NULL  
  39.  );  
  40.   
  41.  ALTER TABLE STUDENT ADD PRIMARY KEY (SNO);  
  42.  ALTER TABLE SCORE   ADD PRIMARY KEY (SNO,CNO);  
  43.  ALTER TABLE COURSE  ADD PRIMARY KEY (CNO);  
  44.  ALTER TABLE TEACHER ADD PRIMARY KEY (TNO);  
  45.   
  46. -- 先添加外键,再添加值--  
  47. -- 外键在两张table中的数据类型须一致--  
  48.  ALTER TABLE SCORE   ADD CONSTRAINT FK_SCORE_STUDENT  FOREIGN KEY (SNO) REFERENCES STUDENT(SNO);  
  49.  ALTER TABLE SCORE   ADD CONSTRAINT FK_SCORE_COURSE   FOREIGN KEY (CNO) REFERENCES COURSE(CNO);  
  50.  ALTER TABLE COURSE  ADD CONSTRAINT FK_COURSE_TEACHER FOREIGN KEY (TNO) REFERENCES TEACHER(TNO);  
  51.    
  52.  -- 先对REFERENCES中所指的表添加值--  
  53.  INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS)   
  54.  VALUES (108 ,'曾华' ,'男' ,'1977-09-01',95033);  
  55.  INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS)   
  56.  VALUES (105 ,'匡明' ,'男' ,'1975-10-02',95031);  
  57.  INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS)   
  58.  VALUES (107 ,'王丽' ,'女' ,'1976-01-23',95033);  
  59.  INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS)   
  60.  VALUES (101 ,'李军' ,'男' ,'1976-02-20',95033);  
  61.  INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS)   
  62.  VALUES (109 ,'王芳' ,'女' ,'1975-02-10',95031);  
  63.  INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS)   
  64.  VALUES (103 ,'陆君' ,'男' ,'1974-06-03',95031);  
  65.    
  66.  INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)   
  67.  VALUES (804,'李诚','男','1958-12-02','副教授','计算机系');  
  68.  INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)   
  69.  VALUES (856,'张旭','男','1969-03-12','讲师','电子工程系');  
  70.  INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)  
  71.  VALUES (825,'王萍','女','1972-05-05','助教','计算机系');  
  72.  INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)   
  73.  VALUES (831,'刘冰','女','1977-08-14','助教','电子工程系');  
  74.    
  75.  INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-105' ,'计算机导论',825);  
  76.  INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系统' ,804);  
  77.  INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('6-166' ,'数据电路' ,856);  
  78.  INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('9-888' ,'高等数学' ,831);  
  79.   
  80.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-245',86);  
  81.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-245',75);  
  82.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-245',68);  
  83.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-105',92);  
  84.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-105',88);  
  85.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-105',76);  
  86.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'3-105',64);  
  87.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'3-105',91);  
  88.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'3-105',78);  
  89.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'6-166',85);  
  90.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'6-166',79);  
  91.  INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'6-166',81);  









  1. -- 1、 查询Student表中的所有记录的Sname、Ssex和Class列。--  
  2. SELECT SNAME,SSEX,CLASS FROM STUDENT;  
  3.   
  4. -- 2、 查询教师所有的单位即不重复的Depart列。--  
  5. SELECT DISTINCT DEPART FROM TEACHER;  
  6.   
  7. -- 3、 查询Student表的所有记录。--  
  8. SELECT * FROM STUDENT;  
  9.   
  10. -- 4、 查询Score表中成绩在60到80之间的所有记录。--  
  11. SELECT * FROM SCORE  
  12. WHERE DEGREE>=60 AND DEGREE<=80;  
  13.   
  14. SELECT * FROM SCORE  
  15. WHERE DEGREE BETWEEN 60 AND 80; /*BETWEEN AND: 取值包括两边界*/  
  16.   
  17. -- 5、 查询Score表中成绩为85,86或88的记录。--  
  18. SELECT * FROM SCORE  
  19. WHERE DEGREE=85 OR DEGREE=86 OR DEGREE=88;  
  20.   
  21. SELECT * FROM SCORE  
  22. WHERE DEGREE IN (85,86,88);  
  23.   
  24. -- 6、 查询Student表中“95031”班或性别为“女”的同学记录。--  
  25. SELECT * FROM STUDENT  
  26. WHERE CLASS=95031 OR SSEX='女';  
  27.   
  28. -- 7、 以Class降序查询Student表的所有记录。--  
  29. SELECT * FROM STUDENT  
  30. ORDER BY CLASS DESC;  
  31.   
  32. -- 8、 以Cno升序、Degree降序查询Score表的所有记录。--  
  33. SELECT * FROM SCORE  
  34. ORDER BY CNO, DEGREE DESC;  
  35.   
  36. -- 9、 查询“95031”班的学生人数。--  
  37. SELECT COUNT(*) FROM STUDENT  
  38. WHERE CLASS=95031;  
  39.   
  40. -- 10、查询Score表中的最高分的学生学号和课程号。--  
  41. SELECT SNO,CNO FROM SCORE  
  42. WHERE DEGREE=(SELECT MAX(DEGREE) FROM SCORE);  
  43.   
  44. SELECT SNO,CNO FROM SCORE  
  45. ORDER BY DEGREE DESC  
  46. LIMIT 1;  
  47.   
  48. -- 11、查询‘3-105’号课程的平均分。--  
  49. SELECT AVG(DEGREE) FROM SCORE  
  50. WHERE CNO='3-105';  
  51.   
  52. -- 12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。--  
  53. SELECT AVG(DEGREE) FROM SCORE  
  54. WHERE CNO LIKE'3%'   
  55. GROUP BY CNO  
  56. HAVING COUNT(*)>=5;  
  57.   
  58. -- 13、查询最低分大于70,最高分小于90的Sno列。--  
  59. SELECT SNO FROM SCORE  
  60. GROUP BY SNO  
  61. HAVING MAX(DEGREE)<90 AND MIN(DEGREE)>70;  
  62.   
  63. -- 14、查询所有学生的Sname、Cno和Degree列。--  
  64. SELECT SNAME,CNO,DEGREE   
  65. FROM STUDENT,SCORE  
  66. WHERE STUDENT.SNO=SCORE.SNO;  
  67.   
  68. SELECT SNAME,CNO,DEGREE  
  69. FROM STUDENT INNER JOIN SCORE  
  70. ON STUDENT.SNO=SCORE.SNO;  
  71.   
  72. -- 15、查询所有学生的Sno、Cname和Degree列。--  
  73. SELECT SNO,CNAME,DEGREE  
  74. FROM SCORE,COURSE  
  75. WHERE SCORE.CNO=COURSE.CNO;  
  76.   
  77. SELECT SNO,CNAME,DEGREE  
  78. FROM SCORE INNER JOIN COURSE  
  79. ON SCORE.CNO=COURSE.CNO;  
  80.   
  81. -- 16、查询所有学生的Sname、Cname和Degree列。--  
  82. SELECT SNAME,CNAME,DEGREE  
  83. FROM STUDENT,COURSE,SCORE  
  84. WHERE STUDENT.SNO=SCORE.SNO  
  85. AND COURSE.CNO=SCORE.CNO;  
  86.   
  87. -- 17、查询“95033”班所选课程的平均分。--  
  88. SELECT AVG(DEGREE)   
  89. FROM SCORE,STUDENT  
  90. WHERE SCORE.SNO=STUDENT.SNO  
  91. AND CLASS=95033;  
  92.   
  93. SELECT AVG(DEGREE)   
  94. FROM SCORE INNER JOIN STUDENT  
  95. ON SCORE.SNO=STUDENT.SNO  
  96. WHERE CLASS=95033;  
  97.   
  98. -- 18、假设使用如下命令建立了一个grade表:  
  99. -- CREATE TABLE GRADE  
  100. -- (  
  101. -- LOW  NUMERIC(3,0),  
  102. -- UPP  NUMERIC(3),  
  103. -- RANK CHAR(1)  
  104. -- );  
  105. -- INSERT INTO GRADE  
  106. -- VALUES(90,100,'A');  
  107. -- INSERT INTO GRADE  
  108. -- VALUES(80,89,'B');  
  109. -- INSERT INTO GRADE  
  110. -- VALUES(70,79,'C');  
  111. -- INSERT INTO GRADE  
  112. -- VALUES(60,69,'D');  
  113. -- INSERT INTO GRADE  
  114. -- VALUES(0,59,'E');  
  115. -- COMMIT;  
  116. -- 现查询所有同学的Sno、Cno和rank列。--  
  117. SELECT SNO,CNO,DEGREE  
  118. FROM SCORE INNER JOIN GRADE  
  119. WHERE DEGREE BETWEEN LOW AND UPP;  
  120.   
  121. -- 19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。--  
  122. SELECT A.*   
  123. FROM SCORE AS A JOIN SCORE AS B   
  124. WHERE A.CNO='3-105'   
  125. AND A.DEGREE>B.DEGREE   
  126. AND B.SNO='109'   
  127. AND B.CNO='3-105';  
  128.   
  129. SELECT * FROM SCORE  
  130. WHERE CNO='3-105' AND DEGREE>(SELECT DEGREE FROM SCORE  
  131.                                WHERE CNO='3-105' AND SNO=109);  
  132.                                  
  133. -- 20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。--  
  134. SELECT * FROM SCORE  
  135. WHERE DEGREE<(SELECT MAX(DEGREE) FROM SCORE)  
  136. AND SNO IN(SELECT SNO FROM SCORE  
  137.            GROUP BY SNO  
  138.            HAVING COUNT(*)>1);  
  139.   
  140. -- 21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。--  
  141. SELECT A.* FROM SCORE AS A INNER JOIN SCORE AS B  
  142. WHERE B.SNO=109 AND B.CNO='3-105' AND A.CNO='3-105'AND A.DEGREE>B.DEGREE;  
  143.   
  144. -- 22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。--  
  145. SELECT SNO,SNAME,SBIRTHDAY   
  146. FROM STUDENT  
  147. WHERE YEAR(SBIRTHDAY)=(SELECT YEAR(SBIRTHDAY) FROM STUDENT  
  148.                        WHERE SNO=108);  
  149.   
  150. -- 23、查询“张旭“教师任课的学生成绩。--  
  151. SELECT DEGREE   
  152. FROM SCORE,TEACHER,COURSE  
  153. WHERE SCORE.CNO=COURSE.CNO  
  154. AND COURSE.TNO=TEACHER.TNO  
  155. AND TEACHER.TNAME='张旭';  
  156.   
  157. -- 24、查询选修某课程的同学人数多于5人的教师姓名。  
  158. SELECT TNAME  
  159. FROM TEACHER,COURSE,SCORE  
  160. WHERE TEACHER.TNO=COURSE.TNO  
  161. AND COURSE.CNO=SCORE.CNO  
  162. GROUP BY SCORE.CNO  
  163. HAVING COUNT(*)>5;  
  164.   
  165. -- 25、查询95033班和95031班全体学生的记录。--  
  166. SELECT * FROM STUDENT  
  167. WHERE CLASS IN (95033,95031);  
  168.   
  169. -- 26、查询存在有85分以上成绩的课程Cno.--  
  170. SELECT DISTINCT CNO FROM SCORE  
  171. WHERE DEGREE>85;  
  172.   
  173. -- 27、查询出“计算机系“教师所教课程的成绩表。--  
  174. SELECT DEGREE FROM SCORE,TEACHER,COURSE  
  175. WHERE SCORE.CNO=COURSE.CNO  
  176. AND COURSE.TNO=TEACHER.TNO  
  177. AND TEACHER.DEPART='计算机系';  
  178.   
  179. -- 28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。--  
  180. SELECT TNAME,PROF FROM TEACHER  
  181. WHERE DEPART='计算机系'   
  182. AND PROF NOT IN (SELECT PROF FROM TEACHER   
  183.                  WHERE DEPART='电子工程系');   
  184.   
  185. -- 29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。--  
  186. SELECT * FROM SCORE   
  187. WHERE DEGREE>ANY(SELECT DEGREE FROM SCORE WHERE CNO='3-245')  
  188. AND CNO='3-105'  
  189. ORDER BY DEGREE DESC;  
  190.   
  191. -- 30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.--  
  192. SELECT * FROM SCORE   
  193. WHERE DEGREE>ALL(SELECT DEGREE FROM SCORE WHERE CNO='3-245')  
  194. AND CNO='3-105';  
  195.   
  196. -- 31、查询所有教师和同学的name、sex和birthday.--  
  197. SELECT SNAME AS NAME,SSEX AS SEX,SBIRTHDAY AS BIRTHDAY  
  198. FROM STUDENT  
  199. UNION  
  200. SELECT TNAME AS NAME,TSEX AS SEX,TBIRTHDAY AS BIRTHDAY  
  201. FROM TEACHER;  
  202.   
  203. -- 32、查询所有“女”教师和“女”同学的name、sex和birthday.--  
  204. SELECT SNAME AS NAME,SSEX AS SEX,SBIRTHDAY AS BIRTHDAY  
  205. FROM STUDENT  
  206. WHERE SSEX='女'  
  207. UNION  
  208. SELECT TNAME AS NAME,TSEX AS SEX,TBIRTHDAY AS BIRTHDAY  
  209. FROM TEACHER  
  210. WHERE TSEX='女';  
  211.   
  212. -- 33、查询成绩比该课程平均成绩低的同学的成绩表。--  
  213. SELECT A.*  
  214. FROM SCORE AS A LEFT OUTER JOIN SCORE AS B  
  215. ON A.CNO=B.CNO  
  216. GROUP BY A.SNO,B.CNO  
  217. HAVING A.DEGREE<AVG(B.DEGREE);  
  218.   
  219. SELECT A.* FROM SCORE AS A   
  220. WHERE DEGREE<(SELECT AVG(DEGREE) FROM SCORE AS B   
  221.               WHERE A.CNO=B.CNO);  
  222.   
  223. -- 34、查询所有任课教师的Tname和Depart.--  
  224. SELECT TNAME,DEPART  
  225. FROM TEACHER,COURSE  
  226. WHERE TEACHER.TNO=COURSE.TNO;  
  227.   
  228. SELECT A.TNAME,A.DEPART   
  229. FROM TEACHER A INNER JOIN COURSE B   
  230. ON A.TNO=B.TNO;  
  231.   
  232. SELECT TNAME,DEPART FROM TEACHER AS A  
  233. WHERE EXISTS(SELECT * FROM COURSE AS B  
  234.              WHERE A.TNO=B.TNO);  
  235.   
  236. SELECT TNAME,DEPART FROM TEACHER  
  237. WHERE TNO IN (SELECT TNO FROM COURSE);  
  238.   
  239. -- 35  查询所有未讲课的教师的Tname和Depart.--  
  240. SELECT TNAME,DEPART FROM TEACHER  
  241. WHERE TNO NOT IN (SELECT TNO FROM COURSE);  /*NOT IN效率最差*/  
  242.   
  243. SELECT TNAME,DEPART   
  244. FROM TEACHER AS A LEFT JOIN COURSE AS B  
  245. USING (TNO)  
  246. WHERE B.TNO IS NULL;  
  247.   
  248. SELECT TNAME,DEPART FROM TEACHER AS A  
  249. WHERE NOT EXISTS (SELECT * FROM COURSE AS B  
  250.                   WHERE A.TNO=B.TNO);  
  251.    
  252. -- 36、查询至少有2名男生的班号。--  
  253. SELECT CLASS FROM STUDENT  
  254. GROUP BY CLASS,SSEX  
  255. HAVING COUNT(*)>=2;  
  256.   
  257. SELECT CLASS FROM STUDENT   
  258. WHERE SSEX='男'   
  259. GROUP BY CLASS   
  260. HAVING COUNT(SSEX)>1;  
  261.   
  262. -- 37、查询Student表中不姓“王”的同学记录。--  
  263. SELECT * FROM STUDENT  
  264. WHERE SNAME NOT LIKE '王%';  
  265.   
  266. -- 38、查询Student表中每个学生的姓名和年龄。--  
  267. SELECT SNAME,YEAR(NOW())-YEAR(SBIRTHDAY) AS AGE  
  268. FROM STUDENT;  
  269.   
  270. -- 39、查询Student表中最大和最小的Sbirthday日期值。--  
  271. SELECT MAX(SBIRTHDAY),MIN(SBIRTHDAY)  
  272. FROM STUDENT;  
  273.   
  274. -- 40、以班号和年龄从大到小的顺序查询Student表中的全部记录。--  
  275. SELECT * FROM STUDENT  
  276. ORDER BY CLASS DESC,SBIRTHDAY;  
  277.   
  278. -- 41、查询“男”教师及其所上的课程。--  
  279. SELECT TEACHER.TNO,TNAME,CNO  
  280. FROM TEACHER INNER JOIN COURSE  
  281. ON TEACHER.TNO=COURSE.TNO  
  282. WHERE TSEX='男';  
  283.   
  284. -- 42、查询最高分同学的Sno、Cno和Degree列。--  
  285. SELECT SNO,CNO,DEGREE  
  286. FROM SCORE  
  287. WHERE DEGREE=(SELECT MAX(DEGREE) FROM SCORE);  
  288.   
  289. -- 43、查询和“李军”同性别的所有同学的Sname.--  
  290. SELECT SNAME FROM STUDENT  
  291. WHERE SSEX=(SELECT SSEX FROM STUDENT  
  292.             WHERE SNAME='李军');  
  293.               
  294. SELECT A.SNAME  
  295. FROM STUDENT AS A, STUDENT AS B  
  296. WHERE A.SSEX=B.SSEX  
  297. AND B.SNAME='李军';  
  298.   
  299. -- 44、查询和“李军”同性别并同班的同学Sname.--  
  300. SELECT A.SNAME  
  301. FROM STUDENT AS A, STUDENT AS B  
  302. WHERE A.SSEX=B.SSEX  
  303. AND A.CLASS=B.CLASS  
  304. AND B.SNAME='李军';  
  305.   
  306. -- 45、查询所有选修“计算机导论”课程的“男”同学的成绩表--  
  307. SELECT STUDENT.SNO,DEGREE  
  308. FROM SCORE,STUDENT,COURSE  
  309. WHERE SCORE.CNO=COURSE.CNO  
  310. AND STUDENT.SNO=SCORE.SNO  
  311. AND COURSE.CNAME='计算机导论'  
  312. AND STUDENT.SSEX='男';  










阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 油菜花香演员表 油菜蜂蜜的作用与功效 油菜生长周期 杏鲍菇炒油菜 油菜地除草剂 油菜西红柿鸡蛋汤 痛风能吃油菜吗 油菜几天发芽 油菜炒蘑菇的做法 小油菜炒香菇 产妇可以吃油菜吗 油菜育苗技术 宝宝辅食油菜的做法 油菜豆腐汤的做法 油菜开花时间 油菜花蜜结晶 蚝油香菇油菜 香菇油菜的正宗做法 香菇海米油菜 油菜可以包饺子吗 悦诗风吟油菜花蜜 油菜有什么营养 香菇油菜的简单做法 油菜的生长过程 油菜什么时候种 香菇豆腐油菜 油白菜的做法 凉拌油白菜的做法 菜心怎么做 菜心怎么做好吃 油白菜的做法大全 油白菜怎么做好吃 悠菜 鸡毛菜油菜 蒜香油菜 油葵 油葵怎么吃 油葵脱粒机 油葵种子 油葵饼价格 油葵瓜子