SQL基础复习03--数据查询SQL语句(单表查询)参考教材《数据库系统:原理、设计与编程(MOOC版)》,陆鑫张凤荔陈安龙
终于到查询这⼀块了。
3.4 数据查询SQL语句
3.4.1 查询语句基本结构
SELECT [ALL/DISTINCT] <⽬标列>[,<⽬标列>...]
[INTO <;新表>]
FROM <;表名>[,<;表名>...]
[WHERE <;条件表达式>]
[GROUP BY <;列名> [HAVING <;条件表达式>]
ORDER BY <;列名> [ASC/DESC]];
SELECT语句由多种字句组成:
1. SELECT⼦句,⽤来指明从数据库表中需要查询的⽬标列。ALL是默认操作,获取所有满⾜条件的数据⾏;DISTINCT⽤来去掉结果集中的重复数据⾏;
<⽬标列>为被查询表的指定列名,可以有多个。
2. INTO⼦句,⽤来将被查询的结果集数据插⼊新表。
3. FROM⼦句,⽤来指定被查询的数据来⾃哪个表或哪些表。多表⽤逗号分隔。
4. WHERE⼦句,⽤来给出查询的检索条件,多个条件之间可以⽤AND、OR进⾏连接。
5. GROUP BY⼦句,⽤来对查询结果进⾏分组,并进⾏分组统计等处理,在分组中,还可以使⽤HAVING关键词定义分组条件。
6. ORDER BY⼦句,⽤来对查询结果集进⾏排序。ASC当然是升序,DESC是降序。默认为ASC。
从SELECT语句的操作结果看,<⽬标列>实现对关系表的投影操作,WHERE <;条件表达式>实现对关系表的元组选择操作。
当前Student表的全部数据:
下⾯将会对该表进⾏⼀系列查询操作
3.4.2 从单表读取指定列
SELECT <⽬标列>[,<⽬标列>...]
FROM <;表名>;
例3-19
1. 从Student表中读取学⽣的学号、姓名、专业三列数据:
SELECT StudentID, StudentName, Major
FROM Student;
GO
2. 从Student表中查询所有列数据:
SELECT *
FROM Student;
GO
3. 只查Major数据:
SELECT Major
FROM Student;
GO
倘若只想查出不同的专业名称,可以消除重复⾏,⽤DISTINCT:
SELECT DISTINCT Major
FROM Student;
GO
3.4.3 从单表读取指定⾏
SELECT *
FROM <;表名>
WHERE <;条件表达式>;
例3-20
从Student表中读取专业为“软件⼯程”,性别为“男”的学⽣数据:
SELECT *
FROM Student
WHERE Major='软件⼯程' AND StudentGender='男';
GO
3.4.4 从单表读取指定⾏和列
SELECT <⽬标列> [,<⽬标列>...]
FROM <;表名>
WHERE <;条件表达式>;
例3-21
从Student表中读取专业为“软件⼯程”,性别为“男”的学⽣的学号、姓名、性别、专业四列的数据:
SELECT StudentID, StudentName, StudentGender, Major
FROM Student
WHERE Major='软件⼯程' AND StudentGender='男';
GO
3.4.5 WHERE⼦句条件
在WHERE⼦句条件中,可以⽤AND关键词来限定列值范围,还可以⽤关键字LIKE与通配符来限定查询范围,NOT LIKE⽤于给出不在范围的条件。SQL中常⽤通配符:
下划线(_):⽤于代表⼀个未指定的字符。
百分号(%):⽤于代表⼀个或多个未指定的字符。
例3-22
从Student表中查询出⽣⽇期在2000-01-01到2000-12-30的学⽣数据:
SELECT *
FROM Student
WHERE BirthDay BETWEEN '2000-01-01' AND '2000-12-30';
GO
还可以使⽤⽐较运算符完成相同操作:
SELECT *
FROM Student
WHERE BirthDay >= '2000-01-01' AND BirthDay <= '2000-12-30';
GO
在SQL中,除了'>='和'<='外,还有等于(=)、⼤于(>)、⼩于(<)、不等于(<>)等运算符。
例3-23
从Student表中查询姓⽒为‘林’的学⽣数据:
SELECT *
FROM Student
WHERE StudentName LIKE '林%';
GO
查询专业名字中不带‘计算机’的学⽣数据:
SELECT *
FROM Student
WHERE Major NOT LIKE '计算机%';
GO
3.4.6 查询结果排序
查询的返回结果⼀般是按物理表中存放的顺序。可以在查询语句中使⽤ORDER BY关键字进⾏排序。
例3-25
从Student表中按学⽣出⽣⽇期升序(ASC,默认)输出学⽣数据:
SELECT *
FROM Student
ORDER BY BirthDay;
GO
降序排序(DESC):
SELECT *
FROM Student
ORDER BY BirthDay DESC;
GO
以上是只给出单列进⾏SQL查询结果集排序,还可以同时按多列进⾏SQL查询结果集排序输出。
例3-26
从Student表中查询学⽣数据,先按专业名升序排列,再按出⽣⽇期降序排列:
SELECT *
FROM Student
ORDER BY Major ASC, BirthDay DESC;
GO
3.4.7 内置函数的使⽤
SQL中,可以使⽤函数⽅式对SELECT查询结果集数据进⾏处理。这些函数可以是DBMS所提供的内置函数,也可以使⽤户根据需要⾃定义的函数。典型的DBMS提供的内置函数主要有:聚合函数、算术函数、字符串函数、⽇期时间函数、数据类型转换函数等。
1. 聚合函数
⼜被称为统计函数,对表中的⼀些数据列进⾏计算并返回⼀个结果数值的函数。常⽤聚合函数如下:
注意,上表为PostgreSQL适⽤的聚合函数,在SQL Server中略有区别。
SQL Server的聚合函数:
例3-27
统计Student表中学⽣⼈数,在SELECT语句中使⽤COUNT()函数来计算:
SELECT COUNT(*)
FROM Student;
GO
虽然查出了有10名同学,但结果集没有列名。可以⽤AS关键字对计算结果命名⼀个列名。
SELECT COUNT(*) AS 学⽣⼈数
FROM Student;
GO
以上查询语句使⽤COUNT()函数统计了数据表中所有元组的函数。使⽤COUNT()还可以按指定列统计满⾜条件的元组⾏数。
例3-28
统计Student表中的学⽣专业数⽬:
SELECT COUNT(Major) AS 学⽣专业数
FROM Student;
GO
显然上⾯的结果不是我们期待的结果,原因是查询统计中包含了若⼲相同专业的学⽣⾏,向同级不同
专业数⽬,应当使⽤DISTINCT关键字消除结果集中的重复⾏,应当先DISTINCT再COUNT(),所以DISTINCT应该在COUNT()的括号内。
SELECT COUNT(DISTINCT Major) AS 学⽣专业数
FROM Student;
GO
例3-19
出Student表中年龄最⼤的和年龄最⼩的学⽣的出⽣⽇期:
SELECT MIN(BirthDay) AS 最⼤年龄出⽣⽇期, MAX(BirthDay) AS 最⼩年龄出⽣⽇期
FROM Student;
GO
2. 算术/数学函数
可使⽤算术/数学函数对数值型列进⾏算术运算操作。如果计算有效,返回⼀个计算结果值,否则返回NULL。常⽤算术/数学函数如下:
注意,上表为PostgreSQL适⽤的算数/数学函数,在SQL Server中略有区别。
SQL Server的算数/数学函数:
已有学⽣成绩表如下:
常用的sql查询语句有哪些例3-30
当需要对成绩数据进⾏四舍五⼊处理时,可以使⽤ROUND()算术函数处理:
SELECT StudentID, StudentName, CourseName, ROUND(Grade, 0) AS Grade
FROM Grade;
GO
其中ROUND(Grade, 0)中的0应该是精度,四舍五⼊时精确到⼩数点后⼏位。
3. 字符串函数
可⽤字符串函数对字符串表达式进⾏处理,这类函数输⼊的数据类型可以是字符串和数值类型,但输出为字符串类型。常⽤的字符串函数如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。