本次内容,是由T-SQL语句来实现的,我们主要掌握数据库单表查询的方法以及实现的语句内容,同时在掌握聚合函数、排序、分组的方法。
首先来了解SELECT子句的用法,其基本框架如下:
SELECT <列名> /*显示哪些列*/
FROM <表名> /*从哪个表进行操作,即指定表*/
WHERE <条件> /*根据什么条件在指定表中进行检索*/
1、SELECT子句可以投影指定的列也可以投影全部列,当投影多个列时,在各列名中用逗号“,”隔开。
SELECT 列名1,列名2,列名3,...
FROM <表名>
WHERE <条件>
2、若要投影该表的全部列时,即没有必要将各列名一一列出,这样就过于繁琐,只需在SELECT子句后面加上星号“ * ”,就可以代表投影该表的全部列。
SELECT * /*这里的*号就代表投影了所有列*/
FROM <表名>
WHERE <条件>
当查询出一个所得到的结果后,我们自己知道所查的是什么,但是给别人就不能立即的理解查询的结果的含义,这时候就要用到AS子句来改变查询结果中显示的列标题,只需在列名后面加上所要改变的列表题名即可,其语法格式如下:
SELECT 列名1 AS '学号',列名2 AS '姓名',列名3 AS '性别',...
注:这里其实AS可以省略,但为了增加可读性,还是建议不省略。
例、在数据库Store中,查询student表中的studentID、name、sex、age、address,并将其结果中各列的标题分别改为学生的学号、姓名、性别、年龄和住址。
USE Store
SELECT studentID AS '学号',name AS '姓名',sex AS '性别',age AS '年龄',address AS '地址'
FROM student
使用SELECT子句时,有时候需要只列出查询结果的前几行数据,就要用到TOP谓词进行对查询结果集的限定,即使用TOP n [PERCENT],其语法格式如下:
TOP n [ 数字 ] [ 百分数% ]
例如,若只显示查询结果的前2行,即SELECT TOP 2…
若要返回查询结果的前10%行,即SELECT TOP 10 PERCENT…
当要将所查询的结果插入到一个新表当中,这时候就要用到INTO子句,所创建新表的结构由SELECT子句所选择的列来决定,且新表中的记录由SELECT子句的查询结构决定,若SELECT子句查询的结果为空,则创建的是一个只要结构但无记录的空表。INTO子句语法格式如下:
INTO <新表名>
例、通过数据库Store,由school表创建class1表,其中包括studentID、name、age、sex。
USE Store
SELECT studentID,name,age,sex INTO class1
FROM school
当查询的结果集中有重复行时,可以使用DISTINCT关键字来去除重复行。语句格式如下:
SELECT DISTINCT 列名1,列名2,...
例、通过数据库Store,查询school表中的max_grade列,并消除结果中的重复行。
USE Store
SELECT DISTINCT max_grade
FROM school
WHERE子句用于指定查询条件,此语句位于FROM子句后面,其语句格式如下:
WHERE <查询条件>
表达式比较,即使用比较运算符来比较两个表达式值。
例、通过数据库School,查询class表中的Total points、Classnumber列学生总成绩在400分至500分之间且为1班的学生总成绩名单。
USE School
SELECT Total points,Classnumber
FROM class
WHERE Total points>=400 AND Total points<=500
AND Classnumber='1'
例、通过数据库YGGZ,查询在1980-1-1到1995-12-31日之间出生的员工名单及出生日期。
sql语句:
USE YGGZ
SELECT *
FROM Employee
WHERE Birthday>='1980-1-1'AND Birthday<='1995-12-31'
范围比较用于查找字段在或者不在指定范围的行。
例、通过数据库School,查询class表中的学生姓名name列为陈小小、李文的成绩名单。
USE School
SELECT *
FROM class
WHERE name IN('陈小小','李文')
字符匹配使用LIKE谓词,即查找列值宇匹配串相互匹配的行,匹配串可以是一个完整的字符串,也可以含有通配符,这种查询相当于模糊查询,通配符分为两种:
①%:代表0或者多个字符
②_:代表一个字符
例1、通过数据库YGGZ,根据员工表查询所有姓“张”的员工的信息。
sql语句:
USE YGGZ
SELECT *
FROM Emplyee
WHERE EmpName LIKE '张%'
语句执行结果:
例2、通过数据库YGGZ,根据员工表查询姓名中含有“业”的员工的信息。
sql语句:
USE YGGZ
SELECT *
FROM Employee
WHERE EmpName LIKE '%业%'
判断一个表达式的值是否为空值时,使用 IS NULL 关键字,语法格式如下:
<表达式> IS [NOT] NULL
例、通过数据库School,查询class表中的学生地址address为空值的学生信息。
USE School
SELECT *
FROM class
WHERE address IS NULL
当要使查询的结果有序输出,需要使用ORDER BY 子句,可以安装一个或者多个字段的值进行排序,语法格式如下:
ORDER BY <排序表达式(列名、表达式或者正整数)> [ASC] [DESC]
用 ACS 表示按正序排序(即:从小到大排序)—升序排列
用 DESC 表示按倒序排序(即:从大到小排序) —降序排列
例1、通过数据库YGGZ,根据员工表查询1980年之前出生的员工名单,并按照出生日期进行降序排列。
sql语句:
USE YGGZ
SELECT *
FROM Employee
WHERE Birthday<'1980'
ORDER BY Birthday DESC
AVG( ) :返回集合的平均值。
COUNT( ) :返回集合中的项目数。
MAX( ) :返回集合中的最大值。
MIN( ):返回集合中的最小值。
SUM( ):返回集合中所有或不同值的总和。
([ALL| DISTINCT] 表达式)
其中ALL是默认值,DISTINCT表示去掉重复值,表达式即进行聚合函数运算的表达式。
例1、通过数据库YGGZ,根据工资表查询其所有员工的平均工资值。
sql语句:
USE YGGZ
SELECT AVG(Wages) AS '平均工资'
FROM Salay
语句执行结果:
例2、通过数据库YGGZ,根据工资表查询发放日期为2020-5-10的发放工资的员工人数。
sql语句:
USE YGGZ
SELECT COUNT(*) AS '人数'
FROM Salay
WHERE PayDate='2020-5-10'
GROUP BY 子句用于将查询结果按指定列进行分组。语句格式:
GROUP BY <列名>
例、通过数据库YGGZ,根据员工表统计男、女员工各自的人数。
sql语句:
USE YGGZ
SELECT COUNT(*) AS '人数'
FROM Employee
GROUP BY Sex
HAVING 子句用于对分组后的查询结果集按指定条件进行进一步筛选,并输出满足指定条件的分组。语句格式:
HAVING <筛选条件>
例、通过数据库YGGZ,根据工资表查询平均工资大于6000的员工工号及平均工资。
sql语句:
USE YGGZ
SELECT EmpNo AS '员工人数',AVG(Wages) AS '平均工资'
FROM Salay
GROUP BY EmpNo
HAVING AVG(Wages)>6000
以上就是本次数据库原理与应用(SQL Server)教程简单数据查询的全部内容,感谢您的阅读和支持,篇幅较长,若有表述以及代码中的不当之处,望指出!您的指出和建议能给作者带来很大的动力!!!