sql教案.docx
- 文档编号:8784772
- 上传时间:2023-05-14
- 格式:DOCX
- 页数:47
- 大小:377.59KB
sql教案.docx
《sql教案.docx》由会员分享,可在线阅读,更多相关《sql教案.docx(47页珍藏版)》请在冰点文库上搜索。
sql教案
SQL2005教案
(40课时)
第一节课sql2005的安装,数据库和表的创建以及基本概念
1.图示说明
2.基本概念
数据库(DB,Database):
数据库是长期储存在计算机内,有组织,可共享的大量数据的集合.
数据(Data):
数据是数据库中存储的基本对象,它是描述事物的符号记录.数据是信息的载体,信息是数据反映出的一种关系.
数据库管理系统(DBMS,DatabaseManagementSystem):
是数据库的机构,是一种软件,负责数据库中的数据组织,数据操作,数据维护,控制及保护和数据服务等.
数据库系统(DBS):
包含数据,数据库,数据库管理系统,数据管理员等.
3.数据库系统的发展
人工管理阶段
文件系统阶段
数据库系统阶段
4.SQL2005的版本及常用数据库
SQL2005版本:
*SQLServerEnterpriseEdition:
具有企业级功能的SQLServer版本,适用于大型企业以及大型数据库或数据仓库的服务器版本。
*SQLServerStandardEdition:
具有标准功能的SQLServer版本,适用于一般企业的服务器版本。
*SQLServerWorkgroupEdition:
自SQLServer2000开始才有的版本,专为工作组群或部门所设计,适用于较小规模的组织。
*SQLServerWebEdition:
自SQLServer2008开始才有的版本,专为Web服务器与WebHosting所设计,功能上较WorkgroupEdition少一些。
*SQLServerExpressEdition:
免费的SQLServer版本,适用于小型应用程序或是单机型应用程序,但在功能上有设限,如只能使用一颗处理器,以及最大数据库大小为4GB等。
请见SQLServerExpress。
目前常用数据库:
开源公司的mysql
微软的mssql我们也经常说是SQLSERVER
oracle公司的oracle
SYBASE的powerbuilder
IBM的DB2
BORLAND公司的产品interbase,
美国Informix软件公司的Informix
数据库,表的创建
1.创建数据库goods
2.创建3个表
Users表(用户表)
Ware表(商品信息表)
Shopping表(商品销售表)
3.基本概念:
表、行、列、属性、字段、域、实体.
4.数据库重命名,表结构的修改.
5.SQL(StructuredQueryLanguage-结构化查询语言):
是由IBM公司在70年代开发的关系型数据库原型SystemR的一部分,现在已成为关系型数据库系统通用的查询语言,它是数据库系统的通用语言.SQL语言主要包括数据定义,数据控制,数据操纵和数据查询等功能,其中最重要的是数据查询功能.
6.数据定义语言DDL(DataDefinitionLanguage)
<1>创建数据库
createdatabasegoods
<2>选择数据库
usegoods
<3>创建表
createtableusers(
User_IDint,
User_Namenvarchar(50),
Emailnvarchar(50),
Cardnvarchar(50),
Tellnvarchar(50),
Addressnvarchar(50))
<4>修改表
--添加一列
altertableusers
addremarkvarchar(50)
--修改一列的数据类型
altertableusers
altercolumnremarkvarchar
--删除一列
altertableusers
dropcolumnremark
<5>删除表
droptableUsers
<6>删除数据库(注意确定一下当前正在使用的数据库)
dropdatabaset
第二节课数据处理语句DML(DataManipulationLanguage)
1.插入数据
insertintousers(user_id,user_name,user_age,email,card,tell,
address)values(1234,'jodon',35,'jodon123@','1234567890','138888888','美国')
注意:
(1)必须用逗号将各个数据分开,字符型数据要用单引号括起来,且into可以省略。
(2)INTO子句中没有指定列名,则新插入的记录必须在每个属性列上均有值,且VALUES子句中值的排列顺序要和表中各属性列的排列顺序一致。
(3)将VALUES子句中的值按照INTO子句中指定列名的顺序插入到表中。
(4)对于INTO子句中没有出现的列,则新插入的记录在这些列上将取空值(remark).
(5)当插入的数据包含了每一个列,则可以省略列名.如下:
Insertintousers
values(1234,'jodon',35,'jodon123@','1234567890',
'138888888','美国')
2.修改记录
<1>updateusers
setuser_age=20
<2>updateusers
setuser_age=26
whereuser_id=1234
<3>updateusers
setuser_age=user_age+5
3.删除记录
<1>delete
fromusers
whereuser_id=4321
<2>delete
fromusers
4.主键约束
<1>
<2>createtableusers(
User_IDintprimarykey,
User_Namenvarchar(50),
Emailnvarchar(50),
Cardnvarchar(50),
Tellnvarchar(50),
Addressnvarchar(50))
5.上机练习
<1>练习课堂内容
<2>建立学生数据库student,并建立四张表:
学生基本信息表,课程设置表,选课表,成绩表,并练习所学的SQL语句
第三节课简单查询语句
1.查询users表中所有记录的所有字段
select*--也可以把所有的列都写上
fromusers
注释补充:
--注释一行
/*……*/注释一段
2.查询所有记录的姓名和年龄
selectuser_name,user_age
fromusers
别名补充:
selectuser_nameas姓名,user_ageas年龄
fromusers
--其中as可以省略
3.查询年龄超过20的所有记录
select*
fromusers
whereuser_age>20-->=<<=<>!
==
4.查询年龄在20和50之间的记录
<1>select*
fromusers
whereuser_age>=20anduser_age<=50
<2>select*
fromusers
whereuser_agebetween20and50
5.查询年龄大于30或年龄小于20的记录
select*
fromusers
whereuser_age<20oruser_age>30
6.查询年龄不等于30的记录
<1>select*
fromusers
whereuser_age<>30--!
=
<2>select*
fromusers
wherenotuser_age=30
7.查询年龄不等于20也不等于30的记录
<1>select*
fromusers
whereuser_age!
=30anduser_age<>20
<2>select*
fromusers
wherenot(user_age=30oruser_age=20)
8.查询年龄等于20或者等于30的记录
<1>select*
fromusers
whereuser_age=30oruser_age=20
<2>select*
fromusers
whereuser_agein(20,30)
上面7也可以用下面方式实现
select*
fromusers
whereuser_agenotin(20,30)—not也可以放在user_age之前
9.查询users表中有多少条不同的记录
selectdistinct*
fromusers
10.查询users表中都有哪些年龄的记录
selectdistinctuser_age
fromusers
模糊查询(通配符’_’,’%’)
11.查询所有姓姚且名字为两个字的记录
select*
fromusers
whereuser_namelike'姚_'
12.查询所有姓姚的记录
select*
fromusers
whereuser_namelike'姚%'
13.查找第二个字为“小”的所有记录
select*
fromusers
whereuser_namelike'%小%'
14.查询所有不姓姚的记录
select*
fromusers
whereuser_namelike'[^姚]%'
15.查询所有姓姚或姓王的记录
select*
fromusers
whereuser_namelike'[姚,王]%'
16.查询所有姓姚且第二个字不为大或小的记录
select*
fromusers
whereuser_namelike'姚[^大,小]%'
17.查询姓名不为空的记录
select*
fromusers
whereuser_nameisnotnull
上机练习:
1〉练习课堂所讲内容
2〉2人一组以student数据库为例互相设计题
第四节课
1.修改users表,添加新列users_sex(性别)
altertableusers
adduser_sexnchar(10)
2.查询出前两条记录
selecttop2*
fromusers
3.查询users表中的所有记录,并按年龄降序或升序排列
select*
fromusers
orderbyuser_ageasc—asc可以省略不写,默认即为asc
select*
fromusers
orderbyuser_agedesc
4.查询所有记录,并按年龄升序排列,年龄相同按card降序排列
select*
fromusers
orderbyuser_ageasc,carddesc
5.查询users表中男女各多少人
selectcount(*)
fromusers
groupbyuser_sex
注意:
使用分组的时候,查询的列必须出现在聚合函数中或者必须出现在groupby后面,下面的写法是错误的:
selectuser_name,user_sex
fromusers
groupbyuser_sex
6.查询users表中男女各多少人,且只有当人数超过3人才输出信息
selectcount(*)
fromusers
groupbyuser_sexhavingcount(*)>3
7.查询users表中最大的年龄是多少
selectmax(user_age)
fromusers
8.查询users表中最小的年龄是多少
selectmin(user_age)
fromusers
9.求users表中所有人年龄的总和
selectsum(user_age)
fromusers
10.求users表中所有人的平均年龄
selectavg(user_age)
fromusers
连接查询
1.笛卡尔积
select*
fromware,shopping
2.等值连接
select*
fromware,shopping
whereware_code=code
select*
fromwarejoinshopping
onware_code=code
3.不等值连接
select*
fromware,shopping
whereware_code<>code
select*
fromwarejoinshopping
onware_code<>code
4.查询所有已销售商品的名称,进价,销售价,销售数量和日期
selectname,startprice,saleprice,shopping.amount,shopping.date
fromwarejoinshopping
onware_code=code
注意:
当连接的表中出现相同列名时,必须加表名来区分
5.查询所有已销售商品的名称,进价,销售价,销售数量和盈利额
selectname,startprice,saleprice,shopping.amount,
shopping.amount*(saleprice-startprice)盈利
fromwarejoinshopping
onware_code=code
6.查询所有已销售商品且盈利的名称,进价,销售价,销售数量和盈利额
selectname,startprice,saleprice,shopping.amount,
shopping.amount*(saleprice-startprice)as盈利
fromwarejoinshopping
onware_code=code
wheresaleprice-startprice>0
7.自然连接(特殊的等值连接,去掉了重复的列)
selectware.*,shopping.amount,shopping.saleprice,shopping.date
fromwareinnerjoinshopping
onware_code=code
补充:
innerjoin也叫内连接,inner也可以省略不写,即默认为内连接
第五节课
外连接
1.左外连接
select*
fromwareleftjoinshopping
onware_code=code
2.右外连接
select*
fromwarerightjoinshopping
onware_code=code
3.全外连接
select*
fromwarefulljoinshopping
onware_code=code
4.自连接
<1>查找年龄比姚明小的所有记录
selecta.*
fromusersasa,usersasb
wherea.user_age <2>查找年龄不比姚明大的所有记录 错误写法: selecta.* fromusersasa,usersasb wherea.user_age<=b.user_ageandb.user_name='姚明' 正确写法: selecta.* fromusersasa,usersasb wherea.user_name<>b.user_nameanda.user_age<=b.user_age andb.user_name='姚明' 5.交叉连接 select* fromwarecrossjoinshopping 说明: 其实就是笛卡儿积 6.集合查询 <1>并(union) selectware_code,date fromware union selectcode,date fromshopping --注意: 所查询的目标列必须相同 <2>交(intersect) selectware_code fromware intersect selectcode fromshopping <3>差(minus)—说明: SQL2005不支持minus运算,oracle支持 第六节课复习 以student数据库为例复习前面所讲内容 第七节课子查询—嵌套查询(所有的链接查询都可以用子查询实现) 1.查询出王小明的所有成绩 步骤: <1>查询出王小明的学号 selectstu_id fromstu wherestu_name=’王小明’ <2>查询出上面所查询出的学号所对应的课程成绩 selects_score fromscore wheres_id=stu_id 子查询: selects_core fromscore wheres_id= (selectstu_id fromstu wherestu_name=’王小明’) 按照处理方式分为相关子查询和无关子查询 相关子查询: 是一种子查询和外层查询相互交叉的数据检索方法(一般不用) 无关子查询: 子查询中不包含对外层查询的任何引用。 2.查询所有选修了编号为C123课程的学生姓名 selectname fromstu wherestu_idin (selectc_id fromxunke wherekc_id=’N123’) 单行子查询—子查询返回的是一行,因此可以可以把子查询作为一个常量对待 3.查询身份证号为4105221996212的学生都所选课程的编号 selectkc_id fromxuanke wherec_id= (selectstu_id fromstu wherecode=’4105221996212’) 注意: 如果子查询的结果不是单个值,则系统会提示错误。 4.查询年龄最大的学生的所有信息 select* fromstu wherestu_age= (selectmax(stu_age) fromstu) 5.查询年龄比张三小的所有学生信息 select* fromstu wherestu_age< (selectstu_age fromstu wherestu_name=’张三’) 多列子查询: 如果子查询返回多个列的数据,就称为多列子查询。 (一般很少应用) 6.查询男生中年龄最大的学生的学号和姓名 selectstu_id,stu_name fromstu where(stu_id,stu_age)in (selectstu_id,max(stu_age) fromstu groupbystu_sex) 多行子查询: 查询返回单列多行数据的子查询称为多行子查询。 7.查询所有有成绩的学生信息 select* fromstu wherestu_idin (selects_id fromscore wherenots_fenshuisnull) 8.查询所有选修了C语言的学生信息 select* fromstu wherestu_idin (selects_id fromcourse,xuanke wherecourse.kc_id=xunanke.kc_idandcourse.name=’C语言’) 9.查询所有没有选修C语言的学生信息 select* fromstu wherestu_idnotin (selects_id fromcourse,xuanke wherecourse.kc_id=xunanke.kc_idandcourse.name=’C语言’) 10.查询年龄不小于所有女同学的男同学的学号和姓名 selectstu_id,stu_name fromstu wherestu_sex=’男’andstu_age>=any (selelctstu_age fromstu wherestu_sex=’女’) 11.查询年龄比所有女同学都大的男同学的学号和姓名 selectstu_id,stu_name fromstu wherestu_sex=’男’andstu_age>all (selectstu_age fromstu wherestu_sex=’女’) exists使用: 存在检查—即只要子查询返回的结果不为空,则认为是真,反之认为是假。 (有可能子查询和外层查询没有任何关系) 12.select* fromstu whereexists (select* fromscore) select* fromstu wherenotexists (select* fromscore) 多层嵌套: 13.查询选修了C语言的学生信息 select* fromstu wherestu_id= (selectxuanke.id fromxuanke wherekc_id= (selectkc_id fromcourse wherekc_name=’C语言’)) 相同表结构之间拷贝数据 14.insertintostu1 values(select*fromstu2) 15.上机练习. 第八节课T-SQL 1.变量 ->全局变量: 由系统定义和维护,名称以两个@字符开始; ->局部变量: 由用户定义和赋值,名称以单个@字符开始; 《1》全局变量 --使用全局变量记录SQLSERVER服务器活动状态,对用户来讲是只读的。 常用全局变量举例: @@ERROR--这个变量包含当前连接发生的最后一次错误的代码。 在执行的语句没有错误时,@@ERROR变量的值是0。 select@@error fromstudent—先故意写错表名查询,然后再去掉from直接查询 @@ROWCOU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sql 教案