SQL是一种语言;MySql(免费),Oracle(最贵)和SQL Server(中等贵)是指数据库系统。
数据库只是一个结构化的数据集合。
Oracle 创一代+高富帅 // Microsoft Sqlserver 2014富二代 // Mysql 屌丝创业青年
关系型数据库: mysql/oracle/db2/informix/sysbase/sql server
非关系型数据库: (特点: 面向对象或者集合)
NoSql数据库: MongoDB/redis(特点是面向文档)
规范化过程主要为克服插入异常,更新异常,删除异常,数据冗余四个问题。
----------------------------SQL语句的分类:-------------------------------
DDL(Data Definition Languages)数据定义语言: 用于定义数据库对象
对数据库内部的对象(表、视图、索引、同义词、聚簇等)进行创建、删除、修改的操作语言。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);常用的语句关键字包括 create、drop、alter等,例如表,视图,触发器,存储过程等。
如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
DQL(Data Query Languages)数据查询语言:用于检索数据库
用于从数据库中的一个或多个表中查询数据(SELECT)。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。
DML(Data Manipulation Language)数据操纵语句: 用于改变数据库数据
也称为动作查询语言。用于插入、删除、更新数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 等。 只是对表内部数据的操作,而不涉及到表的定义、结构的修改,更不会涉及到其他对象。
DCL(Data Control Language)数据控制语句: (自动提交事务)
用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant(授权)、revoke(撤回) 等。
TPL事务处理语言
CCL指针控制语言
---------------------------SQL数据库表连接:------------------------------
主要分为:内连接、外连接(左连接、右连接 、全连接)、交叉连接(笛卡尔积)。
俩个表,分别为ScoreEntity和StudentBindPaperTypeEntity,现在要查询俩个表中都有的studentID中的数据。
1.内连接(inner join……on):
select *
from ScoreEntity as b
inner join
StudentBindPaperTypeEntity as s
ON b.StudentId=s.StudentId
取两表的交集,查询的结果中含有b.StudentId=s.StudentId的重复列。于是,这样就查询到了所需要的信息,我们可以在这个信息上进行自己想要的增删改查啦。
2.外连接(left | right | full outer join ……on),其中outer可以省略:
select *
from ScoreEntity as b
left join
StudentBindPaperTypeEntity as s
ON b.StudentId=s.StudentId
左连接是查询出左表的所有数据,右表中有对应的则显示出来,没有对应的则显示为null.
注:A left join B on 与 A,B where 有相同效果,如下:
select student.* ,Score.* from student inner join Score on student.id=Score.sid
select student.* , Score.* from student, Score where student.id=Score.sid
右连接的道理和左连接的道理类似,以右表为准,查询出右表的所有数据,左表中有对应的则显示出来,没有对应的则显示为null.
完全外连接是首先按照左边的表进行遍历,然后按照右边的表进行遍历,这样的结果一定会出现同一行中,左面的表有值,而右边的表是null,右面的表有值,而左面的表是null的现象啦。
3.交叉连接:
select * from student, score; 隐式
select * from student cross join score; 显示
例如:
select student.* ,Score.* from student cross join Score 注意没有on条件
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。相当于两个表中的所有行进行排列组合。若表a有X行,表b有Y行,则将返回XY行记录。
自然连接(Natural join)
专业术语:自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。
自然连接:
select * from table1 natural [inner/left outer/right outer/full outer] join table2;
自然连接是一种特殊的等值连接,自然连接无需指定连接列,SQL会检查两个表中是否相同名称和类型的列,如果没有则返回错误。它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。
联合查询(union join)
是一种很少见的连接方式。Oracle、MySQL均不支持,作用是:找出全外连接和内连接之间差异的所有行。这在数据分析中排错中比较常用。也可利用数据库的集合操作来实现此功能。
---------------------------数据库范式:------------------------------
关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。而降低范式就是增加字段,减少了查询时的关联,提高查询效率。
第一范式:确保有一个主键,表的列的具有原子性,即列的信息,不能分解。通俗理解即一个字段只存储一项信息。
第二范式 : 满足所有1NF的规则,必须有任意列不依赖主键关系。通俗理解是任意一个字段都只依赖表中的同一个字段。
若一张表的数据包括:“学号、姓名、课程号、授课老师”中,设“学号、课程号”为主键,其中,一门课程可以有多个老师进行授课。会存在如下关系:
第三范式:满足第二范式 , 所有非主字段都是依赖于主键。通俗解释就是一张表最多只存两层同类型信息
参考文章:
参考实战: