一、简单查询

1、列出全部学生的信息。

SELECT * FROM 学生

2、列出软件专业全部学生的学号及姓名。

SELECT 学号,姓名 FROM 学生 WHERE专业="软件"

3、列出所有必修课的课号。

SELECT DISTINCT 课号 FROM 必修课

4、求1号课成绩大于80分的学生的学号及成绩,并按成绩由高到低列出。

SELECT 学号,成绩 FROM 选课 WHERE 课号="1" AND成绩>80 ORDER BY 成绩 DESC

5、列出非软件专业学生的名单。

方法一:SELECT 姓名 FROM 学生 WHERE专业<>"软件"

方法二:SELECT 姓名 FROM 学生 WHERE NOT专业="软件"

方法三:SELECT 姓名 FROM 学生 WHERE专业!="软件"

6、查询成绩在70~80分之间的学生选课得分情况

方法一:SELECT * FROM 选课 WHERE成绩>=70 AND 成绩<=80

方法二:SELECT * FROM 选课 WHERE 成绩 BETWEEN 70AND 80

不在此范围内的查询:(注意写出和以下语句等价的语句)

SELECT * FROM 选课 WHERE 成绩 NOT BETWEEN 70AND 80

7、列出选修1号课或3号课的全体学生的学号和成绩。

方法一:SELECT 学号,成绩 FROM 选课 WHERE 课号="1" OR课号="3"

方法二:SELECT 学号,成绩 FROM 选课 WHERE 课号 IN("1","3")

相反条件查询:SELECT 学号,成绩 FROM 选课 WHERE 课号 NOTIN ("1","3")

8、列出所有98级学生的学生成绩情况。

SELECT * FROM 选课 WHERE 学号 LIKE"98%"

SELECT * FROM 选课 WHERE 学号 LIKE "98_ _ __"

相反条件查询:SELECT * FROM 选课 WHERE 学号 NOT LIKE"98%"

9、列出成绩为空值(或不为空值)的学生的学号和课号。

答案一:SELECT 学号,课号 FROM 选课 WHERE 成绩 ISNULL

答案二:SELECT 学号,课号 FROM 选课 WHERE 成绩 IS NOTNULL

10、求出所有学生的总成绩。

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 WHERES.学号=X.学号 AND 课号="1"

3、求出总分大于150的学生的学号、姓名及总成绩。

SELECT 学生.学号,姓名,SUM(成绩) AS 总成绩 FROM学生,选课;

WHERE 学生.学号=选课.学号 GROUP BY 选课.学号 HAVINGSUM(成绩)>150

(二)自连接查询

1、列出那些专业相同的学生相应的姓名及专业信息。

SELECT a.姓名,b.姓名,专业 FROM 学生 a,学生 b WHEREa.学号<>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.外币名称=外汇汇率.币种2INTO TABLE rate

4、假定有“雇员”表(雇员号 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选课.学号<>学生.学号

三、嵌套查询

(一)普通嵌套与谓词EXISTS

1、列出选修汇编语言课的学生的学号。

方法一:

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、ALL

1、求选修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 成绩=(SELECTMAX(成绩) FROM 选课 B WHERE A.课号=B.课号)

2、列出每个学生中成绩低于本人平均成绩的选课信息。

SELECT * FROM 选课 A WHERE成绩<(SELECT AVG(成绩) FROM 选课 B WHEREA.学号=B.学号)

3、列出表“订购单2.dbf”(其内容就是在订购单表的基础上增加一个总金额字段)中每个职工经手的具有最高总金额的订购单信息。(教案中例题)

SELECTout.职工号,out.供应商号,out.订货单号,out.订货日期,out.总金额;

FROM 订购单 out WHERE 总金额=(SELECT MAX(总金额)FROM 订购单 inner1;

Where out.职工号=inner1.职工号)

四、操作功能

1、在课程表中插入新的元组(5,大学英语)。

INSERT INTO 课程(课号,课名)VALUES("5","大学英语")

2、给学生表中男生的记录加上删除标记。

DELETE FROM 学生 WHERE 性别="男"

3、将选课表中所有课程的成绩分别提高5分。将课号为“4”的课程的成绩置为空值。

UPDATE 选课 SET 成绩=成绩+5

UPDATE 选课 SET 成绩=NULL WHERE课号="4"

五、定义表结构

1、建立研究生表,该表不属于任何数据库,其结构如表所示:

字段名

字段类型

字段长度

小数位数

特殊要求

学号

C

6

姓名

C

8

性别

C

2

年龄

N

3

0

入学年月

D

允许空值

CREATE TABLE 研究生 FREE (学号 C(6),姓名 C(8),性别C(2),年龄 N(3,0),入学年月 D NULL)

2、假设已经建立了XSK数据库,在XSK中建立“学生1”表,其结构如表所示

字段名

字段类型

字段长度

小数位数

特殊要求

学号

C

6

主索引

姓名

C

8

不能为空

性别

C

2

年龄

N

3

0

年龄大于10小于45

是否党员

L

入学年月

D

默认值为1999年9月1日

OPEN DATABASE XSK

CREATE TABLE 学生1 (学号 C(6) PRIMARY KEY,姓名C(8) NOT NULL,性别 C(2),;

年龄 N(3,0) CHECK 年龄>10 AND年龄<45 ERROR "年龄必须大于10小于45",是否党员 L,;

入学年月 D DEFAULT {^1999-9-1})

3、在XSK数据库建立“课程1”表,其结构如表所示:

字段名

字段类型

字段长度

小数位数

特殊要求

课号

C

4

主索引

课程名

C

10

不能为空

学分

N

2

CREATE TABLE 课程1 (课号 C(4) PRIMARY KEY,课程名C(10) NOT NULL,学分 N(2))

4、在XSK数据库建立“选课1”表,其结构如表所示:

字段名

字段类型

字段长度

小数位数

特殊要求

学号

C

6

外索引与学生表建立关系

课号

C

4

外索引与课程表建立关系

成绩

N

5

2

CREATE TABLE 选课1 (学号 C(6) REFERENCE 学生,课号C(4) REFERENCE 课程,成绩 N(5,2))

六、修改表结构

1、为“课程1”表添加一个开课学期字段,字段类型为数值型,长度为1。

ALTER TABLE 课程1 ADD COLUMN 开课学期N(1)

2、修改开课学期字段为字符型,合法值为1或2。

ALTER TABLE 课程1 ALTER COLUMN 开课学期 C(1)CHECK 开课学期="1" OR 开课学期="2"

3、删除“课程1”表中对开课学期字段的合法值约束,设置默认值为1。

ALTER TABLE 课程1 ALTER 开课学期 DROPCHECK

ALTER TABLE 课程1 ALTER 开课学期 SET DEFAULT"1"

4、删除“课程1”表中的开课学期字段。修改课程名字段为“课名”字段。

ALTER TABLE 课程1 DROP 开课学期 RENAME 课程名 TO课名

5、在“学生1”表的“年龄”字段上建立候选索引。

ALTER TABLE 学生1 ADD UNIQUE 年龄 TAG年龄

6、在“学生1”表中添加一个出生日期字段,删除年龄字段。

ALTER TABLE 学生1 ADD 出生日期 D

ALTER TABLE 学生1 DROP UNIQUE TAG 年龄 DROP年龄

七、补充练习

利用订货管理数据库中表数据,用SQL完成查询。

1、检索在北京的供应商的名称。

SELECT 供应商名 FROM 供应商 WHERE地址="北京"

2、检索出向供应商S3发过订购单的职工的职工号和仓库号。

方法一(嵌套查询):

SELECT 职工号,仓库号 FROM 职工 WHERE 职工号IN;

(SELECT 职工号 FROM 订购单 WHERE供应商号="S3")

方法二(连接查询):

SELECT 职工.职工号,仓库号 FROM 职工,订购单 ;

WHERE 职工.职工号=订购单.职工号 AND供应商号="S3"

3、检索出和职工E1、E3都有联系的北京的供应商信息。

SELECT * FROM 供应商 WHERE 地址="北京" AND 供应商号IN;

(SELECT 供应商号 FROM 订购单 WHERE 职工号="E1") AND供应商号 IN;

(SELECT 供应商号 FROM 订购单 WHERE职工号="E3")

4、检索出向S4供应商发出订购单的仓库所在的城市。

SELECT 城市 FROM 仓库,职工,订购单 WHERE仓库.仓库号=职工.仓库号 ;

AND 职工.职工号=订购单.职工号 AND供应商号="S4"

5、检索出由工资多于1230元的职工向北京的供应商发出的订购单号。

SELECT 订货单号 FROM 职工,订购单,供应商 WHERE职工.职工号=订购单.职工号;

AND 订购单.供应商号=供应商.供应商号 AND工资>1230 AND 地址="北京"

6、检索出所有仓库的平均面积。

SELECT AVG(面积) AS 面积 FROM 仓库

7、检索出每个仓库中工资多于1220元的职工个数。

SELECT 仓库号,COUNT(*) 职工个数 FROM职工WHERE工资>1220 GROUP BY 仓库号

8、检索工资低于本仓库平均工资的职工信息。

SELECT * FROM 职工 AA WHERE工资<(SELECT AVG(工资) FROM 职工 BB WHEREAA.仓库号=BB.仓库号)

转载于:https://www.cnblogs.com/thatday/p/3463994.html

SQL查询语句基本练习相关推荐

  1. SQL查询语句 select 详解

    查询select: 1.单表查询 2.多表查询 3.嵌套查询分类 1)单表查询 2)多表查询 A.连接查询 B.子查询 ①一般子查询 ②相关子查询*************************** ...

  2. MySQL番外篇:一条SQL查询语句是如何执行的?

    在面试的过程中,有的面试官会给出一条简单的SQL查询语句,让简单说一下执行的过程. SELECT * FROM emp where age=30; 以下问MySQL的基本架构图,从中可以看出SQL语句 ...

  3. SQL查询语句总是先执行SELECT?你们都错了。。。

    来源 | infoq.cn/article/Oke8hgilga3PTZ3gWvbg 很多 SQL 查询都是以 SELECT 开始的.不过,最近我跟别人解释什么是窗口函数,我在网上搜索"是否 ...

  4. R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库、将dplyr语法查询语句翻译为SQL查询语句

    R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库.将dplyr语法查询语句翻译为SQL查询语句 目录

  5. SQL 查询语句总是先执行 SELECT?你们都错了

    很多 SQL 查询都是以 SELECT 开始的.不过,最近我跟别人解释什么是窗口函数,我在网上搜索"是否可以对窗口函数返回的结果进行过滤"这个问题,得出的结论是"窗口函数 ...

  6. SQL 查询语句总是先执行 SELECT?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"1024"领取惊喜资料 很多 SQL 查询都是以 SELECT 开始的.不过,最近我跟 ...

  7. SQL查询语句基础构成

    本文是基本的SQL查询语句用法,内容主要来自Alan Learning SQL这本书第3章,包括select,from,where,group by,having,order by六个查询子句,后续会 ...

  8. 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  9. 怎么做mysql查询系统_mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?...

    一.第一节:一条sql查询语句是怎样执行的 5.5.5版本以后,默认使用存储引擎为InnoDB 不使用查询缓存,MySQL8.0没有查询缓存这个功能 总体来说:MySQL分为service层和存储引擎 ...

  10. 没错,纯SQL查询语句可以实现神经网络

    我们熟知的SQL是一种数据库查询语句,它方便了开发者在大型数据中执行高效的操作.但本文从另一角度嵌套SQL查询语句而构建了一个简单的三层全连接网络,虽然由于语句的嵌套过深而不能高效计算,但仍然是一个非 ...

最新文章

  1. 清华大学为何把突出贡献奖颁给他?看完这个我就懂了
  2. 贪心 ---- Educational Codeforces Round 90 (Rated for Div. 2)E. Sum of Digits[数位贡献+思维题+贪心]
  3. PNAS:人工构建玉米极简微生物组
  4. Flutter调试技巧总结——高效开发的秘密
  5. vuejs linux windows,vue.js环境在window和linux安装
  6. matlab导出jar包错误Error: An error occurred while shelling out to javac(erro code = 1)解决办法...
  7. python开机自动运行_python 设置开机启动脚本
  8. 经典C语言程序100例之十六
  9. mkdir: cannot create directory ‘/soft/hadoop-2.7.3/logs’: Permission denied问题
  10. 知识即战斗力!数学家华罗庚投入特殊抗战,一夜译破日军密码
  11. java基础排序_Java排序算法-Java入门|Java基础课程
  12. python编程从入门到精通实践_《Python编程:从入门到实践》总结_Day01
  13. 编译安装squid3.1--亲测
  14. TOM企邮、腾讯企邮、网易企邮、263企邮,四大企业邮箱实测:谁是最实用的企业邮箱产品?
  15. 靖哥哥教你一步一步安装redis监控redis-stat-超详细
  16. 如何进行软件系统架构设计?
  17. 360 度反馈过程的目标
  18. HDU-6194 string string string
  19. RTOS内功修炼记(七)—— 内存管理
  20. 用Python分析《权力的游戏》

热门文章

  1. Python Window10 环境安装流程
  2. fatal: empty string is not a valid pathspec, please use . instead if you meant to match all paths
  3. MAC编译的JDK执行出错: [libjvm.dylib+0x482a49] PerfDataManager::destroy()+0xab
  4. 关于https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/的部分内容
  5. maven打包时加入依赖jar包
  6. CMKY与RGB的转换
  7. 微星主板不用DrMOS了?
  8. python中button中command_tkinter模块的button控件不点击也运行command
  9. css横向排列_前端初学者李不白,html+css的角度,带你分析蘑菇街官网!!!
  10. 主键重复和唯一索引冲突_深入了解数据库索引