【SQL开源代码栏目提醒】:以下是网学会员为您推荐的SQL开源代码-sql2005教案 - 其它资料,希望本篇文章对您学习有所帮助。
SQL2005 教案 40 课时第一节课
sql2005 的安装数据库和表的创建以及基本概念 1.图示说明2.基本概念 数据库DBDatabase:数据库是长期储存在计算机内有组织可共享的大量数据的集合. 数据Data:数据是数据库中存储的基本对象它是描述事物的符号记录.数据是信息的载体信息是数据反映出的一种关系. 数据库管理系统DBMSDatabase Management System:是数据库的机构是一种软件负责数据库中的数据组织数据操作数据维护控制及保护和数据服务等. 数据库系统DBS:包含数据数据库数据库管理系统数据管理员等.3.数据库系统的发展 人工管理阶段 文件系统阶段 数据库系统阶段4.
SQL2005 的版本及常用数据库
SQL2005 版本:
SQL Server Enterprise Edition:具有企业级功能的
SQL Server 版本,适用于大型企业以及大型数据库或数据仓库的服务器版本。
SQL Server Standard Edition:具有标准功能的
SQL Server 版本,适用于一般企业的服务器版本。
SQL Server Workgroup Edition:自
SQL Server 2000 开始才有的版本,专为工作组群或部门所设计,适用于较小规模的组织。
SQL Server Web Edition:自
SQL Server 2008 开始才有的版本,专为 Web 服务器与 Web Hosting 所设计,功能上较 Workgroup Edition 少一些。
SQL Server Express Edition:免费的
SQL Server 版本,适用于小型应用程序或是单机型应用程序,但在功能上有设限,如只能使用一颗处理器,以及最大数据库大小为 4GB等。
请见
SQL Server Express。
目前常用数据库:
开源公司的 mysql 微软的 mssql 我们也经常说是
SQL SERVER oracle 公司的 oracle SYBASE 的 powerbuilder IBM 的 DB2 BORLAND 公司的产品 interbase, 美国 Informix 软件公司的 Informix 数据库表的创建 1. 创建数据库 goods 2. 创建 3 个表 Users 表用户表 Ware 表商品信息表 Shopping 表商品销售表 3. 基本概念: 表、行、列、属性、字段、域、实体. 4. 数据库重命名表结构的修改. 5. SQLStructured Query Language-结构化查询语言:是由 IBM 公司在 70 年代开发的 关系型数据库原型 System R 的一部分现在已成为关系型数据库系统通用的查询 语言它是数据库系统的通用语言.
SQL 语言主要包括数据定义数据控制数据操 纵和数据查询等功能其中最重要的是数据查询功能. 6. 数据定义语言 DDLData Definition Language lt1gt创建数据库 create database goods lt2gt选择数据库 use goods lt3gt创建表 create table users User_ID int User_Name nvarchar50 Email nvarchar50 Card nvarchar50 Tell nvarchar50 Address nvarchar50 lt4gt修改表 --添加一列 alter table users add remark varchar50 --修改一列的数据类型 alter table users alter column remark varchar --删除一列 alter table users drop column remark lt5gt删除表 drop table Users lt6gt删除数据库注意确定一下当前正在使用的数据库 drop database t第二节课 数据处理语句 DMLData Manipulation Language 1. 插入数据 insert into usersuser_iduser_nameuser_ageemailcardtell address values1234jodon35jodon123sina.com123456789013888888 8美国 注意: (1)必须用逗号将各个数据分开,字符型数据要用单引号括起来且 into 可以省略。
(2)INTO 子句中没有指定列名, 且 则新插入的记录必须在每个属性列上均有值, VALUES 子句中值的排列顺序要和表中各属性列的排列顺序一致。
(3)将 VALUES 子句中的值按照 INTO 子句中指定列名的顺序插入到表中。
(4)对于 INTO 子句中没有出现的列,则新插入的记录在这些列上将取空值remark. (5)当插入的数据包含了每一个列则可以省略列名.如下: Insert into users values1234jodon35jodon123sina.com1234567890 138888888美国 2. 修改记录 lt1gt update users set user_age20 lt2gtupdate users set user_age26 where user_id1234 lt3gtupdate users set user_ageuser_age5 3. 删除记录 lt1gtdelete from users where user_id4321 lt2gt delete from users 4. 主键约束 lt1gt lt2gt create table users User_ID int primary key User_Name nvarchar50 Email nvarchar50 Card nvarchar50 Tell nvarchar50 Address nvarchar50 5. 上机练习 lt1gt练习课堂内容 lt2gt建立学生数据库student并建立四张表:学生基本信息表课程设置表选课表 成绩表并练习所学的
SQL语句第三节课 简单查询语句 1. 查询 users 表中所有记录的所有字段 select --也可以把所有的列都写上 from users 注释补充: --注释一行 /……/注释一段 2. 查询所有记录的姓名和年龄 select user_nameuser_age from users 别名补充: select user_name as 姓名user_age as 年龄 from users --其中 as 可以省略3. 查询年龄超过 20 的所有记录 select from users where user_agegt20--gt lt lt ltgt 4. 查询年龄在 20 和 50 之间的记录 lt1gtselect from users where user_agegt20 and user_agelt50 lt2gtselect from users where user_age between 20 and 505. 查询年龄大于 30 或年龄小于 20 的记录 select from users where user_age lt20 or user_agegt306. 查询年龄不等于 30 的记录 lt1gtselect from users where user_age ltgt30-- lt2gtselect from users where not user_age 307. 查询年龄不等于 20 也不等于 30 的记录 lt1gt select from users where user_age 30 and user_ageltgt20 lt2gt select from users where not user_age 30 or user_age208. 查询年龄等于 20 或者等于 30 的记录 lt1gt select from users where user_age 30 or user_age20 lt2gt select from users where user_age in 2030 上面 7 也可以用下面方式实现 select from users where user_age not in 2030—not 也可以放在user_age之前 9. 查询 users 表中有多少条不同的记录 select distinct from users 10. 查询 users 表中都有哪些年龄的记录 select distinct user_age from users 模糊查询(通配符’_’’’) 11. 查询所有姓姚且名字为两个字的记录 select from users where user_name like 姚_ 12. 查询所有姓姚的记录 select from users where user_name like 姚 13. 查找第二个字为“小”的所有记录 select from users where user_name like 小 14. 查询所有不姓姚的记录 select from users where user_name like 姚 15. 查询所有姓姚或姓王的记录 select from users where user_name like 姚王 16. 查询所有姓姚且第二个字不为大或小的记录 select from users where user_name like 姚大,小 17. 查询姓名不为空的记录 select from users where user_name is not null 上机练习: 1〉 练习课堂所讲内容 2〉2 人一组以 student 数据库为例互相设计题第四节课 1. 修改 users 表添加新列 users_sex性别 alter table users add user_sex nchar102. 查询出前两条记录 select top 2 from users3. 查询 users 表中的所有记录并按年龄降序或升序排列 select from users order by user_age asc—asc 可以省略不写默认即为 asc select from users order by user_age desc4. 查询所有记录,并按年龄升序排列,年龄相同按 card 降序排列 select from users order by user_age asc card desc5. 查询 users 表中男女各多少人 select count from users group by user_sex 注意:使用分组的时候查询的列必须出现在聚合函数中或者必须出现在 group by 后面下面的写法是错误的: select user_nameuser_sex from users group by user_sex6. 查询 users 表中男女各多少人且只有当人数超过 3 人才输出信息 select count from users group by user_sex having countgt37. 查询 users 表中最大的年龄是多少 select maxuser_age from users8. 查询 users 表中最小的年龄是多少 select minuser_age from users9. 求 users 表中所有人年龄的总和 select sumuser_age from users10. 求 users 表中所有人的平均年龄 select avguser_age from users 连接查询1. 笛卡尔积 select from wareshopping 2. 等值连接 select from wareshopping where ware_codecode select from ware join shopping on ware_codecode 3. 不等值连接 select from wareshopping where ware_codeltgtcode select from ware join shopping on ware_codeltgtcode 4. 查询所有已销售商品的名称进价销售价销售数量和日期 select namestartpricesalepriceshopping.amountshopping.date from ware join shopping on ware_codecode 注意:当连接的表中出现相同列名时必须加表名来区分 5. 查询所有已销售商品的名称进价销售价销售数量和盈利额 select namestartpricesalepriceshopping.amount shopping.amountsaleprice-startprice 盈利 from ware join shopping on ware_codecode 6. 查询所有已销售商品且盈利的名称进价销售价销售数量和盈利额 select namestartpricesalepriceshopping.amount shopping.amountsaleprice-startprice as 盈利 from ware join shopping on ware_codecode where saleprice-startpricegt0 7. 自然连接特殊的等值连接去掉了重复的列 select ware.shopping.amountshopping.salepriceshopping.date from ware inner join shopping on ware_codecode 补充:inner join 也叫内连接inner 也可以省略不写即默认为内连接第五节课 外连接 1. 左外连接 select from ware left join shopping on ware_codecode 2. 右外连接 select from ware right join shopping on ware_codecode 3. 全外连接 select from ware full join shopping on ware_codecode 4. 自连接 lt1gt查找年龄比姚明小的所有记录 select a. from users as ausers as b where a.user_ageltb.user_age and b.user_name姚明 lt2gt查找年龄不比姚明大的所有记录 错误写法: select a. from users as ausers as b where a.user_ageltb.user_age and b.user_name姚明 正确写法: select a. from users as ausers as b where a.user_nameltgtb.user_name and a.user_ageltb.user_age and b.user_name姚明 5. 交叉连接 select from ware cross join shopping 说明:其实就是笛卡儿积 6. 集合查询 lt1gt并union select ware_codedate from ware union select codedate from shopping --注意:所查询的目标列必须相同 lt2gt交intersect select ware_code from ware intersect select code from shopping lt3gt差minus—说明:
SQL2005 不支持 minus 运算oracle 支持第六节课 复习 以 student 数据库为例复习前面所讲内容第七节课 子查询—嵌套查询所有的链接查询都可以用子查询实现 1. 查询出王小明的所有成绩 步骤: lt1gt查询出王小明的学号 select stu_id from stu where stu_name’王小明’ lt2gt查询出上面所查询出的学号所对应的课程成绩 select s_score from score where s_idstu_id 子查询: select s_core from score where s_id select stu_id from stu where stu_name’王小明’ 按照处理方式分为相关子查询和无关子查询 相关子查询:是一种子查询和外层查询相互交叉的数据检索方法(一般不用) 无关子查询:子查询中不包含对外层查询的任何引用。
2. 查询所有选修了编号为 C123 课程的学生姓名 select name from stu where stu_id in select c_id from xunke where kc_id’N123’ 单行子查询—子查询返回的是一行,因此可以可以把子查询作为一个常量对待 3. 查询身份证号为 4105221996212 的学生都所选课程的编号 select kc_id from xuanke where c_id select stu_id from stu where code’4105221996212’ 注意:如果子查询的结果不是单个值,则系统会提示错误。
4. 查询年龄最大的学生的所有信息 select from stu where stu_age select maxstu_age from stu 5. 查询年龄比张三小的所有学生信息 select from stu where stu_agelt select stu_age from stu where stu_name’张三’多列子查询:如果子查询返回多个列的数据,就称为多列子查询。
(一般很少应用)6. 查询男生中年龄最大的学生的学号和姓名 select stu_id stu_name from stu where stu_id stu_age in select stu_id maxstu_age from stu group by stu_sex多行子查询:查询返回单列多行数据的子查询称为多行子查询。
7. 查询所有有成绩的学生信息 select from stu where stu_id in select s_id from score where not s_fenshu is null8. 查询所有选修了 C 语言的学生信息 select from stu where stu_id in select s_id from course xuanke where course.kc_idxunanke.kc_id and course.name’C 语言’9. 查询所有没有选修 C 语言的学生信息 select from stu where stu_id not in select s_id from course xuanke where course.kc_idxunanke.kc_id and course.name’C 语言’10. 查询年龄不小于所有女同学的男同学的学号和姓名 select stu_id stu_name from stu where stu_sex’男’ and stu_agegtany selelct stu_age from stu where stu_sex’女’11. 查询年龄比所有女同学都大的男同学的学号和姓名 select stu_id stu_name from stu where stu_sex’男’ and stu_agegtall select stu_age from stu where stu_sex’女’ exists 使用:存在检查—即只要子查询返回的结果不为空,则认为是真,反之认为 是假。
(有可能子查询和外层查询没有任何关系) 12. select from stu where exists select from score select from stu where not exists select from score 多层嵌套: 13. 查询选修了 C 语言的学生信息 select from stu where stu_id select xuanke.id from xuanke where kc_id select kc_id from course where kc_name’C 语言’ 相同表结构之间拷贝数据 14. insert into stu1 valuesselect from stu2 15. 上机练习.第八节课 T-
SQL 1. 变量 -gt全局变量:由系统定义和维护,名称以两个字符开始; -gt局部变量:由用户定义和赋值,名称以单个字符开始; 《1》全局变量 --使用全局变量记录
SQL SERVER 服务器活动状态,对用户来讲是只读 的。
常用全局变量举例: ERROR--这个变量包含当前连接发生的最后一次错误的
代码。
在执行的 语句没有错误时,ERROR 变量的值是 0。
select error from student—先故意写错表名查询,然后再去掉 from 直接 查询 ROWCOUNT—存储最近查询的记录数。
select from stu select rowcount VERSION—数据库版本信息 select VERSION 《2》局部变量 声明: DECLARE 变量名称 数据类型 declare count int name char10 赋值:SET 变量名称变量值 set count0 declare max_age int select max_agemaxstu_age from stu2. 运算符 《1》 算术运算符 - / 《2》 比较运算符(关系运算符) gt lt gt lt ltgt 《3》 逻辑运算符 and or not amp 3. 函数 《1》 系统函数 DB_NAME: 获得当前使用的数据库名 select db_name HOST_NAME: 获得服务器主机名 select host_name USER_NAME: 获得用户名称 select user_name select user_name2 USER_ID: 获得用户 id select user_id 《2》 日期函数 GETDATE: 获得系统日期 s.