问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

学习数据库需要有什么语言基础吗?以及配套应该学习点什么?

发布网友 发布时间:2022-05-03 09:37

我来回答

3个回答

懂视网 时间:2022-05-03 13:58

数据库的一些概念

行为:代表的是对象能做什么

对象 - 对象 之间有没有什么关系?is--a(继承) has(拥有) use(使用)

用户对象:用户名,登录名,密码,性别,家庭地址,联系电话,出生日期,个人照片

数据库中,实际上存放的是对象的属性的值。

老师 - 学生(has) 父母 - 子女(has)
职员 - 项目经理,程序员(继承)

所以数据库中,实际上更多就是研究:关联关系(has) ,继承关系(is--a)

非关系型数据库(NoSQL:redis,hbase,memcache……),存储的时候:就可以直接以对象的方式进行存储

NoSQL != no sql === NOT Only SQL
NoSQL 看重存储效率(存储是否快捷)
关系型数据 看重的数据之间的关系
稍微复杂点的系统:关系型数据(关系) + NoSQL(快速的存取数据)

主键:专门用来区分表中的数据的唯一标识符 :id ,一旦确定,就不能修改了

主键字段的特点:不能具有任何的业务含义 :身份证,电话号码…… 答案是:都不能

1代身份证:15位 2代身份证:18位

外键:专门用来确定表和表中数据关系的一个字段

关系型数据库中:继承关系(少,特殊场景:职员的类型,角色的分类),关联关系

关联关系:
1对1 例如:中国的夫妻关系 
1对n 例如:某一个老师跟学生 血缘关系下的父母与子女
n对n 例如:系统中的角色和权限
这些关系中,最常见的:1对n 比较少的:1对1 n对n

关联关系往往都是被限制在某些特殊的场景下,才有效

SQL: Structured Query Language 结构化查询语言

作用:一种专门用于数据库客户端 和 服务端进行通讯的一种标准语言,例如:中文,英文。可以帮我们:通过DBMS 向数据库中存储,查询,分析数据,帮我们管理数据库。Java,PHP,.net,python……编写的程序,也可以作为我们的客户端,同样认识SQL。SQL的标准,不断地在进行变化,带来的影响:延伸出很多不同SQL语法的DBMS出来了。MYSQL 的某些SQL语法,跟SQLServer,Oracle是有区别的

SQL不区分大小写,CREATE == create

SQL分类为4种类型的语言

DDL(Data Define Language): 创建,删除,修改(数据库,表,列,索引,存储过程,视图,函数,触发器……) 用到的关键字:create,alter,drop……

DML(数据操作语言): 新增,修改,删除(表中的数据) 用到的关键字:insert,update,delete,trancate……

DQL(数据查询语言): 查询(表中的数据) 用到的关键字:select

DCL(数据控制语言): 给用户授予操作数据库,表的权限 用到的关键字:grant,revoke……

模式创建的实例

定义模式实际上是定义一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,列如基本表,视图,索引
用sa账户登录,创建一个名为studentdb的数据库,然后创建名为sch1的模式
准备工作
create database studentdb
use studentdb
go
create login zhou1 with password=‘mypassword123’
go
create user zhou1 for login zhou1
创建与删除
create schema sch1 authorization zhou1
drop schema sch1

表的基本语法

创建表的语法
Create Table Users
{
vUserName varchar(18) Not NULL,
vPassword varchar(20) Not NULL
}
创建学生表(带约束和主关键字的)
Create Table Student
{
Sno char(10) NOT NULL Constraint PK_stu_NO Primary Key,
Sname char(20) NOT NULL,
Ssex cahr(2) NOT NULL Constraint CK_Stu_Sex Check(Ssex in(‘男‘,‘女‘)),
Sage tinyint Constraint CK_Stu_Age Check(Sage between 1 and 80),
Tel char(15) NOT NULL
}
修改学生表
Alter Table Student Drop Constraint CK_Stu_Age
删除Sage字段上的约束
Alter Table Student Drop Column Sage
删除Sage列
Alter Table Student Add dBirth datetime
添加列
Alter Table Student Alter Column Smajor varchar(20)
修改列字段大小
drop table student
删除先前的学生表

单表查询

概念
SELECT 表上哪些列显示
*表示所有列 
//投影运算 指的是选择部分列数据
//友好列标题 SELECT Sno as 学号
//top关键字 SELECT Top 3 * from Student 只显示前3条数据
FROM 这个表来源
WHERE 这个表的情况,进行筛选
检索年龄为20岁的学生信息
select * from student where Sage=20
and 连接多个条件
select * from student where ssex=‘女‘and sage>21
or 表示达到一个条件即可 ,between and 在什么条件之间, not between and 取反条件
select sno,sname,ssex from student whrer sno between ‘2‘ and ‘4‘
in 检索一系列的取值列表
select * from teacher where tropt in(‘教授‘,‘副教授‘)
distinct 表示不检索出相同信息
select distinct tropt from teacher
like 模糊检索
select sname,sdept from student where sdept like‘%学%‘
@ 一个字符串与一个下划线进行匹配
select sname,sdept from student where emall like ‘__@%‘
is null 字段为空
select *from student where low is null
is not null 字段不为空
select *from student where high is not null
GROUP BY ,进行分组 按照by之后的选择进行分组统计
对course表,按照必修和选修进行分类,统计每种类别的课程数量
select xklb as 类别,count(cname) as 数量 from course group by xklb 
HAVING
ORDER BY ASC||DESC
ASC表示升序,DESC表示降序
select *from student order by sage desc
select *from student order by sage desc,sno asc在sage相同情况下按snow升序对比排列
COUNT 
count函数返回匹配行数
select count(*) from teacher where tropt=‘教授’
集合函数MAX,MIN,AVG
显示教师的最大最小平均年龄
select max(tage),min(tage),avg(tage) from teacher 
指定条件求和 
select sum(credit) from course where xklb=‘必修‘ 对course表中的必修课的学分进行求和
混合应用
select smajor,ssex,count(sno) from student group by Smajor ,sex order by count(sno) desc
对student表,按照专业和性别进行分组,显示每个专业,每种性别的学生数量,按照学生数量的降序显示结果
select tropt,count(tropt) from teacher group by tropt having count(tropt)>=5
对teacher表,显示职称和对应的认识,要求只有统计人数大于等于5人才显示

多表查询

内连接:内连接根据两个表的共同列进行匹配,两表一般存在主外键关系。通常使用“=”比较运算符来判断两列数据是否相等,通过使用inner join关键字进行表之间的关联
对sc和student表进行内连接,显示学生的学号,姓名,课程号,分数。
语法1:
select student.sno,student.sname,sc.sno,sc.grage from sc join student on sc.sno=student.sno
语法2:
select student.sno,student.sname,sc.sno,sc.grage from sc,student where sc.sno=student.sno
三张表连接
显示学生的学号,姓名,课程名,考试分数
语法1:
select student.sno,student.sname,course.cname,sc.grage from sc join student on sc.sno=student.sno join course on sc.sno=course.sno
语法2:
select student.sno,student.sname,course.cname,sc.grage from sc,student,course where sc.sno=student.sno and sc.sno=course.sno 
外连接:左连接(left join),右连接(right join),完全外连接(full join)
左外连接
让student表和sc表进行左外连接,即不管是学生是否有选修课程,该学生的信息的都会显示出来
select student.sno,student.sname,sc.sno,sc.grade from student left outer join sc on student.sno=sc.sno
右外连接
让sc表和teacher表进行右外连接,显示教师编号,教师姓名,讲师教授的课程号
select teacher.tno,teacher.tname,sc.cno from sc right outer join teacher on sc.tno=teachaer.tno
全外连接
让sc表和teacher表进行全外连接,显示教师编号,教师姓名,讲师教授的课程号。
teacher.tno,teacher.tname,sc.cno from sc full outer join teacher on sc.tno=teacher.tno 
交叉连接:表之间没有任何关联
让学生和课程两张表进行交叉连接
select *from student cross join course

嵌套连接

使用in的子查询
过in引入的子查询结果是包含零个值或多个值得列表,子查询返回结果之后,外部查询将利用这些结果
用any,all修改的比较运算符
可以用all或者any修改引入子查询的比较运算符。some是与any等效的ISO标准,
以>比较运算符为例,>all表示大于每一个值,表示大于最大值。例如,>all(1,2,3)表示大于3
>any表示至少大于一个值,即大于最小值,因此>any(1,2,3)表示大于1
使用exists的子查询
使用exists关键字引入子查询后,子查询的作用就相当于进行存在测试
外部查询的where子句测试子查询返回的行是否存在
子查询实际上不产生任何数据,它只返回TRUE或flase值

例题

等于单个值 查询有某科目考试分数为48分的学生信息
select *from student where sno=(select sno from sc where grade=48)
in列表 查询在sc表中选修了课程的学生的信息
select *from student where sno in (select distinct sno from sc) 
子查询得到学生的学号,外部查询根据学号找到学生
not in 查询没有选修过任何课程的学生的信息
select * from student where sno not in (select distinct sno from sc)not in表示字段的值不在后面的子查询返回到结果中
在教师列表中,检索比任何一个女教师年龄都大的男教师的信息
select *from teacher where tsex=‘男‘ and tage>all(select tage from teacher where tsex=‘女‘)子查询得到每一位女教师的年龄,外层查询使用“>all”的语法,即比集合中最大值还大
查询选修了B004课程的学生的基本信息
select *from student where exists (select *from sc where sno=student.sno and cno=‘B004‘)
查询没有选修X001课程的学生的基本信息
select *from student where not exists (select *from sc where sno=student.sno and cno=‘X001‘)
查询与王国在同一个专业学习的所有学生的基本信息
select sno,sname,smajor from student s1 where exists (select *from student s2 where s1.smajor=s2.smajor and s2.name=‘王国‘)

集合查询

并 交 差

前提:select语句必须拥有相同数量的列

并运算
将学生的学号,姓名,与教师的教工号,姓名,在一个检索结果中显示出来
select Sno,Sname from Student
union
select Tno,Tname from Teacher
//union 将多个查询结果合并起来时系统自动去掉重复元组
//union all 将多个查询结果合并起来时,保留重复元组
交运算
对专业名以计算机开头的学生,及年龄为21的学生,用交运算求二者的交集
select Sno,Sname,Sage,Smajor from Student
where Smajor like‘计算机%‘
intersect
select Sno,Sname,Smajor from Student
where Sage=21
差运算
查询专业名以计算机开头的学生,但不包括年龄是21的学生
select Sno,Sname,Sage,Smajor from Student
where Smajor like ‘计算机%‘
except
select Sno,Sname,Sage,Smajor from Student
where Sage=21

数据更新

插入数据

插入单行数据
在course中插入一行数据,四项数据为(‘X004‘,‘计算机前沿‘,2,‘选修‘)
insert into Course(Cno,Cname,Ccredit,XKLB)
values(‘X004‘,‘计算机前沿‘,2,‘选修‘)
插入子查询结果
将学生表中的学号,姓名,性别抽取出来,插入到Teacher表中,所有新插入的数据,职称为讲师
insert into Teacher(Tno,Tname,Tsex)
select Sno,Sname,Ssex,‘讲师‘ from Studnet

查询创建新表

将teacher中职称为教授的信息,存入到一张目前还不存在的experts表
select * into experts from teacher
where Tprot=‘教授‘

更新数据,修改特定行

将course表中编号是B002的课程,学分修改为3分
update course set ccredit=3
where cno=‘B002‘
带子查询的修改
对学生表,将现有的专业字段,用来存放学生选修的第一门课程的编号
update student
set smajor
(select top 1 cno from sc where sc.sno=student.sno)

删除数据

删除满足条件的行
删除course表中编号为B009的记录
delete from course
where cno=‘B009‘
带子查询的删除
对course表中,没有任何学生选修过的课程,执行删除操作
delete from course where cno not in
(select cno from sc)

视图

创建视图

创建一个名为vwscs的视图,是将学生表中院系是计算机科学学院的学生的学号,姓名,性别,专业四个字段显示出来
create view vwscs
as
select sno,sname,ssex,tel,emall from student 
where sdept=‘计算机科学学院‘

更新视图

通过vwscs视图进行数据更新,将杨华的电话修改为13966667777
update vwscs
set tel=‘13966667777‘
where sname=‘杨华‘

查询视图

select *from vwscore where score grade<85

索引

主键索引

唯一索引unique

聚集索引clustered

非聚集索引nonclustered

建立与删除索引

create index
drop index

聚集索引

alter table course2
add constraint pk_course2_cno primary key clustered(cno)

唯一索引

create unique index idxcoursename
on course2(name)

删除索引

drop index idxcoursename on course2
drop index course2.idxcoursename

数据库-语言基础

标签:code   常见   tween   and   关系   带来   关联关系   场景   uniq   

热心网友 时间:2022-05-03 11:06

你肯定要熟练sql的语句啊,而且数据库也有很多种语言,有SQL SEVER2000,mysql,oracle等等

热心网友 时间:2022-05-03 12:24

啊,而且数据库也有很多种语言,有SQL SEVER2000,mysql,oracle等等
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 朋友圈的好友,怎样找回 长在地上的一种像草莓的果子叫什么 我的中信信用卡账单三千多,为什么不能申请分期还款 甘肃陇南有一种像草莓但比草莓小,有白色和红色两种,这种野果学名叫什么? 这种跟草莓长的很像的小果子叫什么 一种植物结的果实类似草莓,但不是草莓.因为他么是长在树上的.这种植物是什么? 一种长在树上的跟草莓一样的,比草莓小,绝对不是蛇梅的红色果子 中信不能分期人工能解决吗? 农行93万房贷能办大额信用卡么 请问专业人士,有一种长在大山里的果子,像草莓,但是比草莓小很多,学名叫什么啊? 我们土话叫pao。 房贷办信用卡还需要其他工作证明吗 请问这是什么果子,长的像草莓 树莓我们本地叫赖子杨梅(果实长在树上,果子像草莓)我想问有没有人知道官方叫什么?是不是保护植物 这是什么果子,红色的长在树上有点像草莓,里面有乳白色的汁液 我在建行有二十万房贷还了两年多,现在能不能办一个大额信用卡? 请问长得形状像草莓,外表粉红粉红的水果是叫什么名字?据说那水果是长在大树上的 房贷就一个月的流水可以办高额度信用卡吗 有20万房贷能办多大额度的信用卡? 有没有做年会邀请函的网站啊?在线制作,模板很多的那种…… 房贷合同可以办理大额度信用卡吗 菠萝蜜罐头的制作方法 电鏊子煎饼机多少钱什么牌子的好 煎饼鏊子3500瓦一个小时多少度? 鼠标右键按下去上不来了,但是一直弹右键菜单,怎么设置成不用鼠标右键,只用左键。 用充电宝充电时里面会有响声,正常吗 JEEP大切的质量怎么样? 大切诺基这车怎么样??用过的兄弟请回答,和普拉多相比哪个更好?? 如何打印社保缴费流水号 零基础如何学习数据库 2015吉普大切诺基车怎么样 社保单据编号就是流水号吗? 社保编号 现在的羊毛衫还需要用专用洗涤剂洗吗 经济过热为什么会带来通货膨胀的危险? 我国目前流动性过剩的原因、表现及对策 执心教育早教培训机构骗人的吗 黑米粥能放小苏打吗? 煮黑米粥里面可以放小苏打吗 宝宝去早教培训班有用吗 煮粥放苏打粉行吗?我多少比例?