数据库实验第五周【数据查询】
例题紧接着上一篇博客,链接地址在这里:
数据库【数据索引&插入&查询】
目录
- 数据查询
- 单表查询
- 1.选择表中的若干列
- (3)查询经过计算的值
- [例3.19] 查全体学生的姓名及其出生年份。
- [例3.20] 查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示系名。
- 2.选择表中的若干元组
- (1)消除取值重复的行
- [例3.21] 查询选修了课程的学生学号。
- (2)查询满足条件的元组
- 第一,比较大小
- [例3.22] 查询计算机科学系全体学生的名单。
- [例3.23]查询所有年龄在20岁以下的学生姓名及其年龄。
- [例3.24]查询考试成绩有不及格的学生的学号。
- 第二,确定范围
- [例3.25] 查询年龄在20~23岁(包括20岁和23岁)之间的学生 的姓名、系别和年龄
- [例3.26] 查询年龄不在20~23岁之间的学生姓名、系别和年龄
- 第三,确定集合
- [例3.27]查询计算机科学系(CS)、数学系(MA)和信息 系(IS)学生的姓名和性别。
- [例3.28]查询既不是计算机科学系、数学系,也不是信息系 的学生的姓名和性别。
- 第四,字符匹配
- [例3.29] 查询学号为201215121的学生的详细情况。
- [例3.30] 查询所有姓刘学生的姓名、学号和性别。
- [例3.31] 查询姓"欧阳"且全名为三个汉字的学生的姓名。
- [例3.32] 查询名字中第2个字为"阳"字的学生的姓名和学号。
- [例3.33] 查询所有不姓刘的学生姓名、学号和性别。
- 使用换码字符将通配符转义为普通字符
- [例3.34] 查询DB_Design课程的课程号和学分。
- [例3.35] 查询以"DB_"开头,且倒数第3个字符为 i的课程的 详细情况。
- 第五,涉及空值的查询
- [例3.36] 某些学生选修课程后没有参加考试,所以有选课 记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。
- [例3.37] 查所有有成绩的学生学号和课程号。
- 第六,多重条件查询
- [例3.38] 查询计算机系年龄在20岁以下的学生姓名。
- 改写[例3.27]
- 3.order by 子句
- [例3.39]查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
- [例3.40]查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
- 4.聚集函数
- [例3.41] 查询学生总人数。
- [例3.42] 查询选修了课程的学生人数。
- [例3.43] 计算1号课程的学生平均成绩。
- [例3.44] 查询选修1号课程的学生最高分数。
- [例3.45 ] 查询学生201215012选修课程的总学分数。
- 5.group by 子句
- [例3.46] 求各个课程号及相应的选课人数。
- [例3.47] 查询选修了3门以上课程的学生学号。
- 本次一个愚蠢的小错误
数据查询
单表查询
1.选择表中的若干列
(3)查询经过计算的值
[例3.19] 查全体学生的姓名及其出生年份。
select Sname,2014-Sage
from Student;
这个样子的第二列是没有表头的,添加方法在下一个例题有方法哦。
[例3.20] 查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示系名。
tips:
字母变小写LOWER
字母变大写UPPER
无列名
select Sname,'Year of Birth:',2014-Sage,LOWER(Sdept)
from Student;
有英文列名
select Sname NAME,'Year of Birth:'BIRTH,2014-Sage BIRTHDAY,
LOWER(Sdept) DEPARTHMENT
from Student;
这个样子就可以添加使用户简单理解的表头了。
SQL serve是支持中文的,表头可以设置成中文格式。
有中文列名
select Sname 姓名,'Year of Birth:'出生年,2014-Sage 出生年,
LOWER(Sdept) 专业
from Student;
其中第二列,Year of Birth:
数据列较多时可以提示编程者下一列的含义,哦,其实没有太大的用处。
2.选择表中的若干元组
(1)消除取值重复的行
[例3.21] 查询选修了课程的学生学号。
去重前
select Sno
from SC;
等价于
select ALL Sno
from SC;
去重后
select DISTINCT Sno
from SC;
如果没有指定DISTINCT关键词,则缺省为ALL
(2)查询满足条件的元组
第一,比较大小
[例3.22] 查询计算机科学系全体学生的名单。
select Sname
from Student
where Sdept='CS';
[例3.23]查询所有年龄在20岁以下的学生姓名及其年龄。
select Sname,Sage
from Student
where Sage<20;
[例3.24]查询考试成绩有不及格的学生的学号。
select distinct Sno
from SC
where Grade<60;
第二,确定范围
[例3.25] 查询年龄在20~23岁(包括20岁和23岁)之间的学生 的姓名、系别和年龄
BETWEEN … AND …
NOT BETWEEN AND
包括端点值
select Sname,Sdept,Sage
from Student
where Sage between 20 and 23;
[例3.26] 查询年龄不在20~23岁之间的学生姓名、系别和年龄
select Sname,Sdept,Sage
from Student
where Sage not between 20 and 23;
第三,确定集合
[例3.27]查询计算机科学系(CS)、数学系(MA)和信息 系(IS)学生的姓名和性别。
select Sname,Ssex
from Student
where Sdept in('CS','MA','IS');
[例3.28]查询既不是计算机科学系、数学系,也不是信息系 的学生的姓名和性别。
select Sname,Ssex
from Student
where Sdept not in('CS','MA','IS');
第四,字符匹配
% (百分号) 代表任意长度(长度可以为0)的字符串
例如a%b表示以a开头,以b结尾的任意长度的字符串
_ (下横线) 代表任意单个字符。
例如a_b表示以a开头,以b结尾的长度为3的任意字符串
[例3.29] 查询学号为201215121的学生的详细情况。
select *
from Student
where Sno like '201215121';
在这种简单的情况下,等价于
select *
from Student
where Sno='201215121';
但是like更多的是使用在下面的情况下:
例3.30—例3.33 情况有点特殊,,,
我在这里为了更好的测试,新建了一个Test的数据库。
新的数据如下图:
接着附上建立的代码
建表
create table Test(no char(9) primary key,name char(20) unique,sex char(2),age smallint,dept char(20));
插入数据并查询
insert
into Test
values('001','刘星','男',20,'计算机'),('002','刘星星','女',20,'计算机'),('003','刘刘刘','男',20,'文学'),('004','柳刘6','男',15,'英语'),('005','欧阳克','男',40,'武术'),('006','欧阳娜娜','女',25,'表演'),('007','欧阳峰','男',50,'装疯子'),('008','张阳阳','女',18,'医学');select *
from Test;
[例3.30] 查询所有姓刘学生的姓名、学号和性别。
select *
from Test
where name like '刘%';
[例3.31] 查询姓"欧阳"且全名为三个汉字的学生的姓名。
select name
from Test
where name like '欧阳_';
若是将上个代码的下划线变成两个,就会出现下面的结果
【注】数据库字符集为ASCII时,一个汉字需要两个_
数据库字符集为 GBK 时,一个汉字需要一个_
[例3.32] 查询名字中第2个字为"阳"字的学生的姓名和学号。
select name,no
from Test
where name like '_阳%';
[例3.33] 查询所有不姓刘的学生姓名、学号和性别。
select name,no,sex
from Test
where name not like '刘%';
使用换码字符将通配符转义为普通字符
[例3.34] 查询DB_Design课程的课程号和学分。
select Cno,Ccredit
from Course
where Cname like 'DB\_Design' escape '\';
[例3.35] 查询以"DB_"开头,且倒数第3个字符为 i的课程的 详细情况。
select Cno,Ccredit
from Course
where Cname like 'DB\_%i__' escape '\';
ESCAPE ‘\’ 表示“ \” 为换码字符
第五,涉及空值的查询
[例3.36] 某些学生选修课程后没有参加考试,所以有选课 记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。
select Sno,Cno
from SC
where grade is null;
[例3.37] 查所有有成绩的学生学号和课程号。
select Sno,Cno
from SC
where grade is not null;
第六,多重条件查询
and的优先级高于or
[例3.38] 查询计算机系年龄在20岁以下的学生姓名。
select Sname
from Student
where Sage<20 and Sdept='CS';
改写[例3.27]
select Sname,Ssex
from Student
where Sdept='CS'or Sdept='MA' or Sdept='IS';
3.order by 子句
ORDER BY子句(排序)
可以按一个或多个属性列排序
升序:ASC;
降序:DESC;
缺省值为ASC
对于空值,排序时显示的次序由具体系统实现来决定。
例如按照升序排,含空值的元组最后显示;按照降序排,空值的元素则最先显示。
[例3.39]查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
select Sno,Grade
from SC
where Cno=3
order by Grade desc;
[例3.40]查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
select *
from Student
order by Sdept,Sage desc;
第一个Sdept后面没有添加属性,系统默认为ASC升序。
查询结果如下,先按照专业排,专业内再按照年龄排
4.聚集函数
统计元组个数 COUNT(*)
统计一列中值的个数 COUNT([DISTINCT|ALL] <列名>)
计算一列值的总和 SUM([DISTINCT|ALL] <列名>)
计算一列值的平均值 AVG([DISTINCT|ALL] <列名>
求一列中的最大值和最小值
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)
[例3.41] 查询学生总人数。
select count(*)
from Student;
[例3.42] 查询选修了课程的学生人数。
select count(distinct Sno)
from SC;
[例3.43] 计算1号课程的学生平均成绩。
select avg(Grade)
from SC
where Cno='1';
[例3.44] 查询选修1号课程的学生最高分数。
select max(Grade)
from SC
where Cno='1';
[例3.45 ] 查询学生201215012选修课程的总学分数。
select sum(Ccredit)
from SC,Course
where Sno='201215012'and SC.Cno=Course.Cno;
注:SC.Cno=Course.Cno 该语句将SC和Course两个表按照Cno连接起来了。
5.group by 子句
[例3.46] 求各个课程号及相应的选课人数。
select Cno,count(Sno)
from SC
group by Cno;
将以上代码做轻微的改变,查询的结果就是每位同学选了几门课。
select Sno,count(Sno)
from SC
group by Sno;
[例3.47] 查询选修了3门以上课程的学生学号。
select Sno
from SC
group by Sno
having count(*)>3;
本次一个愚蠢的小错误
前面的都是在实验室里写的,非常顺利,但是下课的时候,还没有写完,吃了一个中午饭,看了一集动漫,啊这个,居然就开始错误了。
我的代码没有写错啊!!!
说一下我的解决方案,看这里啊,这里要更改成为自己所查询的数据库的名字,我的数据全部存储在Student数据库中,所以啊,改成Student就可以了。
哎,电脑睡眠一下,吃个饭而已,这点小问题,难为了我好大一会,烦死了~~~~
还是说点心得吧:
这些东西都不是很难,但看到代码就知道这是什么意思很简单,但是脱离课本自己盲目的写,就有点问题了,还是需要记忆和练习的。
OVER!
数据库实验第五周【数据查询】相关推荐
- MySQL数据库基础(五)——SQL查询
MySQL数据库基础(五)--SQL查询 一.单表查询 1.查询所有字段 在SELECT语句中使用星号""通配符查询所有字段 在SELECT语句中指定所有字段 select fro ...
- mysql实验训练2 数据查询操作_实验训练2:数据查询操作
<实验训练2:数据查询操作>由会员分享,可在线阅读,更多相关<实验训练2:数据查询操作(6页珍藏版)>请在人人文库网上搜索. 1.实验训练2:数据查询操作请到电脑端查看实验目的 ...
- mysql实验训练2 数据查询操作_实验训练2:数据查询操作.doc
实验训练2:数据查询操作.doc 实验训练2数据查询操作请到电脑端查看实验目的基于实验1创建的汽车用品网上商城数据库Shopping,理解MySQL运算符.函数.谓词,练习Select语句的操作方法. ...
- 数据库实验4 SQL语言-SELECT查询操作
数据库实验4 SQL语言-SELECT查询操作 1.首先按照第三章的jxgl数据库的模板创建jxgl数据库并插入数据: 创建数据库jxgl: create database jxgl; 创建相应的表: ...
- MySQL项目五,数据查询
项目五:数据查询 本项目以电商购物管理系统的商品及其相关信息的检索和统计查询为案例,主要包括基本数据查询.统计数据查询.跨表连接查询和子查询应用四个任务. 任务1:基本数据查询 一.SELECT基本查 ...
- JavaWeb学习笔记(数据库、SQL语句、数据查询语法、完整性约束、编码、备份和恢复数据、多表查询)
数据库.SQL语句.数据查询语法.完整性约束.编码.备份和恢复数据.多表查询 JavaWeb学习笔记 数据库 数据库概念 基本命令 启动和关闭mysql服务器 客户端登录退出mysql SQL语句 S ...
- 数据库实验报告 设计便利店数据表、商品数据表 查询需要上货的商品列表 SQL Kingbase
一.实验题目 已有条件:假设你拥有多个连锁便利店,名字不一样,每个便利店有店名.国家.城市.地址等信息要登记,每个便利店有多种商品要登记,包括商品ID.商品名称等信息.每个店销售的商品种类.价格和促销 ...
- 达梦数据库实验三:DMDBMS表查询操作
目录标题 实验三 DMDBMS表查询操作 一.实验目的: 二.实验要求: 三.实验重点和难点: 四.实验内容: 五.实验步骤与结果: 1. 表创建 2. 数据填充 3. 数据查询 3.1查出选修了20 ...
- mysql查询男生基本情况_MySQL数据库技术与应用:数据查询
**摘要:**数据查询是数据库系统应用的主要内容,也是用户对数据库最频繁.最常见的基本操作请求. 数据查询 数据查询是数据库系统应用的主要内容,也是用户对数据库最频繁.最常见的基本操作请求.数据查询可 ...
最新文章
- 高频开关电源原理_程控开关电源的工作原理
- 兵团教师计算机水平考试免考条件,兵团职称计算机考试政策.doc
- Java读写文件,中文乱码解决
- node.js path
- 一个微软面试题--关于位结构体
- JAVA Swing 事件监听
- 休息是为了更好的出发
- 远程登录工具 —— filezilla(FTP vs. SFTP)、xshell、secureCRT
- 2 docker镜像
- java并发编程 Lock
- matlab匹配滤波器的仿真
- NodeJS集成Redis实战
- 苏州大学计算机考研 复试机试真题2013-2020真题及Python题解
- 后端开发之如何写接口设计文档
- snipaste滚动截图方法_Snipaste——这是我用过最好用的截图贴图工具!
- 无线AP,无线中继器与无线路由
- 高琪飞机项目飞机爆炸图片_爆炸式的工作机会和多项目同步
- Modern Standby 调试的准备
- Outlook 与企业微信邮箱通讯录同步
- 共阳和共阴数码管详细段码(带图)
热门文章
- 6.22(js-->案例应用)
- 未来教育计算机二级收藏的题在哪看,2016年计算机二级office高级应用章节练习题(1)...
- [JVM]了断局: 局部变量表和操作数栈实例分析
- python中特殊文件和特殊函数
- 维克森林大学计算机专业,维克森林大学计算机专业
- Data too long for column 'name' at row 1
- c语言如何不用数组排序,c语言实现数组排序.docx
- 修复setup violation的方法总结
- c语言第十五周答案,C语言考前练习试题及答案
- 小程序banner广告和激励广告