使用SQL语句实现数据查询操作
1. 数据查询
本次实验环境基于DMS数据库实验室的RDS-SQL Server,前往并登录DMS数据库实验室。
SELECT语句是T-SQL从数据库中获取信息的一个基本语句。该语句可以实现从一个或多个数据库的一个或多个表中查询信息,并将结果显示为另外一个表(结果集)的形式。
- SELECT语句的基本语法格式:
SELECT <select_list>
[FROM <table_source>]
[WHERE <source_condition>]
[GROUP BY <group_by_expression>]
[HAVING <search_condition>]
[ORDER BY <order_expression>[ASC|DESC]]
- 其中的参数说明:
- select_list:指明要查询的选择列表。列表可以包含若干个列名或表达式,列名或表达式之间用逗号隔开,用来指示应该返回哪些数据。表达式可以是列名、函数、常数的列表。
- table_source:指明查询的表或视图的名称。
- source_condition:指明查询要满足的条件。
- group_by_expression:根据指定列中的值对结果集进行分组。
- search_condition:对 FROM、WHERE 或 GROUP BY 子句中创建的中间结果集进行行的筛选,通常与 GROUP BY 子句一起使用。
- 投影查询。
1.1 使用SELECT语句可以选择查询表或视图中的一列或者多列,当选择多列时,列之间要用“,”分隔。
示例:在SQL Console页签,输入如下查询学生信息表student中全体学生的学号、姓名和年龄的SQL语句,单击执行,然后在执行结果中可以查看到查询结果。
SELECT SNO,SN,Sex FROM student
1.2 如果想从FROM子句指定的表或视图中查询返回所有的列,可以在选择列表中选择星号*,而不需要列出表或视图中所有的列。
示例:在SQL Console页签,输入如下查询学生信息表student中的所有信息的SQL语句,即所有的行和所有的列,单击执行,然后在执行结果中可以查看到查询结果。
SELECT * FROM student
1.3 在SELECT语句的选择列表中使用DISTINCT关键字,可以从结果集中消除指定列的值重复的行。
示例:在SQL Console页签,输入如下查询学生表students中学生的专业的SQL语句,消除重复的行,单击执行,然后在执行结果中可以查看到查询结果。
SELECT DISTINCT DNO FROM student
1.4 使用TOP关键字,可以从查询结果集中只返回前n行。如果指定了PERCENT关键字,则返回前n%行,此时n必须介于 0~100。如果查询包括ORDER BY子句,则首先对行进行排序,然后从排序后的结果集中返回前n行或n%行。
示例:在SQL Console页签,输入如下从学生信息表student中查询学生的所有信息的SQL语句,要求只返回前3行数据,单击执行,然后在执行结果中可以查看到查询结果。
SELECT TOP 3 * FROM students
- 选择查询。
选择查询就是指定查询条件,然后在表中显示满足查询条件的记录。为了选择表中满足查询条件的某些行,可以使用 SQL 命令中的WHERE子句。WHERE子句后跟查询的逻辑表达式,通常情况下,必须定义一个或多个条件限制检索选择的数据行,结果集将返回表达式为真的数据行。在WHERE子句中,查询条件表达式可以包含比较运算符和逻辑运算符。常用的查询条件如下。
(1)比较,包括<、<=、!<、>、>=、>!、=、!=、<>等。
(2)范围,包括 BETWEEN AND和NOT BETWEEN AND。
(3)集合,包括IN和NOT IN等。
(4)字符匹配,包括LIKE和NOT LIKE。
(5)未知判断,包括IS NULL和IS NOT NULL。
(6)组合条件,包括AND、OR、NOT等。
2.1 比较。
示例:在SQL Console页签,输入如下查询学生表students中班级为2的学生记录的SQL语句,单击执行,然后在执行确认对话框中,单击直接执行。
SELECT * FROM students WHERE class='2'
2.2 范围。
在WHERE子句的查询筛选条件表达式中,可以使用BETWEEN…AND运算符查询某一指定范围的记录。NOT BETWEEN…AND检索不在某一范围内的信息。
示例:在SQL Console页签,输入如下查询学生表students中在1到3班的所有学生信息的SQL语句,单击执行,然后在执行确认对话框中,单击直接执行。
SELECT * FROM students WHERE grade BETWEEN '3' AND '5'
2.3 字符匹配。
LIKE关键字用于查询与指定的某些字符串表达式模糊匹配的数据行。LIKE后的表达式被定义为字符串,必须用半角单引号括起来,字符串中可以使用以下四种通配符。
(1)%:匹配任意类型和长度的字符串。例如,LIKE'张%'匹配以“张”开头的字符串。LIKE'%应用%'匹配的是前后字符串为任意,中间含有“应用”两个字的字符串。
(2)_(下画线):可以匹配任何单个字符。例如,LIKE'_伟%'匹配的是第二个字符为“伟”的任何字符串。
(3)[]:匹配任何在范围或集合之内的单个字符。例如,[a-i]匹配的是a、b、c、d、e、f、g、h、i 单个字符。
(4)[^]:匹配不在指定范围之内或集合的任何单个字符。例如,LIKE'[^a-c]'匹配的是不为a、b、c 的所有字符串。
示例:在SQL Console页签,输入如下查询学生表students中叫“Jude”的学生的信息的SQL语句,单击执行,然后在执行确认对话框中,单击直接执行。
SELECT *FROM students WHERE name LIKE 'Jude'
2.4 组合条件。
当 WHERE 子句中有多个查询条件时,可以使用逻辑运算符 AND、OR和NOT连接多个查询条件,形成复杂的逻辑表达式。其优先级由高到低为NOT、AND、OR,但可用括号改变优先级。
示例:在SQL Console页签,输入如下查询学生表students中年级为3并且班级为2的学生记录的SQL语句,单击执行,然后在执行确认对话框中,单击直接执行。
SELECT * FROM students WHERE grade='3' AND class='2'
3.排序查询。
通常情况下,SELECT语句可以返回的查询结果集的记录是按表中记录的物理顺序排列的。ORDER BY子句可以按照升序(ASC)或降序(DESC)排列各行或各列,如果省略,则系统默认为升序。需要注意的是,ORDER BY子句必须是SQL命令的最后一个语句,ORDER BY子句中不能使用NTEXT、TEXT和IMAGE列。 示例:在SQL Console页签,输入如下查询学生表students中班级为1的学生id和姓名,并按照id号降序排列的SQL语句,单击执行,然后在执行确认对话框中,单击直接执行。
SELECT id,name FROM students WHERE class='1' ORDER BY id DESC
查询的方式方法还有很多,可结合兴趣自行开展实验。
2. 实验作业
实验要求:
使用SQL语句对的student_info、curriculum、grade表中数据进行查询操作,各表数据如表1-表3所示。
- 表1 student_info表的数据
学号 |
姓名 |
性别 |
出生日期 |
家族住址 |
0001 |
张青平 |
男 |
2000-10-01 |
衡阳市东风路77号 |
0002 |
刘东阳 |
男 |
1998-12-09 |
东阳市八一北路33号 |
0003 |
马晓夏 |
女 |
1995-05-12 |
长岭市五一路763号 |
0004 |
钱忠理 |
男 |
1994-09-23 |
滨海市洞庭大道279号 |
0005 |
孙海洋 |
男 |
1995-04-03 |
长岛市解放路27号 |
0006 |
郭小斌 |
男 |
1997-11-10 |
南山市红旗路113号 |
0007 |
肖月玲 |
女 |
1996-12-07 |
东方市南京路11号 |
0008 |
张玲珑 |
女 |
1997-12-24 |
滨江市新建路97号 |
- 表2 curriculum表的数据
课程编号 |
课程名称 |
学分 |
0001 |
计算机应用基础 |
2 |
0002 |
C语言程序设计 |
2 |
0003 |
数据库原理及应用 |
2 |
0004 |
英语 |
4 |
0005 |
高等数学 |
4 |
- 表3 grade表的数据
学号 |
课程编号 |
分数 |
0001 |
0001 |
80 |
0001 |
0002 |
91 |
0001 |
0003 |
88 |
0001 |
0004 |
85 |
0001 |
0005 |
77 |
0002 |
0001 |
73 |
0002 |
0002 |
68 |
0002 |
0003 |
80 |
0002 |
0004 |
79 |
0002 |
0005 |
73 |
0003 |
0001 |
84 |
0003 |
0002 |
92 |
0003 |
0003 |
81 |
0003 |
0004 |
82 |
0003 |
0005 |
75 |
- 使用SELECT语句进行基本查询。
(1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。
(2)查询student_info表学号为 0002的学生的姓名和家庭住址。
(3)查询student_info表所有出生日期在95年以后的女同学的姓名和出生日期。
- 使用select语句进行条件查询。
(1)在grade表中查询分数在70-80范围内的学生的学号、课程编号和成绩。
(2)在grade表中查询课程编号为0002的学生的平均成绩。
(3)在grade表中查询选修课程编号为0003的人数和该课程有成绩的人数。
(4)查询student_info的姓名和出生日期,查询结果按出生日期从大到小排序。
(5)查询所有姓名“张”的学生的学号和姓名。
实验链接:https://developer.aliyun.com/adc/scenario/66693999836f49cea69e974cfb31f8be