一、简单查询1、列出全部学生的信息。
SELECT * FROM 学生2、列出软件专业全部学生的学号及姓名。
SELECT 学号,姓名FROM 学生WHERE 专业="软件"3、列出所有必修课的课号。
SELECT DISTINCT 课号FROM 必修课4、求1号课成绩大于80分的学生的学号及成绩,并按成绩由高到低列出。
SELECT 学号,成绩FROM 选课WHERE 课号="1" AND 成绩>80 ORDER BY 成绩DESC5、列出非软件专业学生的名单。
方法一:SELECT 姓名FROM 学生WHERE 专业<>"软件"方法二:SELECT 姓名FROM 学生WHERE NOT 专业="软件"方法三:SELECT 姓名FROM 学生WHERE 专业!="软件"6、查询成绩在70~80分之间的学生选课得分情况方法一:SELECT * FROM 选课WHERE 成绩>=70 AND 成绩<=80方法二:SELECT * FROM 选课WHERE 成绩BETWEEN 70 AND 80不在此范围内的查询:(注意写出和以下语句等价的语句)SELECT * FROM 选课WHERE 成绩NOT BETWEEN 70 AND 807、列出选修1号课或3号课的全体学生的学号和成绩。
方法一:SELECT 学号,成绩FROM 选课WHERE 课号="1" OR 课号="3"方法二:SELECT 学号,成绩FROM 选课WHERE 课号IN ("1","3")相反条件查询:SELECT 学号,成绩FROM 选课WHERE 课号NOT IN ("1","3") 8、列出所有98级学生的学生成绩情况。
SELECT * FROM 选课WHERE 学号LIKE "98%"SELECT * FROM 选课WHERE 学号LIKE "98_ _ _ _"相反条件查询:SELECT * FROM 选课WHERE 学号NOT LIKE "98%"9、列出成绩为空值(或不为空值)的学生的学号和课号。
答案一:SELECT 学号,课号FROM 选课WHERE 成绩IS NULL答案二:SELECT 学号,课号FROM 选课WHERE 成绩IS NOT NULL10、求出所有学生的总成绩。
SELECT SUM(成绩) AS 总成绩FROM 选课11、列出每个学生的平均成绩。
SELECT 学号,AVG(成绩) AS 平均成绩FROM 选课GROUP BY 学号12、列出各科的平均成绩、最高成绩、最低成绩和选课人数。
SELECT 课号,AVG(成绩) AS 平均成绩,MAX(成绩) AS 最高分,;MIN(成绩) AS 最低分,COUNT(学号) AS 选课人数FROM 选课GROUP BY 课号二、连接查询(一)简单连接1、列出选修1号课的学生姓名及成绩。
SELECT 姓名,成绩FROM 学生,选课WHERE 学生.学号=选课.学号AND 课号="1"2、列出选修1号课的学生的学号、姓名及成绩。
SELECT 学生.学号,姓名,成绩FROM 学生S,选课X WHERE S.学号=X.学号AND 课号="1"3、求出总分大于150的学生的学号、姓名及总成绩。
SELECT 学生.学号,姓名,SUM(成绩) AS 总成绩FROM 学生,选课;WHERE 学生.学号=选课.学号GROUP BY 选课.学号HAVING SUM(成绩)>150(二)自连接查询1、列出那些专业相同的学生相应的姓名及专业信息。
SELECT a.姓名,b.姓名,专业FROM 学生a,学生b WHERE a.学号<>b.学号AND a.专业=b.专业2、求至少选修1号课和2号课的学生的学号。
SELECT X.学号FROM 选课X,选课Y WHERE X.学号=Y.学号AND X.课号="1" AND Y.课号="2"3、有以下表rate.dbf币种1代码C(2)、币种2代码C(2)、买入价N(8,4)、卖出价N(8,4)外汇汇率.dbf币种1 C(4)、币种2 C(4)、买入价N(8,4)、卖出价N(8,4)外汇代码.dbf外汇名称C(10)、外汇代码C(10)要求:将所有“外汇汇率”表中的数据插入rate表中并且顺序不变,由于“外汇汇率”中的币种1和币种2存放的是外币名称,而rate表中的币种1代码和币种2代码应该存放外币代码,所以插入时要做相应的改动,外币名称与外向代码的对应关系存储在“外汇代码”表中。
SELECT A.外币代码AS 币种1代码,B.外币代码AS 币种2代码,;买入价,卖出价FROM 外汇代码A,外汇汇率,外汇代码B;WHERE A.外币名称=外汇汇率.币种1 AND B.外币名称=外汇汇率.币种2 INTO TABLE rate4、假定有“雇员”表(雇员号C(2),雇员姓名C(6),经理号C(2)),根据雇员关系列出上一级经理及其所领导的职员清单。
(教案中的例题)SELECT "领导",S.雇员姓名,"雇员",E.雇员姓名FROM 雇员S,雇员E WHERE S.雇员号=E.经理(三)超连接1、列出选修1号课的学生姓名及成绩。
方法一:(使用简单连接查询格式)SELECT 姓名,成绩FROM 学生,选课WHERE 学生.学号=选课.学号AND 课号="1"方法二:(使用内部连接格式)SELECT 姓名,成绩FROM 学生INNER JOIN 选课ON 学生.学号=选课.学号WHERE 课号="1"方法三:内部连接的INNER短语可以省略。
(与方法二等价)SELECT 姓名,成绩FROM 学生JOIN 选课ON 学生.学号=选课.学号WHERE 课号="1"2、查询订货管理数据库中数据的仓库号、城市、供应商名和地址信息。
方法一:使用简单连接格式。
SELECT 仓库.仓库号,城市,供应商名,地址FROM 供应商,订购单,职工,仓库;WHERE 供应商.供应商号=订购单.供应商号AND订购单.职工号=职工.职工号;AND 职工.仓库号=仓库.仓库号方法二:使用超连接的内部连接格式。
(注意连接条件的顺序)SELECT 仓库.仓库号,城市,供应商名,地址FROM 供应商JOIN 订购单JOIN 职工JOIN 仓库;ON 职工.仓库号=仓库.仓库号ON 订购单.职工号=职工.职工号ON 供应商.供应商号=订购单.供应商号3、查询没有选修任何课程的学生姓名。
方法一:使用嵌套查询SELECT 姓名FROM 学生WHERE 学号NOT IN (SELECT 学号FROM 选课)方法二:使用超连接的右连接。
SELECT 姓名FROM 选课RIGHT JOIN 学生ON 选课.学号=学生.学号WHERE 选课.学号<>学生.学号方法三:使用超连接的左连接。
(注意表名顺序和方法二的不同)SELECT 姓名FROM 学生LEFT JOIN 选课ON 选课.学号=学生.学号WHERE 选课.学号<>学生.学号三、嵌套查询(一)普通嵌套与谓词EXISTS1、列出选修汇编语言课的学生的学号。
方法一:SELECT 学号FROM 选课WHERE 课号=(SELECT 课号FROM 课程WHERE 课名="汇编语言")方法二:使用谓词EXISTS。
注意和方法一格式上的不同。
SELECT 学号FROM 选课WHERE EXIST (SELECT * FROM 课程;WHERE 课名="汇编语言" AND 选课.课号=课程.课号)2、求软件专业所有必修课的课程信息。
方法一:SELECT * FROM 课程WHERE 课号IN; (SELECT 课号FROM 必修课WHERE 必修专业="软件")方法二:SELECT * FROM 课程WHERE EXIST (SELECT * FROM 必修课WHERE 必修专业="软件" ;AND 课程.课号=必修课.课号)(二)量词ANY、SOME、ALL1、求选修2号课的学生中,成绩比选修1号课的最低成绩要高的学生的学号和成绩。
方法一:SELECT 学号,成绩FROM 选课WHERE 课号="2" AND 成绩>;(SELECT MIN(成绩) FROM 选课WHERE 课号="1")方法二:ANY等价于SOME,所以可将ANY换成SOME。
SELECT 学号,成绩FROM 选课WHERE 课号="2" AND 成绩>ANY ;(SELECT 成绩FROM 选课WHERE 课号="1")2、求选修2号课的学生中,成绩比选修1号课的任何学生的成绩都要高的那些学生的学号和成绩。
方法一:SELECT 学号,成绩FROM 选课WHERE 课号="2" AND 成绩>;(SELECT MAX(成绩) FROM 选课WHERE 课号="1")方法二:SELECT 学号,成绩FROM 选课WHERE 课号="2" AND 成绩>ALL ;(SELECT 成绩FROM 选课WHERE 课号="1")(三)内外层互相关嵌套(外层依赖于内层的查询结果,内层依赖于外层来进一步查询)1、列出每门课程中成绩最高的选课信息。
SELECT * FROM 选课A WHERE 成绩=(SELECT MAX(成绩) FROM 选课B WHERE A.课号=B.课号)2、列出每个学生中成绩低于本人平均成绩的选课信息。
SELECT * FROM 选课A WHERE 成绩<(SELECT AVG(成绩) FROM 选课B WHERE A.学号=B.学号)3、列出表“订购单2.dbf”(其内容就是在订购单表的基础上增加一个总金额字段)中每个职工经手的具有最高总金额的订购单信息。
(教案中例题)SELECT out.职工号,out.供应商号,out.订货单号,out.订货日期,out.总金额;FROM 订购单out WHERE 总金额=(SELECT MAX(总金额) FROM 订购单inner1;Where out.职工号=inner1.职工号)四、操作功能1、在课程表中插入新的元组(5,大学英语)。