学生表 课程表 成绩表 教师表常用SQL语句

学生表 课程表 成绩表 教师表 50个常用sql语句

建表

Student(S#,Sname,Sage,Ssex) 学生表

Course(C#,Cname,T#) 课程表

SC(S#,C#,score) 成绩表

Teacher(T#,Tname) 教师表

---- If database exists the same name datatable deletes it.
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ‘Student‘) DROP TABLE Student;

---- Create TABLE
create table Student(S# varchar(20),Sname varchar(10),Sage int,Ssex varchar(2))

关于表的50问

  1. 查询”001”课程比”002”课程成绩高的所有同学的学号:

    SELECT a.S#
    FROM (
    SELECT s#, score
    FROM SC
    WHERE C# = ‘001‘
    ) a, (
      SELECT s#, score
      FROM SC
      WHERE C# = ‘002‘
      ) b
    WHERE a.score > b.score AND a.s# = b.s#;
  2. 查询平均成绩大于60分的同学的学号和平均成绩:
    SELECT S#, avg(score)
    FROM sc
    GROUP BY S#
    HAVING avg(score) > 60;

    通过GROUP BY子句,可以让SUM、COUNT、MAX、AVG等聚合函数对属于一组的是数据起作用.属于同一同学的成绩将只能返回一行值,其中除S#字段,其他字段通过聚合函数返回.

    HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.而 HAVING子句在聚合后对组记录进行筛选。

  3. 查询”李”姓老师的个数:
    SELECT count(DISTINCT (Tname))
    FROM Teacher
    WHERE Tname LIKE ‘李%‘;

    在表中可能包含重复值,关键字distinct用于返回唯一不同的值.distinct语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的.

    select distinct name, id from A返回name+id不同的行

  4. 查询所有同学的学号、姓名、选课数、总成绩:
    SELECT stu.S#, stu.Sname, COUNT(scs.C#), SUM(scs.score)
    FROM Student stu
    LEFT JOIN SC scs
    ON stu.S# = scs.S#
    GROUP BY stu.S#, stu.Sname
    • inner join,满足交换律,”A inner join B”和”B inner join A”是相等的
    • left outer join,产生左表(Student)的完全集,右表(SC)匹配的则有值,没有匹配的则NULL值
    • full outer join,产生左右表的全集,没有匹配的则NULL,满足交换律.
  5. 查询没选修”李明”老师课程的学生的学号与姓名:
    SELECT stu.S#, stu.Sname
    FROM Student stu
    WHERE stu.S# NOT IN (
    SELECT DISTINCT scs.S#
    FROM SC scs, Course crs, Teacher tch
    WHERE scr.C# = crs.C# AND tch.T# = crs.T# AND tch.Tname = ‘李明‘
    );
  6. 查询各科成绩最高分与最低分:课程ID,最高分,最低分

参考资料:

时间: 2024-12-26 08:21:50

学生表 课程表 成绩表 教师表常用SQL语句的相关文章

创建表 添加主键 添加列常用SQL语句

--删除主键 alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段名2……)--添加非聚集索引的主键alter table 表名 add constraint 主键名 primary key NONCLUSTERED(字段名1,字段名2……) 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMARY

SQL Server 创建表 添加主键 添加列常用SQL语句

--删除主键 alter table 表名 drop constraint 主键名 --添加主键 alter table 表名 add constraint 主键名 primary key(字段名1,字段名2……) --添加非聚集索引的主键 alter table 表名 add constraint 主键名 primary key NONCLUSTERED(字段名1,字段名2……) 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIM

SQL Server 创建表 添加主键 添加列常用SQL语句【转】

--删除主键alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段名2……)--添加非聚集索引的主键alter table 表名 add constraint 主键名 primary key NONCLUSTERED(字段名1,字段名2……) 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMARY K

学生表 课程表 成绩表 教师表 50个常用sql语句[转]

Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表   create table Student(S# varchar(20),Sname varchar(10),Sage int,Ssex varchar(2)) 前面加一列序号: if exists(select table_name from information_schema.tables wh

学生表 课程表 成绩表 教师表 50个常用sql语句

原文:http://www.cnblogs.com/zengxiangzhan/archive/2009/09/23/1572276.html Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表   create table Student(S# varchar(20),Sname varchar(10),Sage int,Ssex varchar(2)

常用的学生、课程、成绩、教师表的查询

Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 create table Student(S# varchar(20),Sname varchar(10),Sage int,Ssex varchar(2)) 前面加一列序号: if exists(select table_name from information_schema.tables wher

Mysql常用sql语句(二)- 操作数据表

21篇测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 需要注意,创建数据库和创建表的语句博文都在前面哦 整个系列都是相互关联的哈,需要用到前面创建的数据库和表哦(系列博文第一篇和第二篇) 前言 针对数据表的操作语句叫做数据定义语言(DDL)   数据表有哪些操作? 创建数据表 查看表结构 查看数据表的创建语句 复制数据表 修改数据表 删除数据表 简称“

优化、分析Mysql表读写、索引等操作的sql语句效率优化问题

为什么要优化: 随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能会有一些差异,这时我们 就需要做一个优化调整. 数据库优化这个课题较大,可分为四大类: >主机性能>内存使用性能>网络传输性能>SQL语句执行性能[软件工程师]下面列出一些数据库SQL优化方案: (01)选择最有效率的表名顺序(笔试常考) 数据库的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表将被最先处理,在FROM子句中包含多个表的情况下,你必须选择

Mysql表读写、索引等操作的sql语句效率优化问题

上次我们说到mysql的一些sql查询方面的优化,包括查看explain执行计划,分析索引等等.今天我们分享一些 分析mysql表读写.索引等等操作的sql语句. 闲话不多说,直接上代码: 反映表的读写压力 SELECT file_name AS file, count_read, sum_number_of_bytes_read AS total_read, count_write, sum_number_of_bytes_write AS total_written, (sum_number