




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQLServer数据库实践课程介绍24学时、1.5学分
考查课
教材:《SQLServer数据库实践教程》
中国铁道出版社2024.9出版上机软件:SQLServer2008
MOOC:e会学MOOC《SQLServer数据库实践》(/)博思平台MOOC:数据库系统(安信工)智慧教学工具:云班课
+云教材《SQLServer数据库实践》ISBN978-7-113-30940-4记录平时成绩课程考核分值考核/评价细则100
出勤10%按照百分制,缺勤一次扣10分三次缺勤,该项考核分为0分测验30%课后自测题+课堂测验成绩作业60%12个实验报告,当堂交问卷、投票等其他活动考查课,零基础入门课程学习方法数据库无处不在可以登录教务系统多次查询课表、查询自己的成绩。你的个人账号、密码、收货地址、购物信息等存在哪里?动态网站的工作过程(以淘宝网为例)(客户机)浏览器进程Web应用服务器进程LAN或WANWeb服务器进程Web服务器Web应用服务器/(浏览淘宝网为例)数据库服务器进程数据库服务器ODBC数据库数据库的重要地位数据库技术是所有信息系统的核心和基础。chartGPT、讯飞星火大模型等AI模型都需要大量数据不管什么专业的学生,
都有必要学学数据库知识数据库的定义数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合。数据库中存储的基本对象是数据(Data)数据库语言:SQL语言
(StructuredQueryLanguage结构化查询语言)操作练习实验1
SSMS图形界面创建数据库和学生表快速了解数据库实验1SSMS图形界面创建数据库和学生表创建数据库ST创建学生表SSMS简称SSMS操作演示课后作业完成云教材学习任务。SQLServer数据库实践14十二月2024回顾数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合。数据库中存储的基本对象是数据(Data)数据库的数据结构是二维表格
实验1
SSMS图形界面创建数据库和学生表
(已完成)数据类型说明char(n)固定长度字符型,长度为n个字节,最多可存n个字符或n/2个汉字,n的取值范围为1~8000,默认长度1varchar(n)可变长度字符型,长度为n个字节,n的取值范围为1~8000,默认长度1nchar(n)固定长度Unicode字符型,Unicode字符集对字符和汉字都采用双字节存储,最多可存n个字符或n个汉字,n的取值范围为1~4000,默认长度1nvarchar(n)可变长度Unicode字符型,n值在1~4000之间,默认长度1text大量长度的字符型,最多达到231—1(2147483647)字节ntext大量长度的Unicode字符型,最多可存(231—1)∕2=(1073741823)个字符或汉字常用数据类型(附录B)附表B-1字符类型常用数据类型(附录B)附表B-2数字类型数据类型说明bigint-263(-1.8E19)~263-1(1.8E19)的整型数,存储长度为8个字节int-231(-2147483648)~231-1(2147483647)的整型数,存储长度为4个字节smallint-215(-32768)~215-1(32767)的整型数,存储长度为两个字节tinyint0~255的整型数,存储长度为1个字节float浮点型,从–1.79E+308到1.79E+308,存储长度为8个字节real浮点精度型,从–3.40E+38到3.40E+38,存储长度为4个字节bit整数型,值为1或0,存储长度为1位numeric(p,s)固定精度和小数的数字型,取值范围从-1038+1到1038–1。p是总的数字位数,取值范围为1~38。s是小数位数,取值范围从0到p。numeric与decimal数据类型在功能上等效decimal(p,s)固定精度和小数的数字型,取值范围从-1038+1~1038–1。p是总的数字位数,取值范围为1~38。s是小数位数,取值范围从0到p。存储长度为19个字节常用数据类型(附录B)附表B-3日期类型数据类型说明精度date日期型,4个字节,无时间,1753年1月1日到9999年12月31日,SQLServer2008版新增的数据类型1天datetime日期时间型,8个字节,1753年1月1日到9999年12月31日3.33毫秒smalldatetime日期时间型,4个字节,1900年1月1日到2079年6月6日1分钟time时间型,不存日期,只存时分秒,SQLServer2008版新增的数据类型1毫秒约束关系模型有三类完整性约束实体完整性(通过主键实现)参照完整性(通过外键实现)用户自定义完整性(检查约束、非空约束、唯一约束、默认值等)
今日内容:外键、联合主键操作练习实验2SSMS图形界面管理数据库和课程表、成绩表实验2SSMS图形界面管理数据库和课程表、成绩表创建或附加ST数据库创建表简称SSMS操作演示14十二月2024SQLServer数据库实践对数据库有了初步认识在图形界面初步认识了数据库创建数据库创建表录入数据现在开始学习使用代码操作数据库数据库嵌在程序中使用(客户机)请求网页浏览器进程Web应用服务器进程LAN或WANWeb服务器进程Web服务器Web应用服务器/(浏览淘宝网为例)数据库服务器进程数据库服务器ODBC①⑨返回页面②发送到Web服务器③转发动态页面请求④连接数据库驱动程序⑤执行查询操作⑥返回查询结果到数据库驱动程序⑦返回结果到Web应用服务器⑧生成并将动态数据插入页面,返回给Web服务器⑩接受网页,解释并显示网页内容数据库SQL语言SQL(StructuredQueryLanguage)结构化查询语言,是关系数据库的标准语言SQL是一个通用的、功能极强的关系数据库语言层次模型树形结构网状模型网状结构层次数据库、网状数据库已经淘汰目前使用的基本都是关系数据库使用关系模型,数据结构是二维表SQL结构化查询语言,NotonlyQuery
SQL语言数据查询数据定义数据操纵(增、删、改)数据安全控制事务处理SQL语言一般分四类数据定义语言(DDL,DataDefinitionLanguage)数据操纵语言(DML,DataManipulationLanguage)数据查询语言(DQL,DataQuery
Language)数据控制语言(DCL,DataControlLanguage)(+事务)九个主要动词数据定义操作对象操作方式数据库createdatabasealterdatabasedropdatabase表createtablealtertabledroptable视图createviewalterviewdropview
数据定义
三个动词数据定义语言需要两个关键字有特定含义的单词create创建
alter修改drop删除创建数据库语法:CREATEDATABASE<数据库名>[[ON[PRIMARY]]([NAME=<数据文件逻辑文件名>][,FILENAME=<'数据文件物理文件名'>][,SIZE=<数据文件初始大小>],[,MAXSIZE=<数据文件最大大小>][,FILEGROWTH<数据文件增长比例>][,…n])]
[LOGON([NAME=<日志文件逻辑文件名>][,FILENAME=<'日志文件物理文件名'>][,SIZE=<日志文件初始大小>],[,MAXSIZE=<日志文件最大大小>][,FILEGROWTH<日志文件增长比例>][,…n])]可选可选提示:
语法中的方括号[]表示可选项,非必需项创建数据库【例题1】指定数据文件和日志文件属性创建数据库语句:CREATEDATABASEMyDBON(NAME=MyDB_data,
--数据文件逻辑名,半角逗号分隔FILENAME='C:\MyDB_data.mdf',--数据文件物理名,半角引号SIZE=10MB,
--数据文件初始大小MAXSIZE=UNLIMITED,
--数据文件最大设置FILEGROWTH=10%)
--数据文件增长方式,注意后面没有逗号LOGON(NAME=MyDB_log,
--日志文件逻辑名
FILENAME='C:\MyDB_log.ldf',--日志文件物理名SIZE=3MB,
--日志文件初始大小MAXSIZE=5MB,
--日志文件最大设置
FILEGROWTH=1MB)
--日志文件增长方式,注意后面没有逗号操作演示--后面是单行注释,不执行
创建数据库
CREATEDATABASEMyDBON(NAME=MyDB_data,FILENAME='C:\MyDB_data.mdf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)
LOGON(NAME=MyDB_log,FILENAME='C:\MyDB_log.ldf',SIZE=3MB,MAXSIZE=5MB,
FILEGROWTH=1MB)
逻辑名NAME物理名FILENAME修改数据库
语法ALTERDATABASE<数据库名>{ADDFILE<数据文件参数>[,...n]|ADDLOGFILE<日志文件参数>[,...n]|REMOVEFILE数据文件逻辑名称|ADDFILEGROUP文件组名|REMOVEFILEGROUP文件组名|MODIFYFILE<数据文件参数> |MODIFYNAME=新数据库名 |SET<参数>/*数据库参数设置*/}/**/中间是多行注释,不执行ALTERDATABASEMyDBADDFILE(NAME=MyDB_data2,FILENAME='C:\MyDB_data2.ndf',SIZE=10MB,MAXSIZE=2GB,FILEGROWTH=10%)
修改数据库【例题2】增加数据文件次要数据文件扩展名.NDF
修改数据库【例题3】修改数据文件的增长方式ALTERDATABASE
MyDBMODIFYFILE(NAME=MyDB_data2,FILEGROWTH=15%)删除数据库语法:DROPDATABASE<数据库名>提示:会丢失数据,慎重使用删除数据库【例题4】删除
MyDB数据库语句:DROPDATABASE
MyDB打开数据库
语法:
USE<数据库名>
注意:
USE
DATABASE<数据库名>
×
CREATEDATABASE<数据库名>
√
ALTERDATABASE<数据库名>
√
DROPDATABASE<数据库名>
√
CREATETABLE<表名>
CREATEVIEW<视图名>打开数据库创建表
语法CREATETABLE<表名>(<列名><数据类型>[<列级完整性约束>][,<列名><数据类型>[<列级完整性约束>]]…[,<表级完整性约束>]);问题:数据类型都有哪些?
完整性约束有哪些?SQLServer中常用数据类型字符类型数据类型说明char[(n)]固定长度字符型,n的范围:1~8000,默认1字节varchar[(n)]可变长字符型,n的范围:1~8000,默认1字节nchar[(n)]固定长度Unicode字符型,每个字符都占2个字节,n的范围:1~4000,默认1字节nvarchar[(n)]可变长度Unicode字符型,每个字符都占2个字节,n的范围:1~4000之间,默认1字节text大长度字符型,最多231-1(2147483647)字节ntext大长度Unicode字符数据,最多(231-1)∕2(1073741823)个字符SQLServer中常用数据类型数字类型数据类型说明bigint长整型,8个字节,-263~263-1int整型,4个字节,-231~231-1smallint短整型2个字节,-215~215-1tinyint存储长度为1个字节无符号整型,0~255float浮点型,8个字节,–1.79E+308~1.79E+308real浮点型,4个字节,–3.40E+38~3.40E+38bit二进制整数,1位值,为1或0numeric(p,s)固定精度和小数浮点型,取值范围-1038+1~1038–1,p指定精度,取值范围从1~38。s指小数位数,取值范围从0~pdecimal(p,s)decimal与numeric数据类型在功能上等效。SQLServer中常用数据类型日期类型数据类型说明精度date日期型,无时间,4个字节,1753年1月1日~9999年12月31日1天datetime日期时间型,8个字节,1753年1月1日~9999年12月31日3.33毫秒smalldatetime日期时间型,4个字节,1900年1月1日~2079年6月6日1分钟time时间型,不存日期,只存时分秒1毫秒SQLServer中常用数据类型货币类型数据类型说明money8个字节,-263(-922,337,203,685,477.5808)~263-1(922,337,203,685,477.5807)smallmoney4个字节,-231(-214,748.3648)~231-1(214,748.3647)完整性约束Primarykey:主键约束(唯一、不允许空)Foreignkeyreferences主键表(主键列):外键约束NULL|NOTNULL:非空约束(允许空|不允许空)Unique:唯一键约束Default(值):默认值约束Check(完整表达式):检查约束
完整性约束:保证数据完整性的一种方法,可以防止数据库中输入不符合语意规定、不正确的数据。创建基本表
语法CREATETABLE<表名>(<列名><数据类型>[<列级完整性约束>][,<列名><数据类型>[<列级完整性约束>]]…[,<表级完整性约束>]);
约束分为表级约束和列级约束
只涉及一列的约束可以定义列级,也可以定义表级。
涉及多列的约束必须定义为表级(如SC表联合主键)。提示:语法中的方括号[]表示可选项,非必需项创建基本表[例3]建立“学生”表Student,学号是主码。
CREATETABLEStudent(SnoINTNOTNULL
PRIMARYKEY,/*列级完整性约束*/
SnameVARCHAR(20),SsexCHAR(2),SageSMALLINT,SdeptVARCHAR(20))主键提示:数据库中不区分大小写创建基本表[例4]建立一个“课程”表CourseCREATETABLECourse(CnoINTNOTNULL
PRIMARYKEY,CnameVARCHAR(40)UNIQUE,/*唯一约束*/
CpnoINT, CcreditSMALLINT
);创建基本表[例5]建立一个“学生选课”表SCCREATETABLESC(SnoINTFOREIGNKEYREFERENCESStudent(Sno),CnoINT,GradeSMALLINT,
PRIMARYKEY(Sno,Cno),/*表级约束,联合主键,两个属性构成*/FOREIGNKEY(Cno)REFERENCESCourse(Cno)
/*表级约束,外键,Cno是外码,被参照表是Course*/);修改基本表
语法:ALTERTABLE<表名>[ADD<新列名><数据类型>[完整性约束]][ADD<表级完整性约束>][DROP[COLUMN]<列名>[CASCADE|RESTRICT]][DROPCONSTRAINT<完整性约束名>[CASCADE|RESTRICT]][ALTERCOLUMN<列名><数据类型>];修改基本表
ALTERTABLEStudentADDS_entranceDATE;不论基本表中原来是否已有数据,新增加的列一律为空值。
[例6]向Student表增加“入学时间”列,其数据类型为日期型。修改基本表[例7]将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTERTABLEStudentALTER
COLUMNSageINT;[例8]增加课程名称必须取唯一值的约束条件。
ALTERTABLECourseADDUNIQUE(Cname);删除基本表语法: DROPTABLE<表名>[例9]删除Student表。
DROPTABLEStudent
操作练习实验3数据定义
14十二月2024SQLServer数据库实践SQL语言一般分四类数据定义语言(DDL,DataDefinitionLanguage)数据操纵语言(DML,DataManipulationLanguage)数据查询语言(DQL,DataQuery
Language)数据控制语言(DCL,DataControlLanguage)(+事务)创建数据库
createdatabase创建表createtable插入数据两种插入数据方式①插入元组②插入子查询结果(后面再学)插入数据插入元组语法:
INSERTINTO<表名>[(<属性列1>[,<属性列2>…)] VALUES(<常量1>[,<常量2>]…)可以一次插入一个或多个元组插入数据
[例1]将学生信息(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。问题:语法没错,语句是否一定能执行成功?成功前提:不违反表中约束,符合域(属性的取值范围)的限制INSERTINTO
Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES
(200215128,'陈冬','男','IS',18);插入数据语法:
INSERTINTO<表名>[(<属性列1>[,<属性列2>…)]VALUES(<常量1>[,<常量2>]…)INSERTINTO
StudentVALUES
(200215128,'陈冬','男',18,'IS');提示:字符型和日期型常量加单引号,数值型直接写
插入数据INTO子句属性列的顺序可与表定义中的顺序不一致没有指定属性列:表示要插入的是一条完整的元组,且属性列与表中定义的顺序一致指定部分属性列:要插入的元组在其余属性列上取空值或者不允许为空但有默认值
VALUES子句提供的值必须与INTO子句匹配值的个数值的类型插入数据语法:
INSERTINTO<表名>[(<属性列1>[,<属性列2>…)]VALUES(<常量1>[,<常量2>]…)INSERTINTO
Student(Sno,Sname)VALUES
(200215128,'陈冬');插入数据
插入语句时会检查自动所插元组是否破坏表上已定义的完整性规则实体完整性参照完整性用户定义的完整性NOTNULL约束UNIQUE约束值域约束提示:语法没错,语句也不一定能执行成功。成功前提:不违反表中约束,符合域(属性的取值范围)的限制修改数据修改数据语法
UPDATE<表名>SET<列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件>];修改数据修改数据三种方式:
修改某一个元组的值
修改多个元组的值
带子查询的修改语句(后面学)修改数据修改一个元组的值[例2]将Student表中学号为200215121的学生年龄改为22岁
问题:如果没有WHERE子句会怎么样?
UPDATEStudentSETSage=22WHERESno=200215121;修改数据语法
UPDATE<表名>
SET<列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件>];修改数据修改多个元组的值[例3]将所有学生的年龄增加1岁
UPDATEStudentSETSage=Sage+1;修改数据语法
UPDATE<表名>
SET<列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件>];修改数据执行修改语句时会检查自动修改操作是否破坏表上已定义的完整性规则实体完整性参照完整性用户定义的完整性
NOTNULL约束
UNIQUE约束值域约束删除数据删除数据语法
DELETE[FROM]<表名>[WHERE<条件>];4.数据更新:删除数据三种删除数据的方式:删除某一个元组的值删除多个元组的值带子查询的删除语句(后面再学)删除数据[例4]删除学号为200215128的学生记录。问题1:如果没有WHERE子句会怎么样?问题2:语法没错是否一定能删除成功?
DELETEFROMStudentWHERESno=200215128;删除数据语法
DELETE[FROM]<表名>[WHERE<条件>];说明:删除语句时会受外键(参照完整性)制约操作练习实验4数据更新
14十二月2024SQLServer数据库实践SQL语言一般分四类数据定义语言(DDL,DataDefinitionLanguage)数据操纵语言(DML,DataManipulationLanguage)数据查询语言(DQL,DataQuery
Language)数据控制语言(DCL,DataControlLanguage)(+事务)√√√√数据查询语法SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]stuDB数据库三张表数据查询目录1、单表查询2、连接查询3、嵌套查询4、集合查询5、基于派生表的查询1、单表查询单表查询仅涉及一个表,又分为:选择表中的若干列选择表中的若干元组
ORDERBY排序子句聚集函数
GROUPBY分组子句①
选择表中的若干列【例题5-1】查询全体学生的姓名和民族。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]SELECTName,NationFROM
Student①
选择表中的若干列【例题5-2】查询全体学生的姓名、民族和性别。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]SELECTName,Nation,SexFROM
Student注意:列的顺序①
选择表中的若干列【例题5-3】查询全体学生的详细信息。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]SELECT
Sno,Name,Sex,Nation,Birthday
FROM
Student或者SELECT
*
FROM
Student习题1.查询所有课程的课程名和学分2.查询课程的所有信息查询语法SELECT
<输出列表>]…FROM数据源列表习题1.查询所有课程的课程名和学分
selectcname,creditfromcourse2.查询课程的所有信息查询语法SELECT
<输出列表>]…FROM数据源列表习题1.查询所有课程的课程名和学分
selectcname,creditfromcourse2.查询课程的所有信息
select*fromcourseselectCno,cname,hours,credit,Semesterfromcourse查询语法SELECT
<输出列表>]…FROM数据源列表①选择表中的若干列查询经过计算的值SELECT子句的<输出列表>可以为:算术表达式字符串常量函数列别名SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]①
选择表中的若干列【例题5-4】查询学生的姓名及年龄。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]SELECT
Name,YEAR(GETDATE())-YEAR(Birthday)
FROM
Student①
选择表中的若干列【例题5-4】查询学生的姓名及年龄。GETDATE()函数取系统当前日期YEAR()函数取日期中的年定义列别名有三种方法①别名=列名②列名as别名③列名别名SELECT
Name,YEAR(GETDATE())-YEAR(Birthday)
FROM
StudentSELECTName,nl=YEAR(GETDATE())-YEAR(Birthday)FROMStudentSELECTName,YEAR(GETDATE())-YEAR(Birthday)asnl
FROMStudentSELECTName,YEAR(GETDATE())-YEAR(Birthday)nl
FROMStudent例:SELECTname,birthday,YEAR(birthday)年,month(birthday)月,day(birthday)日FROMStudent常用日期函数
Getdate():返回服务器当前系统日期和时间
year(DATA):返回日期中的年
month(DATA):返回日期中的月
day(DATA):返回日期中的日②
选择表中的若干元组【例题5-5】查询学生分布在哪些民族
SELECTNationFROMStudent等价于:SELECTALLNationFROMStudent SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]②
选择表中的若干元组【例题5-5】查询学生分布在哪些民族
SELECTDISTINCTNationFROMStudent SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]说明:DISTINCT关键词,去掉查询结果中重复的行②
选择表中的若干元组【例题5-7】查询哪些学生是少数民族,显示学生姓名和民族。SELECTName,NationFROMStudentWHERENation<>'汉族'SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]WHERE
子句中常用的查询运算符查询条件谓词比较=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件(逻辑运算)AND,OR,NOT②
选择表中的若干元组【例题5-8】查询年龄在19~23岁(包括19和23岁)之间的学生的学号、姓名、出生日期。1:SELECTSno,Name,BirthdayFROMStudent
WHEREYEAR(GETDATE())-YEAR(Birthday)BETWEEN19AND232:SELECTSno,Name,BirthdayFROMStudent
WHEREYEAR(GETDATE())-YEAR(Birthday)>=19
ANDYEAR(GETDATE())-YEAR(Birthday)<=23操作练习实验4单表查询(一)1~5题
②
选择表中的若干元组【例题5-9】查询民族为“汉族”或者“满族”的学生详细信息。SELECT*FROMStudentWHERENationin('汉族','满族')或者SELECT*FROMStudentWHERENation='汉族'orNation='满族'②
选择表中的若干元组【例题5-10】查询哪些学生选课了还没有考试成绩,显示学号,课程号。SELECTSno,CnoFROMSCWHEREGradeisNULL判断空值不能用等号=②
选择表中的若干元组-模糊查询【例题5-11】查询哪些学生姓名中含有“南”字。SELECT*FROMStudentWHERENameLIKE'%南%'模糊查询通配符:%:任意长度_:单个字符②
选择表中的若干元组-模糊查询【例题5-13】找出所有姓“张”和姓“江”的员工信息。SELECT*FROMStudentWHERENameLIKE'[张,江]%'SELECT*FROMStudentWHEREsubstring(Name,1,1)IN('张','江')SELECT*FROMStudentWHEREleft(Name,1)IN('张','江')模糊查询通配符:%:任意长度_:单个字符常用字符串函数Left(字符表达式,整数):截取从左侧开始指定位数的子字符串Right(字符表达式,整数):截取从右侧开始指定位数的子字符串Substring(字符表达式,起始位置,n):从任意位置取子串,截取从起始位置开始的n个字符Ltrim(字符表达式):去掉字符表达式左侧(前面)的空格Rtrim(字符表达式):去掉字符表达式右侧(尾部)的空格操作练习实验4单表查询(一)
14十二月2024SQLServer数据库实践SQL语言一般分四类数据定义语言(DDL,DataDefinitionLanguage)数据操纵语言(DML,DataManipulationLanguage)数据查询语言(DQL,DataQuery
Language)数据控制语言(DCL,DataControlLanguage)(+事务)√√√√数据查询语法SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]stuDB数据库三张表数据查询目录1、单表查询2、连接查询3、嵌套查询4、集合查询5、基于派生表的查询1、单表查询单表查询仅涉及一个表,又分为:选择表中的若干列选择表中的若干元组
ORDERBY排序子句聚集函数
GROUPBY分组子句①
选择表中的若干列【例题5-1】查询全体学生的姓名和民族。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]SELECTName,NationFROM
Student①
选择表中的若干列【例题5-2】查询全体学生的姓名、民族和性别。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]SELECTName,Nation,SexFROM
Student注意:列的顺序①
选择表中的若干列【例题5-3】查询全体学生的详细信息。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]SELECT
Sno,Name,Sex,Nation,Birthday
FROM
Student或者SELECT
*
FROM
Student习题1.查询所有课程的课程名和学分2.查询课程的所有信息查询语法SELECT
<输出列表>]…FROM数据源列表习题1.查询所有课程的课程名和学分
selectcname,creditfromcourse2.查询课程的所有信息查询语法SELECT
<输出列表>]…FROM数据源列表习题1.查询所有课程的课程名和学分
selectcname,creditfromcourse2.查询课程的所有信息
select*fromcourseselectCno,cname,hours,credit,Semesterfromcourse查询语法SELECT
<输出列表>]…FROM数据源列表①选择表中的若干列查询经过计算的值SELECT子句的<输出列表>可以为:算术表达式字符串常量函数列别名SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]①
选择表中的若干列【例题5-4】查询学生的姓名及年龄。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]SELECT
Name,YEAR(GETDATE())-YEAR(Birthday)
FROM
Student①
选择表中的若干列【例题5-4】查询学生的姓名及年龄。GETDATE()函数取系统当前日期YEAR()函数取日期中的年定义列别名有三种方法①别名=列名②列名as别名③列名别名SELECT
Name,YEAR(GETDATE())-YEAR(Birthday)
FROM
StudentSELECTName,nl=YEAR(GETDATE())-YEAR(Birthday)FROMStudentSELECTName,YEAR(GETDATE())-YEAR(Birthday)asnl
FROMStudentSELECTName,YEAR(GETDATE())-YEAR(Birthday)nl
FROMStudent例:SELECTname,birthday,YEAR(birthday)年,month(birthday)月,day(birthday)日FROMStudent常用日期函数
Getdate():返回服务器当前系统日期和时间
year(DATA):返回日期中的年
month(DATA):返回日期中的月
day(DATA):返回日期中的日②
选择表中的若干元组【例题5-5】查询学生分布在哪些民族
SELECTNationFROMStudent等价于:SELECTALLNationFROMStudent SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]②
选择表中的若干元组【例题5-5】查询学生分布在哪些民族
SELECTDISTINCTNationFROMStudent SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]说明:DISTINCT关键词,去掉查询结果中重复的行②
选择表中的若干元组【例题5-7】查询哪些学生是少数民族,显示学生姓名和民族。SELECTName,NationFROMStudentWHERENation<>'汉族'SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]WHERE
子句中常用的查询运算符查询条件谓词比较=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件(逻辑运算)AND,OR,NOT②
选择表中的若干元组【例题5-8】查询年龄在19~23岁(包括19和23岁)之间的学生的学号、姓名、出生日期。1:SELECTSno,Name,BirthdayFROMStudent
WHEREYEAR(GETDATE())-YEAR(Birthday)BETWEEN19AND232:SELECTSno,Name,BirthdayFROMStudent
WHEREYEAR(GETDATE())-YEAR(Birthday)>=19
ANDYEAR(GETDATE())-YEAR(Birthday)<=23操作练习实验4单表查询(一)1~5题
②
选择表中的若干元组【例题5-9】查询民族为“汉族”或者“满族”的学生详细信息。SELECT*FROMStudentWHERENationin('汉族','满族')或者SELECT*FROMStudentWHERENation='汉族'orNation='满族'②
选择表中的若干元组【例题5-10】查询哪些学生选课了还没有考试成绩,显示学号,课程号。SELECTSno,CnoFROMSCWHEREGradeisNULL判断空值不能用等号=②
选择表中的若干元组-模糊查询【例题5-11】查询哪些学生姓名中含有“南”字。SELECT*FROMStudentWHERENameLIKE'%南%'模糊查询通配符:%:任意长度_:单个字符②
选择表中的若干元组-模糊查询【例题5-13】找出所有姓“张”和姓“江”的员工信息。SELECT*FROMStudentWHERENameLIKE'[张,江]%'SELECT*FROMStudentWHEREsubstring(Name,1,1)IN('张','江')SELECT*FROMStudentWHEREleft(Name,1)IN('张','江')模糊查询通配符:%:任意长度_:单个字符常用字符串函数Left(字符表达式,整数):截取从左侧开始指定位数的子字符串Right(字符表达式,整数):截取从右侧开始指定位数的子字符串Substring(字符表达式,起始位置,n):从任意位置取子串,截取从起始位置开始的n个字符Ltrim(字符表达式):去掉字符表达式左侧(前面)的空格Rtrim(字符表达式):去掉字符表达式右侧(尾部)的空格操作练习实验4单表查询(一)
14十二月2024SQLServer数据库实践SQL语言一般分四类数据定义语言(DDL,DataDefinitionLanguage)数据操纵语言(DML,DataManipulationLanguage)数据查询语言(DQL,DataQuery
Language)数据控制语言(DCL,DataControlLanguage)(+事务)√√√√数据查询语法SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]stuDB数据库三张表数据查询目录1、单表查询2、连接查询3、嵌套查询4、集合查询5、基于派生表的查询1、单表查询单表查询仅涉及一个表,又分为:选择表中的若干列选择表中的若干元组
ORDERBY排序子句聚集函数
GROUPBY分组子句√√③ORDERBY排序子句【例题5-16】查询选修了1号课程的学生学号及其成绩,查询结果按照成绩降序排列。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]③ORDERBY排序子句【例题5-16】查询选修了1号课程的学生学号及其成绩,查询结果按照成绩降序排列。SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]SELECTSno,GradeFROMSCWHERECno=1ORDERBYGradeDESC分数降序表中数据顺序③ORDERBY排序子句【例题5-17】查询学生的学号、姓名、民族、出生日期,查询结果按照民族升序排列,同一民族的按照年龄降序排列。SELECTSno,Name,Nation,BirthdayFROMStudentORDERBYNationASC,BirthdayASC
SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]判断题:orderby子句中如果没有写排序字段,默认升序④聚集函数五个聚集函数,只有count()函数多种用法函数功能COUNT(*)统计元组(行、记录)数COUNT(<列名>)统计该列(字段、属性)值不为空的元组数COUNT(DISTINCT<列名>)统计该列值不为空,并且值不重复的元组数SUM(<列名>)计算一列值的总和(此列必须为数值型)AVG(<列名>)计算一列值的平均值(此列必须为数值型)MAX(<列名>)求一列值的最大值MIN(<列名>)求一列值的最小值④聚集函数【例题5-18】统计有多少名学生。代码1:SELECTcount(*)FROMStudent代码2:SELECTcount(*)学生数FROMStudentSELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]④聚集函数【例题5-20】查询有多少学生选修了课程。SELECTcount(*)FROMSC结果:5SELECTcount(DISTINCTSno)选课人数FROMSC结果:3SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…
FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]④聚集函数【例题5-21】查询课程表中有多少门必修课(选修课的开课学期是空值)。代码1:SELECTcount(Semester)必修课程数FROMCourse代码2:SELECTcount(*)必修课程数FROMCourse
WHERESemesterISNOTNULL
结果:3SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]强调:COUNT(*)
统计行数,不考虑空值COUNT(列名)
统计该列不为空的行数COUNT(DISTINCT列名)统计该列不为空
并且不重复的行数?SELECT
count(distinctSemester)
FROM
Course④聚集函数【例题5-19】查询学生学习所有课程获得的最高分、最低分和平均分。SELECTmax(Grade)最高分,min(Grade)最低分,avg(Grade)平均分FROMSCSELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]习题1用SQL语句统计学校一共开设了多少门课程用SQL语句统计少数民族学生的人数用SQL语句统计学生有多少个民族用SQL语句统计学校课程的总学时,以及最高学分、最低学分用SQL语句统计2号课程参加考试的人数用SQL语句统计1号课程的平均分COUNT()计数SUM()求和AVG()求平均分MAX()求最大值MIN()求最低分SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表
[WHERE<条件表达式>]习题1用SQL语句统计学校一共开设了多少门课程用SQL语句统计少数民族学生的人数用SQL语句统计学生有多少个民族用SQL语句统计学校课程的总学时,以及最高学分、最低学分用SQL语句统计2号课程参加考试的人数用SQL语句统计1号课程的平均分selectcount(*)fromcourseselectcount(cno)fromcourseselectcount(*)fromstudentwherenation<>’汉族’selectcount(distinctnation)fromstudentselectsum(hours),max(credit),min(credit)fromcourseselectcount(grade)fromSCwherecno=2selectcount(*)fromSCwherecno=2andgradeisnotnullselectavg(grade)fromSCwherecno=1COUNT()计数、SUM()求和AVG()求平均分、MAX()求最大值
、MIN()求最低分数据查询语法SELECT[ALL|DISTINCT][TOPn|PERCENT]<输出列表>]…FROM数据源列表[WHERE<条件表达式>][GROUPBY<分组表达式>[HAVING<条件表达式>]][ORDERBY<排序表达式>[ASC|DESC]]⑤GROUPBY子句GROUPBY子句分组:细化聚集函数的作用对象未分组,聚集函数将作用于整个查询结果分组后,聚集函数将分别作用于每个组,按一列或多列分组,值相等的为一组⑤GROUPBY子句【例题5-18】统计有多少名学生。SELECTcount(*)学生数FROMStudent【进阶】统计各个民族分别有多少名学生。SELECTnation,count(*)学生数FROMStudentgroupbynationGROUPBY分组后,聚集函数将分别作用于每个组值相等的为一组,分组统计⑤GROUPBY子句【例题5-19】查询学生学习所有课程获得的最高分、最低分和平均分。SELECTmax(Grade)最高分,min(Grade)最低分,avg(Grade)平均分FROMSC【进阶1例题5-22】查询每门课程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护士怎么弄课题申报书
- 郑州课题申报书
- 教育课题申报立项书范文
- 怎么搜到课题项目申报书
- epc和融资合同范例
- 课题立项申报书成果形式
- 美发教学课题申报书
- 课题申报书封面需盖章吗
- 农村房产协议合同范例
- 包工清包合同范本
- 个人画协议合同范本
- 2024-2025学年高一下学期开学第一节课(哪吒精神)主题班会课件
- 人教版2025-初中物理实验室实验课程安排
- 南京市江宁区2023-2024六年级数学下册第一二单元练习及答案
- 2025-2030年中国化工园区行业发展现状及投资前景分析报告
- 2024年无锡科技职业学院高职单招语文历年参考题库含答案解析
- 舞蹈艺术赏析课件
- 2025江苏泰州兴化市陈堡镇村级后备干部招聘10人历年高频重点提升(共500题)附带答案详解
- 重庆市2025届高三第一次学业质量调研抽测化学试题 (含答案)
- 隔物灸课件:2025年版
- 室外广告安全生产培训
评论
0/150
提交评论