博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
经典SQL
阅读量:6261 次
发布时间:2019-06-22

本文共 8759 字,大约阅读时间需要 29 分钟。

USE master GO IF EXISTS(SELECT * FROM sysdatabases WHERE name='DB_StudentInfoManagement')DROP DATABASE DB_StudentInfoManagementGOCREATE DATABASE DB_StudentInfoManagementGO USE DB_StudentInfoManagementGO IF EXISTS(SELECT * FROM sysobjects WHERE name='Student')DROP TABLE StudentGO CREATE TABLE Student(S# INT  PRIMARY KEY ,--学号Sname NVARCHAR(100) NOT NULL,--姓名Sage INT NOT NULL,--年龄Ssex  NVARCHAR(10) NOT NULL--性别)GOIF EXISTS(SELECT * FROM sysobjects WHERE name='Teacher')DROP TABLE TeacherGOCREATE TABLE Teacher( T# INT PRIMARY KEY ,--教师编号 Tname NVARCHAR(50) NOT NULL,--教师名  )GO IF EXISTS(SELECT * FROM sysobjects WHERE name='Course')DROP TABLE CourseGOCREATE TABLE Course( C# INT PRIMARY KEY ,--课程号 Cname NVARCHAR(50) NOT NULL,--课程名 T# INT NOT NULL REFERENCES Teacher(T#)--教师编号)GOIF EXISTS(SELECT * FROM sysobjects WHERE name='SC')DROP TABLE SCGOCREATE TABLE SC( C# INT  NOT NULL REFERENCES dbo.Course(C#),--课程号 S# INT NOT NULL REFERENCES dbo.Student(S#),--学号 Score NVARCHAR(50) NOT NULL,--分数 CONSTRAINT PK_SC PRIMARY  KEY(C#,S#))

 

--插入测试数据 INSERT  INTO dbo.Student        SELECT  '1' ,                N'刘一' ,                '18' ,                N'男'        UNION ALL  --不会去除重复数据,Union会自动去除重复数据        SELECT  '2' ,                N'钱二' ,                '19' ,                '女'        UNION ALL        SELECT  '3' ,                N'张三' ,                '17' ,                N'男'        UNION ALL        SELECT  '4' ,                N'李四' ,                '18' ,                N'女'        UNION ALL        SELECT  '5' ,                N'王五' ,                '17' ,                N'男'        UNION ALL        SELECT  '6' ,                N'赵六' ,                '19' ,                N'女'; INSERT  INTO Teacher        SELECT  '1' ,                N'叶平'        UNION ALL        SELECT  '2' ,                N'贺高'        UNION  ALL        SELECT  '3' ,                N'杨艳'        UNION  ALL        SELECT  '4' ,                N'周磊';  INSERT INTO Course                        SELECT  '1' ,                                N'语文' ,                                '1'                        UNION ALL                        SELECT  '2' ,                                N'数学' ,                                '2'                        UNION ALL                        SELECT  '3' ,                                N'英语' ,                                '3'                        UNION ALL                        SELECT  '4' ,                                N'物理' ,                                '4'; INSERT  INTO SC                                        SELECT  1 ,                                                1 ,                                                56                                        UNION ALL                                        SELECT  1 ,                                                2 ,                                                78                                        UNION ALL                                        SELECT  1 ,                                                3 ,                                                67                                        UNION ALL                                        SELECT  1 ,                                                4 ,                                                58                                        UNION ALL                                        SELECT  2 ,                                                1 ,                                                79                                        UNION ALL                                        SELECT  2 ,                                                2 ,                                                81                                        UNION ALL                                        SELECT  2 ,                                                3 ,                                                92                                        UNION ALL                                        SELECT  2 ,                                                4 ,                                                68                                        UNION ALL                                        SELECT  3 ,                                                1 ,                                                91                                        UNION ALL                                        SELECT  3 ,                                                2 ,                                                47                                        UNION ALL                                        SELECT  3 ,                                                3 ,                                                88                                        UNION ALL                                        SELECT  3 ,                                                4 ,                                                56                                        UNION ALL                                        SELECT  4 ,                                                2 ,                                                88                                        UNION ALL                                        SELECT  4 ,                                                3 ,                                                90                                        UNION ALL                                        SELECT  4 ,                                                4 ,                                                93                                        UNION ALL                                        SELECT  5 ,                                                1 ,                                                46                                        UNION ALL                                        SELECT  5 ,                                                3 ,                                                78                                        UNION ALL                                        SELECT  5 ,                                                4 ,                                                53                                        UNION ALL                                        SELECT  6 ,                                                1 ,                                                35                                        UNION ALL                                        SELECT  6 ,                                                2 ,                                                68                                        UNION ALL                                        SELECT  6 ,                                                4 ,                                                71;

 

--1、查询“001”课程比“002”课程成绩高的所有学生的学号; --先查出001号,002号课程的学号和成绩--在使用子查询连表查询 SELECT  a.S#FROM    ( SELECT    S# ,                    Score          FROM      dbo.SC          WHERE     C# = '001'        ) AS a , --001号课程的学号和成绩        ( SELECT    S# ,                    Score          FROM      dbo.SC          WHERE     C# = '002'        ) AS b ----002号课程的学号和成绩WHERE   a.S# = b.S#        AND a.Score > b.Score;

验证:

SELECT S# ,

Score
FROM dbo.SC
WHERE C# = '001'

SELECT S# ,

Score
FROM dbo.SC
WHERE C# = '002'

 

 

--2、查询平均成绩大于60分的同学的学号和平均成绩;   --Having子句中,不能使用聚合函数的别名【错误答案:列名 'AvgScore' 无效。】SELECT S#,AVG(Score)AS AvgScore FROM dbo.SCGROUP BY S# HAVING AvgScore>60   --正确答案:SELECT S#,AVG(Score)AS AvgScore FROM dbo.SCGROUP BY S# HAVING AVG(Score)>60

 

 

 

--3、查询所有同学的学号、姓名、选课数、总成绩;--这里要注意的是,并不是所有学生都选课了,所以要用到外连接,--因为是要查询所有学生的学号,姓名,,也就是不管该学生,选没选课,都要查出来,所以左表是Student,用左连接SELECT  S.S# ,        S.Sname ,        COUNT(SC.C#) AS SelectCourseCount ,        SUM(SC.Score) AS TotalScoreFROM    dbo.Student AS S        LEFT JOIN dbo.SC AS SC ON SC.S# = S.S#        GROUP BY S.S#,S.Sname;
 

 

--4、查询姓“李”的老师的个数;--分析,用到模糊查询,只要姓李就行,后面几个字的名,不管--'%代表任意字符的字符串,_代表单个字符'--同名的也算,这是明显的。网上的答案是错误的。--自己的答案SELECT COUNT(T#)  FROM dbo.Teacher  WHERE Tname LIKE '李%';  --网上的答案:同名的也算,网上的答案是错误的了 SELECT COUNT(DISTINCT ( Tname )) FROM   Teacher WHERE  Tname LIKE '李%';

 

验证:

--测试

--SELECT * FROM dbo.Teacher WHERE Tname LIKE '李%';

 

 
--5、查询没学过“叶平”老师课的同学的学号、姓名; --分析:先查出学过叶平老师课的学生学号,再求出Student表中学号不在这其中的就是了SELECT S#,Sname FROM dbo.Student WHERE S# NOT IN (--学过叶平老师课的学生学号SELECT DISTINCT( SC.S#) FROM dbo.Course AS C INNER JOIN dbo.Teacher AS T ON T.T# = C.T#INNER  JOIN dbo.SC AS SC   ON SC.C# = C.C#WHERE T.Tname='叶平')

 

 

 

 

--6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; --查出学过001号课程的                                                SELECT  s.S# ,        SnameFROM    dbo.Student AS s        RIGHT JOIN dbo.SC ON SC.S# = s.S#WHERE   C# = '001'        AND EXISTS ( SELECT *                     FROM   SC AS SC2                          LEFT JOIN dbo.Student AS s ON s.S# = SC2.S#                     WHERE  SC2.C# = '002' );

 

 

 未完待整理...........

转载地址:http://ggqsa.baihongyu.com/

你可能感兴趣的文章
多线程:GCD
查看>>
深度解读 2018 JavaScript 趋势报告(含视频)
查看>>
以 RAIDs 分析作为架构驱动力
查看>>
Rust 2018 年度调查报告
查看>>
Tensorflow快餐教程(1) - 30行代码搞定手写识别
查看>>
聊聊flink Table的Set Operations
查看>>
3.3 卷积神经网络进阶-Inception-mobile_net
查看>>
JS学习系列 06 - 变量对象
查看>>
Swift开发应用时如何更方便地使用颜色?
查看>>
ubuntu虚拟机设置静态ip(windows能够ping通ubuntu虚拟机)
查看>>
Redis高级特性介绍及实例分析
查看>>
Android的复选框的详细开发案例分析
查看>>
iOS FMDB数据库之增删改查使用
查看>>
EventBus源码解析
查看>>
Android中绘制简单几何图形和路径Path
查看>>
Internationalization(i18n) support in SAP CRM,UI5 and Hybris
查看>>
Xcode Debug调试汇总
查看>>
设计模式:再严谨的单例也尽量不要使用
查看>>
TiDB at 丰巢:尝鲜分布式数据库
查看>>
三篇文章了解 TiDB 技术内幕 —— 谈调度
查看>>