直接贴 SQL 语句是一个很枯燥的事情,当然,看的人更枯燥。所以,小编决定把小明老师请出来,以他的亲身经历给大家讲讲 SQL 语句的使用。
哦,对了,在这里小明是一个光荣的人民教师,而且还是班主任。
上学期末,他觉得老是用 Excel 统计学生成绩太 Low,于是乎,他装了个 SQL Server。
数据库操作
新建数据库
数据库,数据库,首先要建一个数据库。
1 |
CREATE DATABASE [期末成绩] |
删除数据库
1 |
DROP DATABASE [期末成绩] |
数据表操作
新建数据表
数据库是一个容器,里面可以存放很多的表。为了方便,就语数外一科一张表吧。表的结构都是:学号,姓名,成绩。
1 2 3 4 5 6 |
CREATE TABLE [期末成绩].[dbo].[数学] ( [学号] VARCHAR(20) NOT NULL,//字符串 [姓名] VARCHAR(20) NOT NULL,//字符串 [成绩] FLOAT NOT NULL//浮点数 ) |
或者
1 2 3 4 5 6 7 |
USE [期末成绩] CREATE TABLE [数学] ( [学号] VARCHAR(20) NOT NULL, [姓名] VARCHAR(20) NOT NULL, [成绩] FLOAT NOT NULL ) |
“USE [期末成绩]”和“[期末成绩].[dbo].”的作用是一样一样的,就是要明确告诉程序你引用的是哪个表。
删除数据表
1 |
DROP TABLE [英语] |
清空数据表
1 |
TRUNCATE TABLE [英语] |
导入数据
额,用命令有点烦,小明挠挠头,还是【右击】->【任务】->【导入数据】来搞定。
数据操作
刚刚导完数据,数学老师跑来了,说漏录了小强的成绩(增,90分),错录了小明的成绩(改,实际88分),多录了隔壁班小林的成绩(删)。
插入数据
1 2 3 |
INSERT INTO [期末成绩].[dbo].[数学] ([学号],[姓名],[成绩]) VALUES('2','小强',90) |
修改数据
1 2 |
UPDATE [期末成绩].[dbo].[数学] SET [成绩]=88 WHERE [姓名]='小明' |
删除数据
1 2 |
DELETE FROM [期末成绩].[dbo].[数学] WHERE [姓名]='小林' |
数据查询
基本查询
遇到粗心的老师真是没办法,干脆先检查一下数据。以数学为例:
- 检查人数
1 2 |
SELECT DISTINCT COUNT([学号]) FROM [期末成绩].[dbo].[数学] |
- 检查学号、姓名
1 2 3 |
SELECT DISTINCT [学号], [姓名] FROM [期末成绩].[dbo].[数学] ORDER BY [学号] |
复制表
依次检查完毕之后,小明啪啪啪输入一堆语句,把三科成绩汇总为一张表,其结构为:学号,姓名,语文,数学,英语,总分。
1 2 3 4 5 6 7 8 9 10 |
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.[学号] |
排序
先看看总分排名:
1 2 |
SELECT * FROM [期末成绩].[dbo].[成绩汇总] ORDER BY [总分] DESC //不加DESC,默认从低到高排序 |
对于前三名的同学,是不是要考虑奖励一下:
1 2 |
SELECT TOP 3 * FROM [期末成绩].[dbo].[成绩汇总] ORDER BY [总分] DESC |
统计运算
小明觉得,作为班主任,要透过现象看本质,这样才能发现问题和解决问题。
- 统计分数分布
1 2 3 4 5 6 7 |
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].[成绩汇总] |
- 平均分和方差
1 2 |
SELECT AVG([语文]),VAR([语文]) FROM [期末成绩].[dbo].[成绩汇总] |
- 哪些人是均分以下
1 2 |
SELECT * FROM [期末成绩].[dbo].[成绩汇总] WHERE [语文]<(SELECT AVG([语文]) FROM [期末成绩].[dbo].[成绩汇总]) |
- 最高分和最低分
1 2 |
SELECT MAX([语文]),MIN([语文]) FROM [期末成绩].[dbo].[成绩汇总] |
- 谁垫了底
1 2 |
SELECT [姓名] FROM [期末成绩].[dbo].[成绩汇总] WHERE [语文]=(SELECT MIN([语文]) FROM [期末成绩].[dbo].[成绩汇总]) |
从统计来看,大家上学期学习成绩都还不错。作为班主任,小明心中还是挺自豪的。
(未完待续)
不过就是现在要天天盯着学生,又要抽时间出演各种段子,有点忙不过来……
所以后续更新需要耐心等待。
除特别注明外,本站所有文章均为交通人原创,转载请注明出处来自http://www.hijtr.com/basic-sql-query/
暂无评论