简单数据查询
Posted 钻仰弥坚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单数据查询相关的知识,希望对你有一定的参考价值。
一、实验目的
熟悉和掌握对数据表中数据的查询操作和SQL命令的使用,学会灵活熟练地使用SQL 语句的各种形式。
二、实验平台
操作系统:Windows x64
DBMS:SQL Server 2016
三、程序清单
1、简单查询操作
(1)列出所有教授的姓名和工资:
SELECT 姓名,工资
FROM 教工
WHERE 职称= '教授'
(2)列出教授的所有信息。
SELECT *
FROM 教工
WHERE 职称='教授'
(3)列出教工表中的系编号并消除重复的元组。
SELECT DISTINCT 系编号
FROM 教工
(4)已知学分=学时/17,计算每一门课程的学分数。
SELECT 课程名称,学时/17 AS 学分
FROM 课程
(5)显示教授的工资和提高10%的工资额。
SELECT 姓名,工资,工资*1.1 AS '工资*1.1'
FROM 教工 WHERE 职称='教授'
(6)显示田平平同学出生100天的日期。
SELECT 姓名, 出生年月+100 AS '出生年月+100'
FROM 学生
WHERE 姓名='田平平'
(7)列出教工表中工资在3000元以上的名单。
SELECT 姓名
FROM 教工
WHERE 工资>= 3000
(8)列出学生表中1980年1月1日之后出生的学生名单。
SELECT 姓名
FROM 学生
WHERE 出生年月>= '1980-1-1'
(9)列出学生表中在1980年1月1日之后出生的男同学名单。
SELECT 姓名
FROM 学生
WHERE 出生年月>= '1980-1-1' AND 性别='男'
(10)列出教工表中教授或副教授中工资低于3000元的名单。
SELECT 姓名
FROM 教工
WHERE (职称='教授' OR 职称='副教授')AND 工资<3000
(11)查出所有不是教授的教工姓名。
SELECT 姓名
FROM 教工
WHERE 职称 NOT LIKE '教授'
(12)检索工资在1000元到2000元范围内的职工信息。
SELECT * FROM 职工
WHERE 工资 BETWEEN 1000 AND 2000
(13)按学号的升序,显示系编号等于101的学生信息
SELECT *
FROM 学生
WHERE 系编号=101
ORDER BY 学号
(14)求教工表中教授工资的平均值。
SELECT AVG (工资) AS 平均工资
FROM 教工
WHERE 职称='教授'
(15)求所有教工的工资总和。
SELECT SUM (工资) AS 工资总和
FROM 教工
(16)找出教工中最高工资和最低工资。
SELECT MAX(工资)AS 最高工资,MIN(工资)AS 最低工资
FROM 教工
(17)显示学生中最早和最晚的出生日期。
SELECT MIN (出生年月)AS 最早日期,MAX (出生年月) AS 最晚日期
FROM 学生
(18)查询学生的总人数。
SELECT COUNT(*)AS 人数
FROM 学生
2、复杂查询
(19)如果要统计成绩表中所有选课的学生人数,即不管一名学生选了几门课程,都只计算一次
SELECT COUNT (DISTINCT (学号)) AS 人数
FROM 成绩
(20)统计学生表中男生和女生的人数。
SELECT 性别, COUNT (*)AS 人数
FROM 学生
GROUP BY 性别
(21)统计成绩表中,每一门课程的平均成绩
SELECT 课程编号,AVG (分数)AS 平均成绩
FROM 成绩
GROUP BY 课程编号
(22)查询教工表中每一种职称的最高工资和最低工资
SELECT 职称, MAX (工资)AS 最高工资, MIN (工资) AS 最低工资
FROM 教工
GROUP BY 职称
(23)统计成绩表中选修人数超过2以上的课程编号和人数
SELECT 课程编号,COUNT (*)AS 人数
FROM 成绩
GROUP BY 课程编号
HAVING COUNT(*)>2
(24)列出成绩表中分数在60以上、选课数大于2且平均分超过70的学号、选课数目和平均分
SELECT 学号,COUNT(课程编号)AS 选课数目, AVG (分数)AS 平均分
FROM 成绩
WHERE 分数>=60
GROUP BY 学号
HAVING COUNT(课程编号)>2 AND AVG(分数) >70
(25)统计各系学生的人数,结果按升序排列
SELECT 系编号,COUNT(学号)AS 人数
FROM 学生
GROUP BY 系编号
ORDER BY COUNT(学号)
(26)按系统计各系学生的平均年龄,结果按降序排列(2020-year(出生年月))
SELECT 系.系编号,AVG(2020-year(出生年月)) AS 平均年龄
FROM 学生,系
WHERE 学生.系编号=系.系编号
GROUP BY 学生.系编号,系.系编号
ORDER BY 平均年龄 DESC
(27)查询每门课程的课程名;
SELECT 课程编号,课程名称
FROM 课程
(28)统计每位学生选修课程的门数、平均成绩;
SELECT 姓名,成绩.学号,COUNT(课程编号)AS 选课门数,AVG(分数)AS 平均分
FROM 成绩,学生
GROUP BY 成绩.学号,姓名,学生.学号
Having 成绩.学号=学生.学号
(32) 统计选修每门课程的学生人数及各门课程的平均成绩;
SELECT 课程.课程编号,课程名称,COUNT(*)AS 选课人数,AVG(分数)AS 平均成绩
FROM 成绩,课程
GROUP BY 成绩.课程编号,课程.课程名称,课程.课程编号
Having 课程.课程编号=成绩.课程编号
(33) 找出平均成绩在85分以上的学生,结果按平均成绩的升序排列;
SELECT 姓名,成绩.学号,COUNT(课程编号)AS 选课门数,AVG(分数)AS 平均分
FROM 成绩,学生
GROUP BY 成绩.学号,姓名,学生.学号
Having 成绩.学号=学生.学号 AND AVG(分数)>=75
ORDER BY AVG(分数)
(34) 查询选修了“C101”或“C102”号课程的学生学号和姓名;
SELECT 成绩.学号,姓名
FROM 成绩,学生
WHERE 课程编号='C101' AND 成绩.学号=学生.学号
UNION
SELECT 成绩.学号,姓名
FROM 成绩,学生
WHERE 课程编号='C102' AND 成绩.学号=学生.学号
(35)查询选修了“C101”和“C102”号课程的学生学号和姓名;
SELECT 成绩.学号,姓名
FROM 成绩,学生
WHERE 课程编号='C101' AND 成绩.学号=学生.学号
INTERSECT
SELECT 成绩.学号,姓名
FROM 成绩,学生
WHERE 课程编号='C102' AND 成绩.学号=学生.学号
(36) 查询选修了3门以上课程的学生学号;
SELECT 学号
FROM 成绩
GROUP BY 学号
HAVING COUNT(*)>=3
(37)查询选修课程成绩至少有一门在80分以上的学生学号
SELECT 成绩.学号
FROM 学生,成绩
WHERE 分数>=80
GROUP BY 成绩.学号
HAVING COUNT(课程编号)>=1
MySQL数据表简单查询
1.简单查询概述
简单查询即不含where的select语句。在此,我们讲解简单查询中最常用的两种查询:查询所有字段和查询指定字段。
mysql安装请参考:http://shujuku.cuohei.com/
在此,先准备测试数据,代码如下:
-- 创建数据库
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb;
USE mydb;
-- 创建student表
CREATE TABLE student (
sid CHAR(6),
sname VARCHAR(50),
age INT,
gender VARCHAR(50) DEFAULT \'male\'
);
-- 向student表插入数据
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1001\', \'lili\', 14, \'male\');
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1002\', \'wang\', 15, \'female\');
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1003\', \'tywd\', 16, \'male\');
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1004\', \'hfgs\', 17, \'female\');
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1005\', \'qwer\', 18, \'male\');
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1006\', \'zxsd\', 19, \'female\');
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1007\', \'hjop\', 16, \'male\');
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1008\', \'tyop\', 15, \'female\');
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1009\', \'nhmk\', 13, \'male\');
INSERT INTO student (sid,sname,age,gender) VALUES (\'S_1010\', \'xdfv\', 17, \'female\');
2.查询所有字段
查询所有字段 MySQL命令:
select * from student;
3.查询指定字段(sid、sname)
查询指定字段(sid、sname) MySQL命令:
select sid,sname from student;
4.常数的查询
在SELECT中除了书写列名,还可以书写常数。可以用于标记
常数的查询日期标记 MySQL命令:
select sid,sname,\'2021-03-02\' from student;
5.从查询结果中过滤重复数据
在使用DISTINCT 时需要注意:
在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。
MySQL命令:
select distinct gender from student;
6.算术运算符(举例加运算符)
在SELECT查询语句中还可以使用加减乘除运算符。
查询学生10年后的年龄 MySQL命令:
select sname,age+10 from student;
以上是关于简单数据查询的主要内容,如果未能解决你的问题,请参考以下文章