数据库学习笔记Word格式.docx
《数据库学习笔记Word格式.docx》由会员分享,可在线阅读,更多相关《数据库学习笔记Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
![数据库学习笔记Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/1/063e8e0f-5b3b-495e-a029-5ea71258e30d/063e8e0f-5b3b-495e-a029-5ea71258e30d1.gif)
进入到注册表
regedit
local_machine->
system->
currentControlset->
contro->
sessionmanager
把键值删除
2.1两种开发工具
sqlserver2000提供了两种开发工具
1.企业管理器
企业管理器是微软提供的图形界面方式操作sqlserver2000的工具
2.查询分析器
查询分析器是微软提供的用命令行(sql语句)操作sqlserver2000的工具;
2.2企业管理器的使用
sa:
superadministrator
1.管理员sa的介绍
2.如何修改sa密码
2.3查询分析器的使用
sql语句包括4个部分:
数据定义语言(DDL):
例如:
create,drop,alter等语句;
数据操作语言(DML):
insert,update,delete语句;
数据查询语言(DQL):
select语句;
数据控制语句(DCL):
grant,revoke,commit,rollback等。
3.表的管理
3.1表的命名和列的命名规则
1表名以字母和下划线开头
2长度不能超过128个字符;
3不要使用sqlserver的保留字
4只能使用A-Z,a-z,0-9,$,_,#等
3.2支持的数据类型
1字符型
char
varchar
ntext
text
nchar
nvarchar最大4000个字符
一般带有汉子的段用nvarchar,全英文或者符号的用varchar,因为nvarchar无论是单个字母还是单个汉子都占有两个字节,而varchar字母占一个,汉字占两个;
2数字型
bit
int
bigint
float存放小数,但不推荐使用
numeric小数
小数的时候推荐使用numeric
3日期类型
datatime表示日期
timestamp时间戳
一般情况下,用datatime表示日期
4图片image保存图片,但是用的很少,一般用路径存放
5视频binary字段可以存放,但是往往将视频文件保存在文件服务器上,在sqlserver中值保留文件路径,存取效率高
3.3建表(公司管理系统)
-----职员表
Sqlserver建议表的设计者,最好给表定义一个主键,用来标示唯一的一条记录
1主键(primarykey),不能够重复出现,
2而且必须给值,换句话说主键不允许为null
3主键是可以修改的
--创建表dept
createtabledept
(deptNointprimarykey,
dNamenvarchar(30),
locnvarchar(30)
)
--创建表emp
createtableemp
(empNoint,
eNamenvarchar(30),
jobnvarchar(30),
mgrint,
hireDatedatetime,
salnumeric(8,2),
commnumeric(8,2),
deptNointforeignkeyreferencesdept(deptNo)
--根据需要把deptNo做成外键(foreignkey)
--外键只能指向主键,并且要和主键的数据类型要一致
3.4插入字段
插入部分字段
语法:
insertinto表名(字段列表)values(列表)
3.5修改字段
3.6基本查询
3.6.1查询所有列
Select*fromemp(表名)where条件
3.6.2查询指定列
Select字段1,字段2from表名where条件
如何查询SMITH的薪水,工作,所在部门编号
selectename,sal,job,deptNofromempwhereename='
Smith'
3.6.2如何取消重复行(distinct只能消除完全一样的行,保留一行)
Selectdistinct字段from表名where条件
如何统计总共有多少部门
selectdistinctdeptnofromemp
3.6.3使用算术表达式
如何显示每个雇员的年工资?
selectename,sal*13年薪fromemp
3.6.4使用列的别名
selectename,'
年薪'
=sal*13fromemp
selectename,sal*13'
fromemp
selectenameas姓名,sal*13as年薪fromemp
注:
comm有空值;
selectename,sal+isnull(comm,0)fromemp
3.6.4使用where字句
1如何显示工资高于3000的员工
selectename,salfromempwheresal>
3000
2如何查找1981.1.1后入职的员工
selectename,hireDatefromempwherehireDate>
'
1981-1-1'
3如何显示工资在2000到3500的员工情况
selectename,salfromempwheresalbetween2000and3500
3.6.5如何使用like操作符(模糊查询)
%表示0到多个字符
_表示单个字符
如何显示首字符为S的员工姓名和工资
selectename,salfromempwhereenamelike'
S%'
如何显示第三个字符为大写O的所有员工的姓名和工资
selectename,salfromempwhereenamelike'
__o%'
3.6.6在where条件中使用in
如何显示empno为123,345,800.。
。
的雇员情况
selectename,empnofromempwhereempno=7369orempno=7782
selectename,empnofromempwhereempnoin(7369,7782)
3.6.7使用isnull的操作符
如何显示没有上级的雇员的情况
select*fromempwheremgrisnull
3.6.8使用逻辑符号
查询工资高于500或者是岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为j
select*fromempwhere(sal>
500orjob='
manager'
)andename='
j%'
3.6.9使用orderby语句
orderby默认是升序排列
orderbydesc降序排列
orderbyasc升序排列
orderby可以根据不同的字段进行不同的排序
1如何按照工资的从低到高的顺序显示雇员的信息
select*fromemporderbysalasc
select*fromemporderbysaldesc
2如何按照部门号升序而且雇员的工资降序排列
select*fromemporderbydeptno,saldesc
3.6.10使用别名排序
如何统计每个人的年薪,并按照从低到高的顺序排列?
selectename,sal*13年薪fromemporderby年薪
selectename,(sal+isnull(comm,0))*13年薪fromemporderby年薪
分页查询
按雇员的id号升序取出
3.7表的复杂查询
3.7.1说明
在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的数据,现在我们给大家介绍比较复杂的select语句
3.7.2数据分组-----max,min,avg,sum,count
如何显示所有员工的最高工资和最低工资
selectmin(sal)fromemp
selectmax(sal)fromemp
selectmin(sal),max(sal)fromemp
如何显示最低工资和该雇员的姓名
selectename,salfromempwheresal=(selectmin(sal)fromemp)
显示所有员工的平均工资和工资总和
selectavg(sal)平均工资,sum(sal)总工资fromemp
把高于平均工资的雇员的姓名和工资显示出来
selectename,salfromempwheresal>
(selectavg(sal)fromemp)
计算共有多少员工
selectcount(*)fromemp
显示工资最高的员工的姓名和工资
selectename,salfromempwheresal=(selectmax(sal)fromemp)
3.7.3groupby和having
having往往和groupby结合使用,可以对分组查询进行筛选
groupby用于对查询结果的分组统计
having字句用于限制分组显示结果
显示每个部门的平均工资和最高工资
selectavg(sal),max(sal),deptnofromempgroupbydeptno
显示每个部门的每种岗位的平均工资和最低工资
selectavg(sal),min(sal),deptno,jobfromempgroupbydeptno,job
orderbydeptno
显示平均工资低于2000的部门号和它的平均工资
selectavg(sal),deptnofromempgroupbydeptnohavingavg(sal)<
2000
显示平均工资高于2000的部门号和它的平均工资,并且从低到高排列
selectavg(sal),deptnofromempgroupbydeptnohavingavg(sal)>
orderbyavg(sal)
3.7.4对数据分组的总结
1分组函数只能出现在选择列表、having、orderby子句中;
2如果在select语句中同时包含groupby,having,orderby那么他们的顺序只能是groupby,having,orderby;
3在学则列中如果有列、表达式、和分组函数,那么这些列和表达式必须出现一个在groupby语句中,否则会出错;
3.7.5多表查询
显示sales部门位置和其员工姓名
selectdname,loc,enamefromemp,dept
wheredname='
sales'
andemp.deptno=dept.deptno
显示雇员名,雇员工资及所在部门的名字
selectename,sal,dnamefromemp,deptwhereemp.deptno=dept.deptno
显示部门号为10的部门名称,员工名和工资
selectdname,ename,salfromemp,dept
whereemp.deptno=10andemp.deptno=dept.deptno
显示雇员名,雇员工资及所在部门的名字,并按部门排序
selectename,sal,dnamefromemp,deptwhereemp.deptno=dept.deptno
orderbydname
3.7.6自连接
3.7.7子查询
3.7.8分页查询
3.7.9如何处理重复的记录
把cat的记录distict后的结果,放入到#temp3
把cat的记录清空
把#temp3表的数据(没有重复的记录),插入cat表
删除#temp3表
3.7.10左外连接,右外连接
3.8维护数据的完整性
3.8.1约束
3.8.2使用
3.8.3案例
3.8.4修改表
4.Sqlserver数据库的备份和修复
4.1使用企业管理器完成备份和修复
4.2使用查询分析器完成备份和修复
5.Java程序中如何操作sqlserver
5.1使用jdbc-odbc方式操作sqlserver数据库
1.配置数据源(控制面板-管理工具-数据源)
2.在程序中去连接数据源:
套路:
1.加载驱动
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
2.得到连接(mytest是刚刚建立的数据源)
Connectionct=DriverManager.getConnection
(“jdbc:
odbc:
mytest”,“sa”,“sa”);
3.创建Statement或者PreparedStatement(用处:
发送sql语句);
Statementsm=ct.createStatement();
4.执行crud
exectueUpdate可以执行cud操作(添加,删除,修改)
如果是查询使用executQuery();
注意:
关闭资源!
!
继续演示:
查询:
resultSet结果集,
1.preparedStatement可以提高执行效率(因为他可以预编译);
2.preparedStatement可以防止sql注入,但是要求用赋值的方式;
5.2使用jdbc来操作数据库
Jdbc方式去操作数据库
1.引入包java.Sql.*;
2.引入三个jar包;
3.套路:
Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
microsoft:
sqlserver:
//127.0.0.1:
1433;
databaseName=spdb1”,“sa”,“sa”);
PreparedStatementps=ct.prepareStatment(“sql语句”);
4.执行;
5.3Statement和preparedStatement的区别
5.4在java程序中操作sqlserver数据库表
5.实例
1.梁山heros(表的简单操作)
--创建数据库
createdatabaseliangshanheros
--创建表
useliangshanheros--使用某个数据库
go
createtablehero
(heroidint,--排名
heronamevarchar(50),--姓名
heronicknamevarchar(50),--外号
sexchar
(2)
--使用sql语句添加数据
insertintoherovalues(1,'
宋江'
'
及时雨'
男'
insertintoherovalues(2,'
卢俊义'
玉麒麟'
insertintoherovalues(3,'
吴用'
智多星'
insertintoherovalues(4,'
公孙胜'
入云龙'
--使用sql语句来查询数据
select*fromhero
2.梁山heros(表的简单操作)
sexchar
(2),
salint
2000)
2300)
1500)
--删除一张表(表的结构和表的数据一起删掉)
droptablehero
--①查询工资低于1600的同志
select*fromherowheresal<
1600
--②把工资低于1600的人的工资提高10%(update)
--语法:
--update表名set字段名1=?
,字段名2=?
where条件
updateherosetsal=sal*1.1wheresal<
--③请删除性别为女的同志
deletefromherowheresex='
女'