SQL1
sql查询排名第一的数据的sql写法1
sql查询排名第一的数据的sql写法1 SQL查询排名第一的数据的SQL写法在数据库管理系统中,排名是一个常见的需求,特别是需要从数据集中获取排名第一的记录。
在本文中,我们将介绍一些常见的SQL写法来查询排名第一的数据。
1. 使用TOP关键字在许多数据库管理系统中,如SQL Server、MySQL以及Oracle等,都支持使用TOP关键字来获取查询结果的前几条记录。
我们可以利用这个关键字来查询排名第一的数据。
```sqlSELECT TOP 1 * FROM table_name ORDER BY column_name DESC;```上述SQL查询语句中,我们使用了TOP 1来指定只返回结果的第一条记录。
ORDER BY关键字用于指定排序的列名以及排序的顺序,通过设定DESC来进行降序排列,以保证排名第一的数据被选择。
2. 使用LIMIT关键字在一些数据库管理系统中,如MySQL、PostgreSQL等,可以使用LIMIT关键字来获取查询结果的前几条记录。
类似于TOP关键字,我们可以利用LIMIT关键字来查询排名第一的数据。
```sqlSELECT * FROM table_name ORDER BY column_name DESCLIMIT 1;```在以上的SQL查询语句中,我们使用了LIMIT 1来限制只返回结果的第一条记录。
ORDER BY关键字用于指定排序的列名以及排序的顺序,通过设定DESC来进行降序排列,以确保排名第一的数据被选中。
3. 使用ROW_NUMBER函数在一些数据库管理系统中,如SQL Server、Oracle等,我们可以使用ROW_NUMBER函数来为查询结果中的每一行分配一个序号。
通过结合ROW_NUMBER函数和子查询,我们可以很容易地查询出排名第一的数据。
```sqlSELECT *FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY column_name DESC) AS row_numFROM table_name) AS subWHERE row_num = 1;```在以上的SQL查询语句中,我们首先使用ROW_NUMBER()函数为每一行分配一个序号,然后通过子查询将其作为临时表,最后在外部查询中过滤出序号为1的记录,即排名第一的数据。
sql符合条件的第一条
SQL符合条件的第一条概述本文将介绍使用S QL语言查询符合条件的数据,并获取满足条件的第一条记录的方法。
我们将讨论如何使用S QL语句在数据库中执行该操作,并提供一些示例代码以帮助读者更好地理解。
SQ L语句在S QL中,我们可以使用`SE LE CT`语句查询数据库中的数据,并使用`W HE RE`子句筛选符合条件的记录。
为了获取第一条符合条件的记录,我们可以结合使用`LIM I T`和`OR DE RB Y`关键字。
语法下面是查询符合条件的第一条记录的S QL语句的基本语法:S E LE CT列名FR OM表名WH ER E条件O RD E RB Y列名L IM IT1;其中:-`列名`表示需要查询的列名,可以是一个或多个列名,用逗号分隔。
-`表名`表示需要查询的表名。
-`条件`表示筛选记录的条件,可以是一个简单的条件,也可以是复杂的条件组合。
-`OR DE RB Y列名`表示按照指定的列名对记录进行排序,可以是升序(A SC)或降序(D ES C)。
-`LI MI T1`表示限制查询结果只返回第一条记录。
示例假设我们有一个名为`s tu de nt s`的表,包含以下列:-`id`:学生ID-`na me`:学生姓名-`ag e`:学生年龄-`gr ad e`:学生年级现在,我们想要查询年龄大于18岁的学生列表,并获取其中年龄最小的一名学生的信息。
以下是一个示例的SQ L查询语句:S E LE CT id,n am e,age,gr ad eF R OM st ud en tsW H ER Ea ge>18O R DE RB Ya ge AS CL I MI T1;执行以上SQ L语句后,将返回年龄大于18岁的学生中,年龄最小的一名学生的I D、姓名、年龄和年级信息。
总结使用SQ L语句查询符合条件的第一条记录,可以通过结合使用`W HE RE`子句、`ORD E RB Y`关键字和`LIM I T`限制获取结果的数量来实现。
结构化查询语言—SQL (1)
7
4、 条件查询
在SELECT语句中,查询条件用WHERE子句来描述。主要有以下几种情况: (1)比较大小 用于比较的运算符包括:=,>,<,>=,<=,#,!=或<>。 【例5】 从XSB表中检索出高考分数多于600的学号、姓名和高考分数。 SELECT 学号,姓名,高考分数 FROM xsb WHERE 高考分数>600; (2)确定范围 BETWEEN…AND…和NOT BETWEEN…AND…分别用来描述宇段值在或不在指定 范围的条件。其中,AND的左端给出查询范围的下限,AND的右端给出的是查询范 围的上限。 【例 6】在 XSB表中查询高考分数在 550~600 之间的学生的学号、姓名、专业和高考 分数。 SELECT 学号,姓名,专业, 高考分数 FROM xsb WHERE 高考分数 BETWEEN 550 AND 600;
上一页
下一页
返 回
8
(3)确定集合 这里所说的集合是相同类型的常量所组成的集合。谓词IN用来描述字 段的值属于指定的集合,NOT IN则描述字段值不属于指定的集合。 【例7】从XSB表查询工业工程或市场营销专业的同学的学号,姓名,性别, 专业。 SELECT 学号,姓名,性别,专业 FROM XSB WHERE 专业 IN('工业工程','市场营销'); (4)字符匹配 LIKE 是字符匹配运算符,进行匹配运算时可以使用通配符“%”和 下划线“_”,其中,“%”表示0个或多个任意字符,“_”表示1个任意字 符。例如,第2个字符为B的字符串可以表示为“_B%”。 【例8】从XSB表查询所有姓“王”的同学的全部信息。 SELECT * FROM XSB WHERE 姓名 LIKE '王%';
sql查询排名第一的数据的sql写法1
sql查询排名第一的数据的sql写法1在数据库中,有时候我们需要查询某一列的排名第一的数据,即该列中具有最高或者最小值的记录。
这样的查询可以帮助我们找到最大或最小值,或者筛选出具有特定属性的记录。
下面将介绍几种常见的SQL写法来实现这样的查询。
1. 使用子查询和ORDER BY语句首先,我们可以使用子查询和ORDER BY语句来实现查询排名第一的数据。
假设我们有一个表名为"employees",其中包含员工的工号、姓名和工资信息。
我们想要查询工资最高的员工记录,可以使用如下SQL语句:```sqlSELECT *FROM employeesWHERE salary = (SELECT MAX(salary)FROM employees);```上述SQL语句中,子查询`SELECT MAX(salary) FROM employees`用于找到工资列中的最高值。
然后外层查询使用`WHERE salary = ...`来筛选出工资等于最高值的记录。
2. 使用LIMIT子句另一种常见的方法是使用LIMIT子句来限制结果集的数量。
假设我们仍然有一个"employees"表,我们想要查询工资最高的员工记录,可以使用如下SQL语句:```sqlSELECT *FROM employeesORDER BY salary DESCLIMIT 1;```上述SQL语句中,`ORDER BY salary DESC`用于按工资列降序排列结果集,使最高工资的记录位于第一行。
然后使用`LIMIT 1`来限制结果集只返回一行记录。
3. 使用ROW_NUMBER()函数在某些数据库系统中,如Oracle和SQL Server,还可以使用ROW_NUMBER()函数来为每一行生成一个编号,根据该编号筛选出排名第一的数据。
假设我们有一个"employees"表,我们想要查询工资最高的员工记录,可以使用如下SQL语句:```sqlSELECT *FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_numFROM employees) AS ranked_employeesWHERE row_num = 1;```上述SQL语句中,子查询`SELECT *, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num FROM employees`使用ROW_NUMBER()函数为每一行生成一个编号,根据工资列降序排列。
SQL查询语句(一)——单表查询
SQL查询语句(⼀)——单表查询------------恢复内容开始------------⼀、查询语句语句执⾏顺序FROM ——> SELECTSELECT select_listFROM table_name;查询多列数据SELECTlastname,firstname,jobtitleFROMemployees;⼆、排序数据语句执⾏顺序FROM --> SELECT --> ORDER BYSELECTselect_listFROMtable_nameORDER BYcolumn1 [ASC|DESC],column2 [ASC|DESC],...;如果未明确指定任何排序规则,默认(升序)使⽤ORDER BY ASC升序 ASCORDER BY column1 ASC;降序 DESCORDER BY column1 DESC;多列对结果集进⾏排序ORDER BYcolumn1,column2;第⼀个名字降序排列,然后将客户的姓⽒排序SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;orderNumber,orderlinenumber,quantityOrdered * priceEachFROMorderdetailsORDER BYquantityOrdered * priceEach DESC;按订单状态进⾏排序SELECTorderNumber,statusFROMordersORDER BYFIELD(status,'In Process','On Hold','Cancelled','Resolved','Disputed','Shipped');三、过滤数据WHERE⼦句,为查询返回的⾏指定搜索条件语句执⾏顺序FROM --> WHERE-->SELECT --> ORDER BYSELECTlastname,firstname,jobtitleFROMemployeesWHEREjobtitle = 'Sales Rep';WHERE⼦句与AND运算符查找职务为Sales Rep且办公代码为1的员⼯SELECTlastname,firstname,jobtitle,officeCodeFROMemployeesWHEREjobtitle = 'Sales Rep' ANDofficeCode = 1;WHERE⼦句与OR运算符查找职务为的Sales Rep员⼯或使⽤办公代码1查找办公室的员⼯SELECTlastName,firstName,jobTitle,officeCodeFROMemployeesWHEREjobtitle = 'Sales Rep' ORofficeCode = 1ORDER BYofficeCode ,jobTitle;WHERE⼦句与BETWEEN运算符查找办公室代码为1到3的办公室中的员⼯SELECTFROMemployeesWHEREofficeCode BETWEEN 1 AND 3ORDER BY officeCode;WHERE和LIKE运算符查询查找姓⽒以字符串结尾的员⼯'son'SELECTfirstName,lastNameFROMemployeesWHERElastName LIKE '%son'ORDER BY firstName;WHERE和IN操作符查找位于办公室的办公室代码为1的员⼯SELECTfirstName,lastName,officeCodeFROMemployeesWHEREofficeCode IN (1 , 2, 3)ORDER BYofficeCode;WHERE和 IS NULL 操作符在数据库世界中,NULL是⼀个标记,指⽰⼀条信息丢失或未知。
sql语句查询结果1结果2重命名
sql语句查询结果1结果2重命名
在 SQL 语句中,可以使用 `AS` 关键字为查询结果中的列或表达式指定别名,以重命名它们。
以下是一个示例 SQL 查询,将结果中的列重命名:
```sql
SELECT member_id AS "会员 ID", member_name AS "会员姓名"
FROM members;
```
在上述示例中,使用 `AS` 关键字将 `member_id` 列重命名为 `会员 ID`,将`member_name` 列重命名为 `会员姓名`。
如果你想为结果中的多个列重命名,可以用逗号分隔它们,并在每个列后使用 `AS` 关键字指定别名。
以下是一个示例 SQL 查询,为多个列重命名:
```sql
SELECT member_id AS "会员 ID", member_name AS "会员姓名", age AS "年龄"
FROM members;
```
通过使用别名,你可以更方便地理解和引用查询结果中的列,特别是当列名不够清晰或需要在报表或数据分析中使用更易读的名称时。
请注意,具体的语法和支持可能因所使用的数据库管理系统而有所不同。
上述示例是通用的 SQL 语法,但某些数据库可能使用不同的关键字或语法规则来实现相同的功能。
因此,请根据你使用的具体数据库系统的文档进行适当的调整。
SQL语法大全-1
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
14、说明:前10条记录
select top 10 * form table1 where 范围
--5、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
sql一级二级三级标准
sql一级二级三级标准
SQL标准分为三个主要部分:一级、二级和三级范式。
1. 一级范式(1NF):这是最基础的范式,要求表中的每个列都是不可分割的最小单元,并且每个表都必须有一个唯一的主键。
2. 二级范式(2NF):在满足一级范式的基础上,要求表中的每个非主键列完全依赖于主键。
换句话说,一个表应该具有一个唯一的主键,并且所有其他列都直接依赖于主键。
例如,一个订单表有订单号、产品ID、数量和价
格等列,其中价格是根据产品ID从另一个表中获取的。
在这种情况下,价
格列不直接依赖于主键订单号,而是依赖于非主键列产品ID,违反了二级
范式。
要满足二级范式,可以将价格这一非主键列分离出来,创建一个产品表,其中包含产品ID和价格,然后通过产品ID将两个表关联起来。
3. 三级范式(3NF):在满足二级范式的基础上,要求消除表中的传递依赖。
换句话说,这意味着任何非主键列都不能依赖于其他非主键列。
以上内容仅供参考,可以查阅SQL相关的书籍或咨询专业的技术人员,获
取更全面准确的信息。
sql 0和1 字段类型
sql 0和1 字段类型在SQL中,字段类型通常由数据的大小和格式决定。
例如,整数类型通常包括 `TINYINT`, `SMALLINT`, `MEDIUMINT`, `INT` 和 `BIGINT`。
这些类型用于存储整数,其中 `TINYINT` 只能存储从 0 到 255 的值,而 `BIGINT` 可以存储非常大的整数。
如果你想存储0和1这两个值,你可以选择以下几种方法:1. 使用 TINYINT:`TINYINT` 是一个非常小的整数,可以存储从0到255的值。
所以,你可以将0和1存储为`TINYINT`类型。
2. 使用 BOOLEAN 类型 (如果数据库支持):一些数据库系统(如 MySQL)支持 `BOOLEAN` 类型,它实际上是一个 `TINYINT(1)`。
这意味着它可以存储0或1。
3. 使用 CHAR(1) 或 VARCHAR(1):你可以使用字符类型来存储单个字符'0'或'1'。
但是这种方法可能不太直观,因为'0'和'1'在字符上看起来一样,除非你使用单引号来区分它们。
例如,在MySQL中,你可能会这样定义一个表:```sqlCREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,flag TINYINT(1) NOT NULL, -- 使用 TINYINT 存储 0 和 1-- 或者-- flag BOOLEAN NOT NULL -- 使用 BOOLEAN 类型 (实际上是TINYINT(1)));```在选择字段类型时,请考虑你的具体需求、数据库的性能和可读性。
如果你经常需要查询基于这些值的条件,那么使用整数类型(如 `TINYINT` 或`BOOLEAN`)可能会更高效。
如果你需要存储更多的信息或文本,那么字符类型可能更适合。
sql查询实例1(学生表_课程表_成绩表_教师表)
sql查询实例1(学⽣表_课程表_成绩表_教师表)表架构Student(S#,Sname,Sage,Ssex) 学⽣表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表建表语句1CREATE TABLE student2 (3 s# INT,4 sname nvarchar(32),5 sage INT,6 ssex nvarchar(8)7 )89CREATE TABLE course10 (11 c# INT,12 cname nvarchar(32),13 t# INT14 )1516CREATE TABLE sc17 (18 s# INT,19 c# INT,20 score INT21 )2223CREATE TABLE teacher24 (25 t# INT,26 tname nvarchar(16)27 )插⼊测试数据语句1insert into Student select 1,N'刘⼀',18,N'男' union all2 select 2,N'钱⼆',19,N'⼥' union all3 select 3,N'张三',17,N'男' union all4 select 4,N'李四',18,N'⼥' union all5 select 5,N'王五',17,N'男' union all6 select 6,N'赵六',19,N'⼥'78 insert into Teacher select 1,N'叶平' union all9 select 2,N'贺⾼' union all10 select 3,N'杨艳' union all11 select 4,N'周磊'1213 insert into Course select 1,N'语⽂',1 union all14 select 2,N'数学',2 union all15 select 3,N'英语',3 union all16 select 4,N'物理',41718 insert into SC19 select 1,1,56 union all20 select 1,2,78 union all21 select 1,3,67 union all22 select 1,4,58 union all23 select 2,1,79 union all24 select 2,2,81 union all25 select 2,3,92 union all26 select 2,4,68 union all27 select 3,1,91 union all28 select 3,2,47 union all29 select 3,3,88 union all30 select 3,4,56 union all31 select 4,2,88 union all32 select 4,3,90 union all33 select 4,4,93 union all34 select 5,1,46 union all35 select 5,3,78 union all36 select 5,4,53 union all37 select 6,1,35 union all38 select 6,2,68 union all39 select 6,4,71问题1问题:21、查询“001”课程⽐“002”课程成绩⾼的所有学⽣的学号;3 select a.S# from (select s#,score from SC where C#='001') a,(select s#,score4 from SC where C#='002') b5 where a.score>b.score and a.s#=b.s#;62、查询平均成绩⼤于60分的同学的学号和平均成绩;7 select S#,avg(score)8 from sc9 group by S# having avg(score) >60;103、查询所有同学的学号、姓名、选课数、总成绩;11 select Student.S#,Student.Sname,count(SC.C#),sum(score)12 from Student left Outer join SC on Student.S#=SC.S#13 group by Student.S#,Sname144、查询姓“李”的⽼师的个数;15 select count(distinct(Tname))16 from Teacher17 where Tname like '李%';185、查询没学过“叶平”⽼师课的同学的学号、姓名;19 select Student.S#,Student.Sname20 from Student21 where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平'21 where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' 226、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;23 select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S# 247、查询学过“叶平”⽼师所教的所有课的同学的学号、姓名;25 select S#,Sname26 from Student27 where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S#288、查询课程编号“002”的成绩⽐课程编号“001”课程低的所有同学的学号、姓名;29 Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score230 from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;319、查询所有课程成绩⼩于60分的同学的学号、姓名;32 select S#,Sname33 from Student34 where S# not in (select S.S# from Student AS S,SC where S.S#=SC.S# and score>60);3510、查询没有学全所有课的同学的学号、姓名;36 select Student.S#,Student.Sname37 from Student,SC38 where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);3911、查询⾄少有⼀门课与学号为“1001”的同学所学相同的同学的学号和姓名;40 select distinct S#,Sname from Student,SC where Student.S#=SC.S# and SC.C# in (select C# from SC where S#='1001');4112、查询⾄少学过学号为“001”同学所有⼀门课的其他同学学号和姓名;42 select distinct SC.S#,Sname43 from Student,SC44 where Student.S#=SC.S# and C# in (select C# from SC where S#='001');4513、把“SC”表中“叶平”⽼师教的课的成绩都更改为此课程的平均成绩;46 update SC set score=(select avg(SC_2.score)47 from SC SC_248 where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');4914、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;50 select S# from SC where C# in (select C# from SC where S#='1002')51 group by S# having count(*)=(select count(*) from SC where S#='1002');5215、删除学习“叶平”⽼师课的SC表记录;53 Delect SC54 from course ,Teacher55 where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';5616、向SC表中插⼊⼀些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、57号课的平均成绩;58 Insert SC select S#,'002',(Select avg(score)59 from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');6017、按平均成绩从⾼到低显⽰所有学⽣的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显⽰:学⽣ID,,数据库,企业管理,英语,有效课程数,有效平均61 SELECT S# as 学⽣ID62 ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库63 ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理64 ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语65 ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩66 FROM SC AS t67 GROUP BY S#68 ORDER BY avg(t.score)6918、查询各科成绩最⾼和最低的分:以如下形式显⽰:课程ID,最⾼分,最低分70 SELECT L.C# As 课程ID,L.score AS 最⾼分,R.score AS 最低分71 FROM SC L ,SC AS R72 WHERE L.C# = R.C# and73 L.score = (SELECT MAX(IL.score)74 FROM SC AS IL,Student AS IM75 WHERE L.C# = IL.C# and IM.S#=IL.S#76 GROUP BY IL.C#)77 AND78 R.Score = (SELECT MIN(IR.score)79 FROM SC AS IR80 WHERE R.C# = IR.C#81 GROUP BY IR.C#82 );83⾃⼰写的:select c# ,max(score)as 最⾼分 ,min(score) as 最低分 from dbo.sc group by c#8419、按各科平均成绩从低到⾼和及格率的百分数从⾼到低顺序85 SELECT t.C# AS 课程号,max(ame)AS 课程名,isnull(AVG(score),0) AS 平均成绩86 ,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数86 ,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数87 FROM SC T,Course88 where t.C#=course.C#89 GROUP BY t.C#90 ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC9120、查询如下课程平均成绩和及格率的百分数(⽤"1⾏"显⽰): 企业管理(001),马克思(002),OO&UML (003),数据库(004)92 SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分93 ,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分94 ,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分95 ,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数96 ,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分97 ,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数98 ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分99 ,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数100 FROM SC10121、查询不同⽼师所教不同课程平均分从⾼到低显⽰102 SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩103 FROM SC AS T,Course AS C ,Teacher AS Z104 where T.C#=C.C# and C.T#=Z.T#105 GROUP BY C.C#106 ORDER BY AVG(Score) DESC10722、查询如下课程成绩第 3 名到第 6 名的学⽣成绩单:企业管理(001),马克思(002),UML (003),数据库(004)108 [学⽣ID],[学⽣姓名],企业管理,马克思,UML,数据库,平均成绩109 SELECT DISTINCT top 3110 SC.S# As 学⽣学号,111 Student.Sname AS 学⽣姓名 ,112 T1.score AS 企业管理,113 T2.score AS 马克思,114 T3.score AS UML,115 T4.score AS 数据库,116 ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分117 FROM Student,SC LEFT JOIN SC AS T1118 ON SC.S# = T1.S# AND T1.C# = '001'119 LEFT JOIN SC AS T2120 ON SC.S# = T2.S# AND T2.C# = '002'121 LEFT JOIN SC AS T3122 ON SC.S# = T3.S# AND T3.C# = '003'123 LEFT JOIN SC AS T4124 ON SC.S# = T4.S# AND T4.C# = '004'125 WHERE student.S#=SC.S# and126 ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)127 NOT IN128 (SELECT129 DISTINCT130 TOP 15 WITH TIES131 ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)132 FROM sc133 LEFT JOIN sc AS T1134 ON sc.S# = T1.S# AND T1.C# = 'k1'135 LEFT JOIN sc AS T2136 ON sc.S# = T2.S# AND T2.C# = 'k2'137 LEFT JOIN sc AS T3138 ON sc.S# = T3.S# AND T3.C# = 'k3'139 LEFT JOIN sc AS T4140 ON sc.S# = T4.S# AND T4.C# = 'k4'141 ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);14214323、统计列印各科成绩,各分数段⼈数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]144 SELECT SC.C# as 课程ID, Cname as 课程名称145 ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]146 ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]147 ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]148 ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]149 FROM SC,Course150 where SC.C#=Course.C#151 GROUP BY SC.C#,Cname;151 GROUP BY SC.C#,Cname;15215324、查询学⽣平均成绩及其名次154 SELECT 1+(SELECT COUNT( distinct 平均成绩)155 FROM (SELECT S#,AVG(score) AS 平均成绩156 FROM SC157 GROUP BY S#158 ) AS T1159 WHERE 平均成绩 > T2.平均成绩) as 名次,160 S# as 学⽣学号,平均成绩161 FROM (SELECT S#,AVG(score) 平均成绩162 FROM SC163 GROUP BY S#164 ) AS T2165 ORDER BY 平均成绩 desc;16616725、查询各科成绩前三名的记录:(不考虑成绩并列情况)168 SELECT t1.S# as 学⽣ID,t1.C# as 课程ID,Score as 分数169 FROM SC t1170 WHERE score IN (SELECT TOP 3 score171 FROM SC172 WHERE t1.C#= C#173 ORDER BY score DESC174 )175 ORDER BY t1.C#;17626、查询每门课程被选修的学⽣数177 select c#,count(S#) from sc group by C#;17827、查询出只选修了⼀门课程的全部学⽣的学号和姓名179 select SC.S#,Student.Sname,count(C#) AS 选课数180 from SC ,Student181 where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;18228、查询男⽣、⼥⽣⼈数183 Select count(Ssex) as 男⽣⼈数 from Student group by Ssex having Ssex='男';184 Select count(Ssex) as ⼥⽣⼈数 from Student group by Ssex having Ssex='⼥';18529、查询姓“张”的学⽣名单186 SELECT Sname FROM Student WHERE Sname like '张%';18730、查询同名同性学⽣名单,并统计同名⼈数188 select Sname,count(*) from Student group by Sname having count(*)>1;;18931、1981年出⽣的学⽣名单(注:Student表中Sage列的类型是datetime)190 select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age191 from student192 where CONVERT(char(11),DATEPART(year,Sage))='1981';19332、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列194 Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;19533、查询平均成绩⼤于85的所有学⽣的学号、姓名和平均成绩196 select Sname,SC.S# ,avg(score)197 from Student,SC198 where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;19934、查询课程名称为“数据库”,且分数低于60的学⽣姓名和分数200 Select Sname,isnull(score,0)201 from Student,SC,Course202 where SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <60; 20335、查询所有学⽣的选课情况;204 SELECT SC.S#,SC.C#,Sname,Cname205 FROM SC,Student,Course206 where SC.S#=Student.S# and SC.C#=Course.C# ;20736、查询任何⼀门课程成绩在70分以上的姓名、课程名称和分数;208 SELECT distinct student.S#,student.Sname,SC.C#,SC.score209 FROM student,Sc210 WHERE SC.score>=70 AND SC.S#=student.S#;21137、查询不及格的课程,并按课程号从⼤到⼩排列212 select c# from sc where scor e <60 order by C# ;21338、查询课程编号为003且课程成绩在80分以上的学⽣的学号和姓名;214 select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003'; 21539、求选了课程的学⽣⼈数216 select count(*) from sc;21740、查询选修“叶平”⽼师所授课程的学⽣中,成绩最⾼的学⽣姓名及其成绩218 select Student.Sname,score219 from Student,SC,Course C,Teacher220 where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C# 22141、查询各个课程及相应的选修⼈数222 select count(*) from sc group by C#;22342、查询不同课程成绩相同的学⽣的学号、课程号、学⽣成绩224 select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;22543、查询每门功成绩最好的前两名226 SELECT t1.S# as 学⽣ID,t1.C# as 课程ID,Score as 分数227 FROM SC t1228 WHERE score IN (SELECT TOP 2 score229 FROM SC230 WHERE t1.C#= C#231 ORDER BY score DESC232 )233 ORDER BY t1.C#;23444、统计每门课程的学⽣选修⼈数(超过10⼈的课程才统计)。
SQL练习1(无答案)
1.查询“CS”系所有学生的学号和姓名。
2.查询所有姓“刘”的学生的信息。
3.查询年龄在18至20岁之间的学生信息。
4.查询不在“CS”系也不在“MA”系的学生的所有信息。
5.查询“CS”系所有学生的平均年龄。
6.查询课程名是以“系统”结尾的课程信息。
7.查询先行课为“6”号课程的课程信息。
8.查询间接先行课为“5”号课程的课程号及课程名。
9.查询没有先行课的课程名。
10.查询选修了“1”号课程的学生选课信息。
11.查询成绩为90分以上的学生姓名和课程名。
12.查询被选修了的课程号及课程名。
13.查询没有选修课程的学生学号及姓名。
14.查询没有选修“1”号课程的学生姓名。
数据库系统概论:第4章 关系数据库标准语言——SQL语言1
4)删除完整性约束
例:删除“Height”属性列上的CHECK约束。 ALTER TABLE Student DROP
CONSTRAINT Chk1;
27
5)删除属性列
例:删除Student表中新增加的“Height”属性列。 ALTER TABLE Student DROP COLUMN Height;
2
2、SQL语言应用情况
(1) Oracle、Sybase、Informix、Ingres、 DB2、SQL Server、Rdb等大型数据库管理系统 实现了SQL语言; (2) Dbase、Foxpro、Acess等PC机数据库管理 系统部分实现了SQL语言; (3)可以在HTML(Hypertext Markup Language, 超文本标记语言)中嵌入SQL语句,通过WWW访 问数据库; (4)在VC、VB、Delphi、PB也可嵌入SQL语句。
/*外键约束*/ Credit NUMBER);
21
例3:建立一个学生选课表SC,所有约束条件均为表
级完整性约束。
CREATE TABLE SC
( Sno CHAR(8),
Cno CHAR(8),
Grade NUMBER,
PRIMARY KEY(Sno,Cno),
/*主键约束*/
FOREIGN KEY(Sno) REFERENCES Student(Sno)
25
3)增加完整性约束
例:给Student表中“Height”属性列增加一 个CHECK约束,要求学生的身高要超过140厘 米才行。 ALTER TABLE Student ADD CONSTRAINT Chk1 CHECK(Height>140);
sql中1=1和1=0的用处
sql中1=1和1=0的⽤处where 1=1where 1=1有什么⽤?在SQL语⾔中,写这么⼀句话就跟没写⼀样。
select * from table1 where 1=1与select * from table1完全没有区别,甚⾄还有其他许多写法,1<>2,'a'='a','a'<>'b',其⽬的就只有⼀个,where的条件为永真,得到的结果就是未加约束条件的。
在SQL注⼊时会⽤到这个,例如select * from table1 where name='lala'给强⾏加上select * from table1 where name='lala' or 1=1这就⼜变成了⽆约束的查询了。
最近发现的妙⽤在于,在不定数量查询条件情况下,1=1可以很⽅便的规范语句。
例如⼀个查询可能有name,age,height,weight约束,也可能没有,那该如何处理呢?String sql=select * from table1 where 1=1为什么要写多余的1=1?马上就知道了。
if(!name.equals("")){sql=sql+"name='"+name+"'";}if(!age.equals("")){sql=sql+"age'"+age+"'";}if(!height.equals("")){sql=sql+"height='"+height+"'";}if(!weight.equals("")){sql=sql+"weight='"+weight+"'";}如果不写1=1呢,那么在每⼀个不为空的查询条件⾯前,都必须判断有没有where字句,否则要在第⼀个出现的地⽅加wherewhere 1=0"SELECT * FROM strName WHERE 1 = 0";不理解为什么有1=0?查询得出答案:该select语句主要⽤于读取表的结构⽽不考虑表中的数据,这样节省了内存,因为可以不⽤保存结果集。
sql查询排名第一的数据的sql写法
sql查询排名第一的数据的sql写法在数据库中,我们经常需要查询某个表中排名第一的数据。
这种需求在实际开发中非常常见,比如查询某个班级中成绩最高的学生、查询某个城市中人口最多的区域等等。
本文将介绍一种常用的SQL写法来实现这个功能。
假设我们有一个学生表(students),其中包含学生的姓名(name)和成绩(score)两个字段。
我们需要查询成绩最高的学生的信息。
下面是一种常用的SQL写法:```SELECT name, scoreFROM studentsWHERE score = (SELECT MAX(score) FROM students);```上述SQL语句的含义是,首先通过子查询找到成绩最高的分数(MAX(score)),然后在主查询中使用WHERE子句筛选出成绩等于最高分数的学生信息。
这种写法的优点是简洁明了,容易理解。
但是需要注意的是,如果有多个学生的成绩相同且都是最高分数,那么上述SQL语句只会返回其中一个学生的信息。
如果需要返回所有成绩最高的学生信息,可以使用以下SQL写法:```SELECT name, scoreFROM studentsWHERE score = (SELECT MAX(score) FROM students)ORDER BY name;```上述SQL语句在主查询的基础上增加了ORDER BY子句,按照姓名对结果进行排序。
这样可以确保返回所有成绩最高的学生信息。
除了使用子查询,我们还可以使用窗口函数来实现查询排名第一的数据。
窗口函数是一种强大的SQL功能,可以在查询结果中进行分组、排序和聚合操作。
下面是使用窗口函数的SQL写法:```SELECT name, scoreFROM (SELECT name, score, ROW_NUMBER() OVER (ORDER BY score DESC) AS rankFROM students) AS subqueryWHERE rank = 1;```上述SQL语句的含义是,首先在子查询中使用窗口函数ROW_NUMBER()对学生信息按照成绩降序进行排序,并为每条记录分配一个排名(rank)值。
sql符合条件的第一条
sql符合条件的第一条在SQL中,要找到符合条件的第一条记录,我们可以使用LIMIT 子句和ORDER BY子句来实现。
LIMIT子句用于限制返回的行数,而ORDER BY子句用于指定查询结果的排序方式。
假设我们有一个名为"employees"的表,其中包含了员工的姓名、年龄、性别和职位等信息。
现在我们要找到年龄大于30岁且职位为经理的第一位员工。
我们可以使用以下SQL语句来实现:```sqlSELECT *FROM employeesWHERE age > 30 AND position = '经理'ORDER BY idLIMIT 1;```以上SQL语句的含义是:从"employees"表中选择所有满足条件年龄大于30岁且职位为经理的记录,按照id字段升序排序,返回第一条记录。
在这个例子中,我们使用了`WHERE`子句来筛选满足条件的记录,具体条件为`age > 30 AND position = '经理'`。
`AND`关键字用来连接多个条件,表示所有条件都必须满足。
当然,你也可以根据实际需求使用其他的条件运算符,比如`OR`、`LIKE`等等。
接下来,我们使用`ORDER BY`子句将结果按照id字段进行升序排序。
`ORDER BY`后面跟着要排序的字段名,如果希望按照多个字段进行排序,可以使用逗号将字段名分隔开。
最后,我们使用`LIMIT`子句来限制返回的记录数为1,即只返回满足条件的第一条记录。
请注意,数据库中的数据是以逻辑形式存储的,并没有特定的物理顺序。
因此,如果没有指定`ORDER BY`子句,查询结果的顺序是不确定的。
所以,在使用LIMIT子句之前,最好先定义一个明确的排序规则。
除了以上示例中使用的方法,还可以使用其他方式来找到符合条件的第一条记录。
比如,可以使用子查询、窗口函数等等灵活的查询方式。
sql作业1
where sno='s2'
11.
insert
into table4(sno,pno,jno,qty)
values('s2','j6','p4','200')
12.
select sno
from table4
group by sno
having sum(qty)>700
13.
select sno
from table1,table4,table3
where table1.city='天津' and table1.sno=table4.sno
7.
select jno
from table1,table4
where table1.sno=table4.sno and city not in ('天津')
having sum(qty)>700
)
工程项目表供应情况表j4j5天津s4北京东方红s3北京s2天津s1citysnamesno30齿轮p640凸轮p514螺丝刀p414螺丝刀p317螺栓p212螺母p1weightcolorpnamepno唐山机车厂天津造船厂j3天津弹簧厂j2长春一汽j1cityjnamejno200j4p6s4300j3p6s4100j1p5s4100j2p5s2400j1p5s2400j5p3s2500j4p3s2200j2p3s2400j1p3s2100j2p2s1700j4p1s1100j3p1s1200j1p1s1qtyjnopnosno颜色只能红绿蓝工程项目名唯一1找出所有供应商的姓名和所在城市2找出所有零件的名称颜色重量3找出使用供应商s1所供应零件的工程号码4找出工程项目j2使用的各种零件的名称及其数量5找出天津厂商供应的所有零件号码6找出使用天津产的零件的工程名称7找出没有使用天津产的零件的工程号码8把全部红色零件的颜色改成蓝色9由s5供给j4的零件p6改为由s3供应请作必要的修改10从供应商关系中删除s2的记录并从供应关系情况中删除相应的记录11请将s2j6p4200插入供应关系12求零件供应量大于700的供应商编号13找出零件供应量比s1大的供应商编号14求零件供应量大于700的供应商编号和供应商的姓名上海纺机厂selectsnamecityfromtable1selectpnamecolorweightfromtable2selectjnofromtable4wheresno?s1?selectpnameqtyfromtable2table4wherejno?j2?andtable2pnotable4pnoselectpnofromtable1table4wherecity?天津?selectdistinctjnamefromtable1table4table3wheretable1city?天津?selectjnofromtable1table4wheretable1snotable4snoupdatetable2setcolor?蓝?wherecolor?红?updatetable4setsno?s3?wheresno?s5?pno?p6?10
1条sql执行的完整过程
1条sql执行的完整过程当一条SQL语句被提交给数据库执行时,它需要经过多个步骤才能完成。
以下是SQL语句执行的完整过程:1. **解析(Parsing)**:* 查询首先被解析器解析。
解析器检查SQL语句的语法和结构,并创建一个解析树。
* 语法错误在这个阶段会被检测出来。
2. **预处理(Preprocessing)**:* 在预处理器中,解析器检查是否有任何语法错误,并确保所有的对象(如表和视图)都存在并且可以访问。
* 预处理器还会处理一些简单的查询重写,例如处理别名和子查询。
3. **优化(Optimization)**:* 在这个阶段,查询优化器会生成多个可能的执行计划,并选择一个最优的计划来执行查询。
* 优化器会考虑多种因素,如表的大小、索引的存在与否、数据的分布等,来决定最佳的执行策略。
4. **生成执行计划(Plan Generation)**:* 一旦选择了最优的执行计划,就会生成一个或多个执行计划。
这些计划描述了数据库如何实际执行查询。
5. **执行(Execution)**:* 在这个阶段,数据库引擎根据执行计划执行查询。
这可能涉及到读取数据、连接表、过滤记录等操作。
6. **返回结果(Result Returning)**:* 最后,查询的结果被返回给客户端。
这可能是一个表、一行数据、一个状态码等,具体取决于查询的类型和需求。
7. **后处理(Postprocessing)**:* 在某些情况下,可能还需要进行一些后处理步骤,例如处理事务或清理资源。
注意:不同的数据库系统可能会有不同的执行步骤或略有不同的执行顺序。
上述过程是一个通用的概述。
SQL习题1
选用数据库:MySQL一、导入数据●下载题目所需文件SQL1、SQL2sql1.sql●打开Navicat,连接数据库,把文件拖入表二、题目1.查询各个年龄段的人数,结果输出年龄段及对应的人数,按年龄段升序排序答案:#SQL语句如下:select 年龄段,count(*) 人数from (select 年龄,casewhen 年龄<=24 then '24岁及以下'when 年龄between 25 and 29 then '25-29岁'when 年龄between 30 and 34 then '30-34岁'when 年龄between 35 and 39 then '35-39岁'when 年龄between 40 and 44 then '40-44岁'when 年龄between 45 and 49 then '45-49岁'when 年龄between 50 and 54 then '50-54岁'when 年龄>=55 then '55岁及以上'end as 年龄段from SQL1) tgroup by 年龄段order by 年龄段asc而年龄段在表格中已有划分结果,所以SQL语句可以简化为:select 年龄段,count(*) 人数from SQL1where 年龄段in ('24岁及以下','25-29岁','30-34岁','35-39岁','40-44岁','45-49岁','50-54岁','55岁及以上' )group by 年龄段order by 年龄段asc#查询结果:2.查询每个工龄区间的人数,结果输出工龄区间及对应的人数,按人数降序排序三年以下(工龄<3)三年~七年(3<=工龄<7)七年~十年(7<=工龄<10)十年~十五年(10<=工龄<15)十五年及以上(15<=工龄)答案:#SQL语句如下:select 工龄段,count(*) 人数from (select 工龄,casewhen 工龄< 3 then '三年以下'when 工龄between 3 and 6 then '三年~七年'when 工龄between 7 and 9 then '七年~十年'when 工龄between 10 and 14 then '十年~十五年'when 工龄>= 15 then '十五年及以上'end as 工龄段from SQL1) tgroup by 工龄段order by 人数desc#查询结果:3.查询姓名重复三次的人员ID,结果以人员ID降序排序答案:#SQL语句如下:可以先查询三次重复的姓名:select 人员姓名from SQL1group by 人员姓名having count(*)=3再嵌入查询:select a.人员姓名,b.IDfrom SQl1 b,(select 人员姓名from SQL1group by 人员姓名having count(*)=3) awhere a.人员姓名= b.人员姓名order by b.ID desc#查询结果:4.查询每个公司岗位类别为‘一般管理’的人员中,各个学历的占比,结果输出,公司、学历、占比答案:首先筛选出每个公司岗位类别为一般管理的人员学历:select 公司简称as 公司,学历from SQL1where 岗位类别= '一般管理'order by 公司,学历接着算占比,占比需要先求出每种学历在每个公司中的具体数量select a.公司,a.学历,count(*) 人数from(select 公司简称as 公司,学历from SQL1where 岗位类别= '一般管理'order by 公司,学历) awhere a.学历in ('专科','本科','研究生','高中' )group by a.公司,a.学历占比数据需要从上面查询出的表格获取,最后需要的字段为公司、学历、占比,所以SQL语句为:select b.公司,b.学历,b.人数/sum(b.人数) over(partition by b.公司) 占比from b#SQL语句如下:select b.公司,b.学历,b.人数/sum(b.人数) over(partition by b.公司) 占比from(select a.公司,a.学历,count(*) 人数from(select 公司简称as 公司,学历from SQL1where 岗位类别= '一般管理'order by 公司,学历) awhere a.学历in ('专科','本科','研究生','高中' )group by a.公司,a.学历) b#查询结果:5.查询去掉最大年龄,最小年龄后人员的平均年龄(要求使用NOT EXISTS) 答案:#SQL语句如下:select avg(a.年龄) as 平均年龄from SQL1 awhere not EXISTS(select 1 from( select max(年龄) as 年龄from SQL1union allselect min(年龄) as 年龄from SQL1) bwhere a.年龄= b.年龄)#查询结果:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL练习题一
表student,字段名name,number,sex,SQL2000,flash,net,其中SQL2000,flash,net为浮点型float
完成如下查询:
输出所有男生的成绩
输出所有SQL2000成绩在90以上的女生的成绩
输出某一科目不合格所有的男生的成绩
计算并显示每位同学各科的总分和平均分,并按总分从高
到低排序
输出所有计算机网络成绩在70-79之间的同学
输出所有姓“陈”和姓“李”的男生
输出所有学号为偶数的同学成绩
输出Flash成绩最好的5位同学
查询平均分最低的3位同学。
统计成绩表中平均分为90以上(含90分)人数
SQL练习题二
表student,course,score,teacher如下:
STUDENT(SNO, SNAME, SSEX, SBIRTHDAY, CLASS) COURSE(CNO, CNAME, TNO)
SCORE(SNO, CNO, DEGREE)
TEACHER(TNO, TNAME, TSEX, TBIRTHDAY, PROF, DEPART)
1、查询Student表中的所有记录的Sname、Ssex和Class 列。
2、查询教师所有的单位即不重复的Depart列。
3、查询Student表的所有记录。
4、查询Score表中成绩在60到80之间的所有记录。
5、查询Score表中成绩为85,86或88的记录。
6、查询Student表中“95031”班或性别为“女”的同学记录。
7、以Class降序查询Student表的所有记录。
8、以Cno升序、Degree降序查询Score表的所有记录。
9、查询“95031”班的学生人数。
10、查询Score表中的最高分的学生学号和课程号。
11、查询’3-105’号课程的平均分。
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
13、查询最低分大于70,最高分小于90的Sno列。
14、查询所有学生的Sname、Cno和Degree列。
15、查询所有学生的Sno、Cname和Degree列。
16、查询所有学生的Sname、Cname和Degree列。
17、查询“95033”班所选课程的平均分。
18、假设使用如下命令建立了一个grade表:
create table grade
(low number(3,0),upp number(3),rank
char(1));
insert into grade values(90,100,’A’);
insert into grade values(80,89,’B’);
insert into grade values(70,79,’C’);
insert into grade values(60,69,’D’);
insert into grade values(0,59,’E’);
现查询所有同学的Sno、Cno和rank列。
19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
23、查询“张旭“教师任课的学生成绩。
24、查询选修某课程的同学人数多于5人的教师姓名。
25、查询95033班和95031班全体学生的记录。
26、查询存在有85分以上成绩的课程Cno.
27、查询出“计算机系“教师所教课程的成绩表。
28、查询“计算机系”与“电子工程系“不同职称的教师的Tname 和Prof。
29、查询选修编号为“3-105“课程且成绩至少高于选修编号
为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低
次序排序。
30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
31、查询所有教师和同学的name、sex和birthday.
32、查询所有“女”教师和“女”同学的name、sex和birthday.
33、查询成绩比该课程平均成绩低的同学的成绩表。
34、查询所有任课教师的Tname和Depart.
35 查询所有未讲课的教师的Tname和Depart.
36、查询至少有2名男生的班号。
37、查询Student表中不姓“王”的同学记录。
38、查询Student表中每个学生的姓名和年龄。
39、查询Student表中最大和最小的Sbirthday日期值。
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
41、查询“男”教师及其所上的课程。
42、查询最高分同学的Sno、Cno和Degree列。
43、查询和“李军”同性别的所有同学的Sname.
44、查询和“李军”同性别并同班的同学Sname.
45、查询所有选修“计算机导论”课程的“男”同学的成绩表
SQL练习题三
1 问题描述:
为管理岗位业务培训信息,建立3个表:
S (SNO,SN,SD,SA) SNO,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (CNO,CN ) CNO,CN 分别代表课程编号、课程名称SC (SNO,CNO,G ) SNO,CNO,G 分别代表学号、所选修的课程编号、学习成绩
1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名
2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位
3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位
4. 查询选修了课程的学员人数
5. 查询选修课程超过5门的学员学号和所属单位
2 问题描述:
已知关系模式:
S (SNO,SNAME)学生关系。
SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。
CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。
SCGRADE 为成绩
1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
题目3
问题描述:
本题用到下面三个关系表:
CARD 借书卡。
CNO 卡号,NAME 姓名,CLASS 班级BOOKS 图书。
BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,UANTITY 库存册数
BORROW 借书记录。
CNO 借书卡号,BNO 书号,RDATE 还书日期
备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。
要求实现如下14个处理:
1.找出借书超过5本的读者,输出借书卡号及所借图书册数。
2.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。
3.查询借阅了"水浒"一书的读者,输出姓名及班级。
4.查询过期未还图书,输出借阅者(卡号)、书号及还书日期。
5.查询书名包括"网络"关键词的图书,输出书号、书名、作者。
6.查询现有图书中价格最高的图书,输出书名及作者。
7.查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。