版权所有: 李中华老师


数据的分组查询:
示例1:查询学生学号及其所选课程的门数
命令:SELECT 学号,COUNT(*) AS 选课门数;
      FROM 选课;
      GROUP BY 学号

示例2:查询教师号及其所任课程的门数
命令:SELECT 教师号,COUNT(*) AS 任课门数;
      FROM 授课;
      GROUP BY 教师号

示例3:查询选课两门以上的学生学号及其所选课程的门数
命令:SELECT 学号,COUNT(*) AS 选课门数;
      FROM 选课;
      GROUP BY 学号;
      HAVING COUNT(*)>2

示例4:查询课程平均成绩在75分以上的学生的学号及其所选课程的门数
命令:SELECT 学号,COUNT(*) AS 选课门数;
      FROM 选课;
      GROUP BY 学号;
      HAVING AVG(成绩)>=75
示例5:在课程C120,C140,C150中查询课程平均成绩在75分以上的学生的学号,课程平均成绩极其选课门数
命令:SELECT 学号,AVG(成绩) AS 平均成绩,COUNT(*) AS 选课门数;
      FROM 选课;
      WHERE 课程号 IN("C120","C140","C150");
      GROUP BY 学号;
      HAVING AVG(成绩)>=75

示例6:查询选课两门以上而且各门课程均及格的学生学号及其所选课程的门数
命令:SELECT 学号,COUNT(*) AS 选课门数;
      FROM 选课;
      WHERE 成绩>=60;
      GROUP BY 学号;
      HAVING COUNT(*)>2

排序查询:

示例7:查询选修了课程C140的学生学号和成绩,并按成绩降序排列
命令:SELECT 学号,成绩;
      FROM 选课;
      WHERE 课程号="C140";
      ORDER BY 成绩 DESC


示例8:查询选修了课程C130,C140,C150的学生学号,课程号和成绩,并按课程号升序排列,
       课程相同在按成绩降序排列
命令:SELECT 学号,课程号,成绩;
      FROM 选课;
      WHERE 课程号 IN ("C130","C140","C150");
      ORDER BY 课程号,成绩 DESC

连接查询:

示例9:查询学生学号,姓名及其所选课程的成绩
命令A:SELECT 学生.学号,姓名,成绩;
      FROM 学生,选课;
      WHERE 学生.学号=选课.学号

命令B:SELECT 学生.学号,姓名,成绩;
      FROM 学生;
      INNER JOIN 选课 ON 学生.学号=选课.学号

//      请大家自己改写左连接,右连接和完全连接

示例10:查询选课成绩在80分以上的学生学号,姓名及其所选课程的成绩 
命令A:SELECT 学生.学号,姓名,成绩;
      FROM 学生,选课;
      WHERE 学生.学号=选课.学号 AND 成绩>=80

命令B:SELECT 学生.学号,姓名,成绩;
       FROM 学生;
       INNER JOIN 选课 ON 学生.学号=选课.学号 AND 成绩>=80

命令C:SELECT 学生.学号,姓名,成绩;
       FROM 学生;
       INNER JOIN 选课 ON 学生.学号=选课.学号 ;
       WHERE  成绩>=80

//      请大家自己改写左连接,右连接和完全连接



示例11:查询选课成绩在80分以上的学生学号,姓名及其所选课程的成绩和课程名称 
命令A:SELECT 学生.学号,姓名,成绩,课程名称;
      FROM 学生,选课,课程;
      WHERE 学生.学号=选课.学号 AND 选课.课程号=课程.课程号 AND 成绩>=80

命令B:SELECT 学生.学号,姓名,成绩,课程名称;
      FROM 学生;
      INNER JOIN 选课 ON  学生.学号=选课.学号 ;
      INNER JOIN 课程 ON  选课.课程号=课程.课程号 AND 成绩>=80
命令C:SELECT 学生.学号,姓名,成绩,课程名称;
      FROM 学生;
      INNER JOIN 选课 ON  学生.学号=选课.学号 ;
      INNER JOIN 课程 ON  选课.课程号=课程.课程号 ;
      WHERE  成绩>=80

//      请大家自己改写左连接,右连接和完全连接


示例12:查询教师的编号,姓名极其所授课程的编号
命令:SELECT 教师.教师号,姓名,课程号;
      FROM 教师,授课;
      WHERE 教师.教师号=授课.教师号


示例13:查询教师"程进"的编号,姓名极其所授课程的编号
命令:SELECT 教师.教师号,姓名,课程号;
      FROM 教师,授课;
      WHERE 教师.教师号=授课.教师号 AND 姓名="程进"


示例14:查询教师的编号,姓名极其所授课程的编号以及课程名称
命令:SELECT 教师.教师号,姓名,课程.课程号,课程名称;
      FROM 教师,授课,课程;
      WHERE 教师.教师号=授课.教师号 AND 授课.课程号=课程.课程号

示例15:查询讲授课程"数据库"或"电子商务"的教师的编号,姓名极其所授课程的编号
        以及课程名称并按课程名称升序排列
命令:SELECT 教师.教师号,姓名,课程名称;
      FROM 教师,授课,课程;
      WHERE 教师.教师号=授课.教师号 AND 授课.课程号=课程.课程号 AND ;
(课程名称="数据库" OR 课程名称="电子商务")

自连接查询

示例16:查询所有比吴红梅入校总分高的学生姓名和入校总分
命令:SELECT X.姓名,X.入校总分;
      FROM 学生 AS X,学生 AS Y;
      WHERE X.入校总分>Y.入校总分 AND Y.姓名="吴红梅"

示例17:查询所有和周密职称相同的教师的姓名,性别和职称
命令:SELECT X.姓名,X.性别,X.职称;
      FROM 教师 AS X,教师 AS Y;
      WHERE X.职称=Y.职称 AND Y.姓名="周密"


嵌套查询(子查询):

示例18:查询和周密职称相同的教师的姓名,性别和职称
命令:SELECT 姓名,性别,职称;
      FROM 教师 ;
      WHERE 职称=(;
                  SELECT 职称;
		  FROM 教师;
		  WHERE 姓名="周密";
		  );       


示例19:查询讲授课程号为C140的教师的姓名,性别和职称
命令:SELECT 姓名,性别,职称;
      FROM 教师 ;
      WHERE 教师号=ANY(;
                  SELECT 教师号;
		  FROM 授课;
		  WHERE 课程号="C140";
		  );       


示例20:查询讲授课程号为C140的教师的姓名,性别和职称
命令:SELECT 姓名,性别,职称;
      FROM 教师 ;
      WHERE 教师号=IN(;
                  SELECT 教师号;
		  FROM 授课;
		  WHERE 课程号="C140";
		  );       


示例21:查询比所有男生入校总分高的女生的姓名和入校总分
命令a:SELECT 姓名,入校总分;
      FROM 学生 ;
      WHERE 性别="女" AND 入校总分>ALL(;
	                  		SELECT 入校总分;
			  		FROM 学生;
			  		WHERE 性别="男";
			  		);       


命令b:SELECT 姓名,入校总分;
      FROM 学生 ;
      WHERE 性别="女" AND 入校总分>(;
	                  	   SELECT MAX(入校总分);
			  	   FROM 学生;
			  	   WHERE 性别="男";
			  	    );       


示例22:查询比任何一个男生入校总分高的女生的姓名和入校总分
命令A:SELECT 姓名,入校总分;
      FROM 学生 ;
      WHERE 性别="女" AND 入校总分>ANY(;
	                  		SELECT 入校总分;
			  		FROM 学生;
			  		WHERE 性别="男";
			  		);       



命令B:SELECT 姓名,入校总分;
      FROM 学生 ;
      WHERE 性别="女" AND 入校总分>(;
	                  	   SELECT MIN(入校总分);
			  	   FROM 学生;
			  	   WHERE 性别="男";
			  	   );       

示例23:查询讲授课程号为C140的教师的姓名,性别和职称
命令:SELECT 姓名,性别,职称;
      FROM 教师 ;
      WHERE EXISTS(;
                  SELECT *;
		  FROM 授课;
		  WHERE 教师.教师号=授课.教师号 AND 课程号="C140";
		  );       



定制查询结果的输出:

示例24:查询学生学号,姓名,性别并将结果输出到数据表DATAFORM中
命令:SELECT 学号,姓名,性别;
      FROM 学生;
      INTO TABLE DATAFORM

示例25:查询学生学号,姓名,性别并将结果输出到临时表DATAFORM中
命令:SELECT 学号,姓名,性别;
      FROM 学生;
      INTO CURSOR DATAFORM

示例26:查询学生学号,姓名,性别并将结果输出到文本文件TXTFILE中
命令:SELECT 学号,姓名,性别;
      FROM 学生;
      TO FILE TXTFILE
 
示例27:查询学生学号,姓名,性别并将结果输出到打印机中打印
命令:SELECT 学号,姓名,性别;
      FROM 学生;
      TO PRINT

示例28:查询学生学号,姓名,性别并将结果直接输出到屏幕窗口上
命令:SELECT 学号,姓名,性别;
      FROM 学生;
      TO SCREEN


数据更新

示例29:网学生表中插入一条新记录
命令:INSERT INTO 学生(学号,姓名,性别,出生年月,入校总分,三好生);
      VALUES("S0301111","许昌","女",CTOD("02/05/84"),588,T)

示例30:修改记录把程进老师的职称改为副教授

命令:UPDATE 教师;
      SET 职称="副教授";
      WHERE 姓名="程进"


示例31:修改记录把程进老师的职称改为副教授,工资改为1800

命令:UPDATE 教师;
      SET 职称="副教授",工资=1800;
      WHERE 姓名="程进"

示例32:修改记录把所有讲师的工资提升20%

命令:UPDATE 教师;
      SET 工资=工资*0.2;
      WHERE 职称="讲师"


示例33:删除刘伟教师的记录

命令:DELETE FROM 教师 WHERE 姓名="刘伟"


示例33:删除所有教师的记录

命令:DELETE FROM 教师