• 欢迎访问交通人网站!
  • 分享一款小游戏:信任的进化
  •    发表于9年前 (2016-03-03)  热点资讯 |   抢沙发  672 
    文章评分 2 次,平均分 5.0

    直接贴 SQL 语句是一个很枯燥的事情,当然,看的人更枯燥。所以,小编决定把小明老师请出来,以他的亲身经历给大家讲讲 SQL 语句的使用。

    哦,对了,在这里小明是一个光荣的人民教师,而且还是班主任。

    上学期末,他觉得老是用 Excel 统计学生成绩太 Low,于是乎,他装了个 SQL Server。

    数据库操作

    新建数据库

    数据库,数据库,首先要建一个数据库。

    CREATE DATABASE [期末成绩]

    删除数据库

    DROP DATABASE [期末成绩]

    数据表操作

    新建数据表

    数据库是一个容器,里面可以存放很多的表。为了方便,就语数外一科一张表吧。表的结构都是:学号,姓名,成绩。

    CREATE TABLE [期末成绩].[dbo].[数学]
    (
    [学号] VARCHAR(20) NOT NULL,//字符串
    [姓名] VARCHAR(20) NOT NULL,//字符串
    [成绩] FLOAT NOT NULL//浮点数
    )

    或者

    USE [期末成绩]
    CREATE TABLE [数学]
    (
    [学号] VARCHAR(20) NOT NULL,
    [姓名] VARCHAR(20) NOT NULL,
    [成绩] FLOAT NOT NULL
    )

    “USE [期末成绩]”和“[期末成绩].[dbo].”的作用是一样一样的,就是要明确告诉程序你引用的是哪个表。

    删除数据表

    DROP TABLE [英语]

    清空数据表

    TRUNCATE TABLE [英语]

    导入数据

    额,用命令有点烦,小明挠挠头,还是【右击】->【任务】->【导入数据】来搞定。

    数据操作

    刚刚导完数据,数学老师跑来了,说漏录了小强的成绩(增,90分),错录了小明的成绩(改,实际88分),多录了隔壁班小林的成绩(删)。

    插入数据

    INSERT INTO [期末成绩].[dbo].[数学]
    ([学号],[姓名],[成绩])
    VALUES('2','小强',90)

    修改数据

    UPDATE [期末成绩].[dbo].[数学] SET [成绩]=88
    WHERE [姓名]='小明'

    删除数据

    DELETE FROM [期末成绩].[dbo].[数学]
    WHERE [姓名]='小林'

    数据查询

    基本查询

    遇到粗心的老师真是没办法,干脆先检查一下数据。以数学为例:

    • 检查人数
    SELECT DISTINCT COUNT([学号])
    FROM [期末成绩].[dbo].[数学]
    • 检查学号、姓名
    SELECT DISTINCT [学号], [姓名]
    FROM [期末成绩].[dbo].[数学]
    ORDER BY [学号]

    复制表

    依次检查完毕之后,小明啪啪啪输入一堆语句,把三科成绩汇总为一张表,其结构为:学号,姓名,语文,数学,英语,总分。

    USE [期末成绩]
    SELECT E.[学号]
    , E.[姓名]
    , C.[成绩] AS '语文'
    , M.[成绩] AS '数学'
    , E.[成绩] AS '英语'
    , M.[成绩]+C.[成绩]+E.[成绩] AS '总分'
    INTO [成绩汇总]
    FROM [数学] AS M,[语文] AS C, [英语] AS E
    WHERE M.[学号]=C.[学号] AND C.[学号]=E.[学号]

    排序

    先看看总分排名:

    SELECT * FROM [期末成绩].[dbo].[成绩汇总]
    ORDER BY [总分] DESC //不加DESC,默认从低到高排序

    对于前三名的同学,是不是要考虑奖励一下:

    SELECT TOP 3 * FROM [期末成绩].[dbo].[成绩汇总]
    ORDER BY [总分] DESC

    统计运算

    小明觉得,作为班主任,要透过现象看本质,这样才能发现问题和解决问题。

    • 统计分数分布
    SELECT COUNT(CASE [语文] WHEN 100 THEN 1 END) AS [满分],
    COUNT(CASE WHEN [语文] BETWEEN 90 AND 99 THEN 1 END) AS [90-99分],
    COUNT(CASE WHEN [语文] BETWEEN 80 AND 89 THEN 1 END) AS [80-89分],
    COUNT(CASE WHEN [语文] BETWEEN 70 AND 79 THEN 1 END) AS [70-79分],
    COUNT(CASE WHEN [语文] BETWEEN 60 AND 69 THEN 1 END) AS [60-69分],
    COUNT(CASE WHEN [语文] <60 THEN 1 END) AS [不及格]
    FROM [期末成绩].[dbo].[成绩汇总]
    • 平均分和方差
    SELECT AVG([语文]),VAR([语文])
    FROM [期末成绩].[dbo].[成绩汇总]
    • 哪些人是均分以下
    SELECT * FROM [期末成绩].[dbo].[成绩汇总]
    WHERE [语文]<(SELECT AVG([语文]) FROM [期末成绩].[dbo].[成绩汇总])
    • 最高分和最低分
    SELECT MAX([语文]),MIN([语文])
    FROM [期末成绩].[dbo].[成绩汇总]
    • 谁垫了底
    SELECT [姓名] FROM [期末成绩].[dbo].[成绩汇总]
    WHERE [语文]=(SELECT MIN([语文]) FROM [期末成绩].[dbo].[成绩汇总])

    从统计来看,大家上学期学习成绩都还不错。作为班主任,小明心中还是挺自豪的。

    (未完待续)

    不过就是现在要天天盯着学生,又要抽时间出演各种段子,有点忙不过来……

    所以后续更新需要耐心等待。

      
     

    除特别注明外,本站所有文章均为交通人原创,转载请注明出处来自http://www.hijtr.com/basic-sql-query/

    交通人博客是交通人工作室(JTR Studio)建立的交通人系列网站之一,是交通人工作室的主阵地,旨在整合和分享交通行业相关资讯,具体包括但不限于行业新闻、行业动态,以及行业相关规范、书籍、报告和软件等资源。

    发表评论

    表情 格式

    暂无评论

    
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享