USE master --设置当前数据库为master,以便访问sysdatabases表
GO
IF EXISTS(SELECT * FROM sysdatabases WHERE name ='stuDB')
DROP DATABASE stuDB
CREATE DATABASE stuDB
ON PRIMARY --默认就属于PRIMARY主文件组,可省略
(
NAME='stuDB_data', --主数据文件的逻辑名
FILENAME='D:\project\stuDB_data.mdf', --主数据文件的物理名
SIZE=5mb, --主数据文件初始大小
MAXSIZE=100mb, --主数据文件增长的最大值
FILEGROWTH=15% --主数据文件的增长率
)
LOG ON
(
NAME='stuDB_log',
FILENAME='D:\project\stuDB_log.ldf',
SIZE=2mb,
FILEGROWTH=1MB
)
GO
DROP TABLE 表名
USE stuDB --将当前数据库设置为stuDB ,以便在stuDB数据库中建表
GO
IF EXISTS(SELECT * FROM sysobjects WHERE name=’stuInfo’ )
DROP TABLE stuInfo
CREATE TABLE stuInfo /*-创建学员信息表-*/
(
stuName VARCHAR(20) NOT NULL , --姓名,非空(必填)
stuNo CHAR(6) NOT NULL, --学号,非空(必填)
stuAge INT NOT NULL, --年龄,INT类型默认为4个字节
stuID NUMERIC(18,0), --身份证号 NUMERIC (18,0)代表18位数字,小数位数为0
stuSeat SMALLINT IDENTITY (1,1), --座位号,自动编号IDENTITY(起始值,递增量)
stuAddress TEXT --住址,允许为空,即可选输入
)
GO
ALTER TABLE stuInfo
ADD CONSTRAINT PK_stuNo PRIMARY KEY (stuNo)--添加主键约束(stuNo作为主键)
ALTER TABLE stuInfo
ADD CONSTRAINT UQ_stuID UNIQUE (stuID)--添加唯一约束(因为每人的身份证号全国唯一)
ALTER TABLE stuInfo
ADD CONSTRAINT DF_stuAddress
DEFAULT ('地址不详') FOR stuAddress--添加默认约束(如果地址不填,默认为“地址不详”)
ALTER TABLE stuInfo
ADD CONSTRAINT CK_stuAge
CHECK(stuAge BETWEEN 15 AND 40)--添加检查check约束,要求年龄只能在15-40岁之间
ALTER TABLE stuMarks
ADD CONSTRAINT FK_stuNo
FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo)--添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段为stuNo)
数据完整性
可靠性 + 准确性 = 数据完整性
“数据完整性的问题大多是由于设计引起的”
创建表的时候,就应当保证以后数据输入是正确的
——错误的数据、不符合要求的数据不允许输入
创建表:保证数据的完整性 = 实施完整性约束
完整性包括… 列值要求(约束) 整行要求(约束) 域完整性 自定义完整性 实体完整性 引用完整性
实体完整性 约束方法:唯一约束、主键约束、标识列
域完整性 约束方法:限制数据类型、检查约束、外键约束、默认值、非空约束
引用完整性 约束方法:外键约束
自定义完整性 约束方法:规则、存储过程、触发器
SQL Server的数据类型
分类 备注和说明 数据类型 说明
二进制数据类型 存储非字符和文本的数据 Image 可用来存储图像
文本数据类型 字符数据包括任意字母 Char 固定长度的非 Unicode 字符数 据
、符号或数字字符的组合 Varchar 可变长度非 Unicode 数据
Nchar 固定长度的 Unicode 数据
Nvarchar 可变长度 Unicode 数据
Text 存储长文本信息
Ntext 存储可变长度的长文本
日期和时间 日期和时间在单引号内输入 Datetime 日期和时间
数字数据 该数据仅包含数字,包括正 int
smallint 整数
float
real 数字
货币数据类型 用于十进制货币值 Money
Bit数据类型 表示是/否的数据 Bit 存储布尔数据类型
选择主键的原则:
最少性
尽量选择单个键作为主键
稳定性
尽量选择数值更新少的列作为主键
总结
SQL Server创建表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)保证的过程
实体完整性数据行不能存在重复,引用完整性要求子表中的相关项必须在主表中存在
域完整性实现了对输入到特定列的数值的限制
SQL Server中存在五种约束,分别是:主键约束、外键约束、检查约束、默认约束和唯一性约束(唯一性约束将在后续课程中使用SQL语句实现)
创建数据库表需要:确定表的列名、数据类型、是否允许为空,还需要确定主键、必要的默认值、标识列和检查约束
如果建立了主表和子表的关系,则:
——子表中的相关项目的数据,在主表中必须存在;
——主表中相关项的数据更改了,则子表对应的数据项也应当随之
更改;
——在删除子表之前,不能够删除主表;
数据完整性包括了实体完整性、引用完整性、域完整性和自定义完整性
创建数据库表的过程实际上就是实施完整性约束的过程
创建表包括选择字段名称、数据类型、定义是否为空、设置默认值、主键和关系、检查约束等
表中没有合适的列作为主键,可以创建标识列
数据的导入/导出操作属于DTS(数据转换服务)
------------3
SQL和T-SQL
T-SQL = Transact-SQL
T-SQL是SQL的加强版
对功能进行了扩充:如变量说明、流程控制、功能函数
T-SQL的组成
DML(数据操作语言)
——查询、插入、删除和修改数据库中的数据;
——SELECT、INSERT、 UPDATE 、DELETE等;
DCL(数据控制语言)
——用来控制存取许可、存取权限等;
——GRANT、REVOKE 等;
DDL(数据定义语言)
——用来建立数据库、数据库对象和定义其列
——CREATE TABLE 、DROP TABLE 等
变量说明、流程控制、功能函数
——定义变量、判断、分支、循环结构等
——日期函数、数学函数、字符函数、系统函数等
T-SQL中的运算符
运算符 含义
= 等于
> 大于
< 小于
>= 大于或等于
<= 小于或等于
<> 不等于
! 非
like 字符串比较
Is null 为空比较
通配符
通配符 解释 示例
‘_’ 一个字符 A Like 'C_'
% 任意长度的字符串 B Like 'CO_%'
[ ] 括号中所指定范围 C Like '9W0[1-2]'
内的一个字符
[^] 不在括号中所指定 D Like ‘%[A-D][^1-2]'
范围内的一个字符
通配符使用说明
通常与LIKE关键字一起来使用
可以用在检查约束中使用LIKE
在后面的查询语句中还会经常使用到
插入数据行 INSERT [INTO] <表名> [列名] VALUES <值列表>
INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX)
VALUES ('张青裁','上海松江',6,'ZQC@Sohu.com',0)
注意事项1:每次插入一行数据,不可能只插入半行或者几列数据,因此,插入的数据是否有效将按照整行的完整性的要求来检验;注意事项2:每个数据值的数据类型、精度和小数位数必须与相应的列匹配;
注意事项3:不能为标识列指定值,因为它的数字是自动增长的;
注意事项4:如果在设计表的时候就指定了某列不允许为空,则必须插入数据;
注意事项5:插入的数据项,要求符合检查约束的要求
注意事项6:具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值
插入多行数据
INSERT INTO <表名>(列名)
SELECT <列名>
FROM <源表名>
INSERT INTO TongXunLu ('姓名','地址','电子邮件')
SELECT SName,SAddress,SEmail
FROM Students
SELECT (列名)
INTO <表名>
FROM <源表名>
SELECT Students.SName,Students.SAddress,Students.SEmail
INTO TongXunLu
FROM Students
SELECT INTO插入多行数据的时候,如何插入新的标识列?
SELECT IDENTITY(数据类型,标识种子,标识增长量) AS 列名
INTO 新表
FROM 原始表
SELECT Students.SName,Students.SAddress,Students.SEmail,IDENTITY(int,1,1) As StudentID
INTO TongXunLuEX
FROM Students
一次插入多行数据
INSERT INTO <表名>(列名)
SELECT <列名> UNION
SELECT <列名> UNION
……
INSERT STUDENTS (SName,SGrade,SSex)
SELECT '测试女生1',7,0 UNION
SELECT '测试女生2',7,0 UNION
SELECT '测试女生3',7,0 UNION
SELECT '测试女生4',7,0 UNION
SELECT '测试女生1',7,0 UNION
SELECT '测试男生2',7,1 UNION
SELECT '测试男生3',7,1 UNION
SELECT '测试男生4',7,1 UNION
SELECT '测试男生5',7,1
更新数据行
UPDATE <表名> SET <列名 = 更新值>
[WHERE <更新条件>]
UPDATE Students SET SSEX = 0
UPDATE Students
SET SAddress ='北京女子职业技术学校家政班'
WHERE SAddress = '北京女子职业技术学校刺绣班'
UPDATE Scores
SET Scores = Scores + 5
WHERE Scores <= 95
删除数据行
DELETE FROM <表名> [WHERE <删除条件>]
TRUNCATE TABLE <表名>
TRUNCATE TABLE Students = DELETE FROM Students
总结
SQL(结构化查询语言)是数据库能够识别的通用指令集
SQL Server中的通配符经常和LIKE结合使用来进行不精确的限制
WHERE用来限制条件,其后紧跟条件表达式
一次插入多行数据,可以使用INSERT…SELECT…、SELECT…INTO…或者UNION关键字来实现
使用UPDATE更新数据,一般都有限制条件
使用DELETE删除数据时,不能删除被外键值所引用的数据行
SQL分为数据操作语言、数据控制语言和数据定义语言;T-SQL是SQL的扩展
通配符经常与LIKE一起使用来进行非精确的限制;
一次插入多行数据,可以使用INSERT…SELECT…、SELECT…INTO…或者UNION关键字来实现
标识列不能插入指定的数据值
使用UPDATE更新数据,一般都有限制条件
使用DELETE删除数据时,不能删除被外键值所引用的数据行
使用TRUNCATE TABLE来删除所有数据时,效率要比DELETE语句高
上面的数据操作语句在程序中会经常使用到
---------4
什么是查询?
SELECT * FROM SALES
查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来
编写查询语句之前… 要指定数据库 use databases
SELECT语句的一般格式
SELECT [ALL|DISTINCT]<目标表达式>[,<目标表达式>]…
FROM <表名>[,<表名>]…
[WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]
[ORDER BY <列名2>[ASC|DESC];
SELECT 语句——单表查询
选择表中的若干列
查询指定列:用户只对表中的一部分列感兴趣时,通过:SELECT子句的<目标列表达式>中指定要查询的属性
<目标列表达式>中各个列的先后顺序可以与表中的顺序不一致。用户
可以根据应用的需要改变列的显示顺序。
查询全部列
在SELECT关键字后面列出所有列名
如果列的显示与基本表的顺序相同,也可以将
<目标表达式>指定为 *
例3:查询全体学生的详细记录
SELECT Sno,Sname,,Ssex,Sage,Sdept FROM Student;
SELECT * FROM Student;
查询经过计算的值:SELECT子句的<目标表达式>可以为属性列,也可以是表达式。
例4:查询全体学生的姓名及其出生年份。
SELECT Sname,2006-Sage FROM Student
选择表中的若干元组
消除取值重复的行
例6:查询选修了课程的学生的学号
SELECT Sno FROM SC;
该查询结果里包含了许多重复的行。如果想去掉表中的重复行,必须指定DISTINCT短语
SELECT DISTINCT Sno FROM SC;
如果没有指定DISTINCT短语,则缺省为ALL,即保留结果表中取值重复的行
查询满足条件的元组:查询满足指定条件的元组通过WHERE子句实现。WHERE常用的条件如下;
查询条件 谓词
比较 =,<,>,<=,>=, NOT
确定范围 BETWEEN AND
确定集合 IN
字符匹配 LIKE
空值 IS NULL
多重条件 AND,OR
SELECT 语句的例子
例7 查询计算机系全体学生的名单
SELECT Sname FROM Student
WHERE Sdept=‘CS’;
LIKE可以用来进行字符串的匹配。
%:代表任意长度的字符串。例如:a%b表示以a开头,以b结尾的任意长度的字符串。
_:代表单个字符。例如:a_b表示以a开头以b结尾的长度为3的任意字符串。
例9:查询学号为95001的学生的详细情况
SELECT * FROM Student
WHERE Sno LIKE ‘95001’;
例10:查询所有姓刘的学生的情况
SELECT * FROM Student
WHERE Sname LIKE ‘刘%’
逻辑运算符AND和OR可以连接多个查询条件。AND的优先级高于OR。
例11.查询计算机系年龄在20岁以下的学生的姓名
SELECT Sname FROM Student
WHERE Sdept=‘CS’ AND Sage<20;
用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或是降序(DESC)排列,缺省值为升序。
例12.查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。
SELECT Sno,Grade FROM SC
WHERE Cno=‘3’
ORDER BY Grade DESC;
查询
SELECT <列名>
FROM <表名>
[WHERE <查询条件表达式>]
[ORDER BY <排序的列名>[ASC或DESC]
SELECT SCode,SName,SAddress
FROM Students
WHERE SSEX = 0
ORDER BY SCode
数据查询-基础
查询全部的行和列
SELECT * FROM Students
查询部分行
SELECT SCode,SName,SAddress FROM Students
WHERE SAddress = '河南新乡'
数据查询-列名
使用AS来命名列
SELECT SCode AS 学员编号,SName AS学员姓名,SAddress AS 学员地址
FROM Students
WHERE SAddress <> '河南新乡'
SELECT FirstName+'.'+LastName AS '姓名'
FROM Employees
使用=来命名列
SELECT '姓名' = FirstName+'.'+LastName
FROM Employees
数据查询-空行常量列
SELECT SName FROM Students WHERE SEmail IS NULL
使用常量列
SELECT 姓名=SName,地址= SAddress,'河北新龙' AS 学校名称
FROM Students
数据查询-限制行数
限制固定行数
SELECT TOP 5 SName, SAddress
FROM Students WHERE SSex = 0
返回百分之多少行
SELECT TOP 20 PERCENT SName, SAddress
FROM Students WHERE SSex = 0
数据查询-排序
升序排列
SELECT StudentID As 学员编号,(Score*0.9+5) As 综合成绩
FROM Score
WHERE (Score*0.9+5)>60
ORDER BY Score
降序排列
SELECT Au_Lname +'.' +Au_fName AS EMP
From Authors Union
SELECT fName +'.'+ LName AS EMP
From Employee
ORDER BY EMP DESC
按多列排序
SELECT StudentID As 学员编号, Score As 成绩
FROM Score
WHERE Score>60
ORDER BY Score,CourseID
思考:排序中的字段,可以使用表达式吗?
SQL Server中的函数
字符串函数
日期函数
数学函数
系统函数
相当于C语言中的内部函数
字符串函数
这些标量函数对字符串输入值执行操作,返回字符串或数字值。
ASCII NCHAR SOUNDEX CHAR PATINDEX SPACE CHARINDEX REPLACE STR
DIFFERENCE QUOTENAME STUFF LEFT REPLICATE SUBSTRING LEN REVERSE UNICODE LOWER RIGHT UPPER LTRIM RTRIM
字符串函数
函数名 描述 举例
CHARINDEX 用来寻找一个指定的字符串在 SELECT CHARINDEX('ACCP','My Accp Course',1 )
另一个字符串中的起始位置 返回:4
LEN 返回传递给它的字符串长度 SELECT LEN('SQL Server课程')返回:12
LOWER 把传递给它的字符串转换为小写 SELECT LOWER('SQL Server课程')返回:sql server课程
UPPER 把传递给它的字符串转换为大写 SELECT UPPER('sql server课程')返回:SQL SERVER课程
LTRIM 清除字符左边的空格 SELECT LTRIM (' 周智宇 ')返回:周智宇 (后面 的空格保留)
RTRIM 清除字符右边的空格
RIGHT 从字符串右边返回指定数目的字符 SELECT RIGHT('买卖提.吐尔松',3)返回:吐尔松
REPLACE 替换一个字符串中的字符 SELECT REPLACE('莫乐可切.杨可','可','兰')
返回:莫乐兰切.杨兰
STUFF 在一个字符串中,删除指定长度的 SELECT STUFF('ABCDEFG', 2, 3, '我的音乐我的世界 字符,并在该位置插入一个新的字 ')返回:A我的音乐我的世界EFG
符串
日期函数
函数名 描述 举例
GETDATE 取得当前的系统日期 SELECT GETDATE()返回:今天的日期
DATEADD 将指定的数值添加到指定的日期部 SELECT DATEADD(mm,4,’01/01/99’)
分后的日期 返回:以当前的日期格式返回05/01/99
DATEDIFF 两个日期之间的指定日期部分的区别SELECT DATEDIFF(mm,’01/01/99’,’05/01/99’)
返回:4
DATENAME 日期中指定日期部分的字符串形式 SELECT DATENAME(dw,’01/01/2000’)
返回:Saturday
DATEPART 日期中指定日期部分的整数形式 SELECT DATEPART(day, ’01/15/2000’)
返回:15
数学函数
函数名 描述 举例
ABS 取数值表达式的绝对值 SELECT ABS(-43)返回:43
CEILING 返回大于或等于所给数字表达式的 SELECT CEILING(43.5)返回:44
最小整数
FLOOR 取小于或等于指定表达式的最大整数SELECT FLOOR(43.5)返回:43
POWER 取数值表达式的幂值 SELECT POWER(5,2)返回:25
ROUND 将数值表达式四舍五入为指定精度 SELECT ROUND(43.543,1)返回:43.5
Sign 对于正数返回+1,对于负数返回-1,SELECT SIGN(-43)返回:-1
对于0 则返回0
Sqrt 取浮点表达式的平方根 SELECT SQRT(9)返回:3
系统函数
函数名 描述 举例
CONVERT 用来转变数据类型 SELECT CONVERT (VARCHAR (5),12345)返回:字 符串12345
CURRENT_USER 返回当前用户的名字 SELECT CURRENT_USER返回:你登录的用户名
DATALENGTH 返回用于指定表达式的字节数 SELECT DATALENGTH ('中国A盟')返回:7
HOST_NAME 返回当前用户所登录的计算机名字 SELECT HOST_NAME()返回:你所登录的计算机的名 字
SYSTEM_USER 返回当前所登录的用户名称 SELECT SYSTEM_USER返回:你当前所登录的用户名
USER_NAME 从给定的用户I D返回用户名 SELECT USER_NAME(1)返回:从任意数据库中返回 “dbo”
函数
Transact-SQL 编程语言提供三种函数:
行集函数
可以像 SQL 语句中表引用一样使用。有关这些函数的列表的更多信息,请参见行集函数。
聚合函数
对一组值操作,但返回单一的汇总值。有关这些函数的列表的更多信息,请参见聚合函数。
标量函数
对单一值操作,返回单一值。只要表达式有效即可使用标量函数。下表列出了标量函数的分类。
函数分类 解释
配置函数 返回当前配置信息。
游标函数 返回游标信息。
日期和时间函数 对日期和时间输入值执行操作,返回一个字符串、数字或日期和时间值。
数学函数 对作为函数参数提供的输入值执行计算,返回一个数字值。
元数据函数 返回有关数据库和数据库对象的信息。
安全函数 返回有关用户和角色的信息。
字符串函数 对字符串(char 或 varchar)输入值执行操作,返回一个字符串或数字值。
系统函数 执行操作并返回有关 Microsoft? SQL Server? 中的值、对象和设置的信息。
系统统计函数 返回系统的统计信息。
文本和图像函数 对文本或图像输入值或列执行操作,返回有关这些值的信息。
总结
查询将逐行筛选表中的数据,最后符合要求的记录重新组合成“记录集”,记录集的结构类似于表结构
判断一行中的数据项是否为空,使用IS NULL
使用ORDER BY进行查询记录集的排序,并且可以按照多个列进行排序
在查询中,可以使用常量、表达式、运算符
在查询中使用函数,能够像在程序中那样处理查询得到的数据项
数据查询将按照一定的条件对表的的记录进行逐行筛选,然后把符合要求的组合成“记录集”返回给查询的用户,记录集的结构类似于表结构
可以在查询中使用AS子句或者=重命名列名
判断一行中的数据项是否为空,使用IS NULL
使用TOP子句可以限制查询返回的行数
ORDER BY子句用来对查询的结果进行排序,缺省按照升序排列,也可以按降序(DESC)来排列,还可以按照多列来排序
在查询语句中,可以使用常量、表达式和运算符
在查询中使用函数,能够像在程序中那样处理查询得到的数据项
---------------5
模糊查询—LIKE
SELECT * FROM 数据表
WHERE 编号 LIKE '00[^8]%[A,C]%‘
会查询出的编号值为007_AFF
把某一字段中内容为空的记录查询出来
SELECT SName As 姓名 SAddress AS 地址
FROM Students WHERE SAddress IS NULL
BETWEEN 把某一字段中内容在特定范围内的记录查询出来
SELECT StudentID, Score FROM SCore WHERE Score
BETWEEN 60 AND 80
IN 把某一字段中内容与所列出的查询内容列表匹配的记录查询出来
SELECT SName AS 学员姓名,SAddress As 地址 FROM Students WHERE SAddress IN ('北京','广州','上海')
使用聚合函数
为了方便用户,增强检索功能,SQL提供了许多聚合函数,主要有:
COUNT:统计元组个数,以及统计一列中值的个数。
SUM:计算一列值的总和(此列必须是数值型)。
AVG:计算一列值的平均值(此列必须是数值型)。
MAX:求一列值中的最大值。
MIN:求一列值中的最小值。
GROUP BY:将查询结果按某一列或多列值分组,值相等的为一组。
例:查询学生总人数
SELECT COUNT (*) FROM Student;
查询选修了课程的学生的人数
SELECT COUNT (DISTINCT Sno)FROM SC;
查询全体同学的成绩总和
SELECT SUM (Grade)FROM SC;
计算课程号为1的学生的平均分
SELECT AVG(Grade) FROM SC WHERE Cno=‘1’;
查询选修1号课程的学生的最高分
SELECT MAX(Grade) FROM SC WHERE Cno=‘1’;
求各个课程号及其相应的选课人数
SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;
聚合函数
SUM SELECT SUM(ytd_sales) FROM titles WHERE type = 'business'
AVG SELECT AVG(SCore) AS 平均成绩 From Score WHERE Score >=60
MAX、MIN SELECT AVG(SCore) AS 平均成绩, MAX (Score) AS 最高分,
MIN (Score) AS 最低分 From Score WHERE Score >=60
COUNT SELECT COUNT (*) AS 及格人数 From Score
WHERE Score>=60
分组查询—GROUP BY
SELECT CourseID, AVG(Score) AS 课程平均成绩
FROM Score
GROUP BY CourseID
分组查询—多列分组
SELECT StudentID AS 学员编号,CourseID AS 内部测试, AVG(Score) AS 内部测试平均成绩
FROM Score
GROUP BY StudentID,CourseID
分组查询—HAVING
SELECT StudentID AS 学员编号,CourseID AS 内部测试, AVG(Score) AS 内部测试平均成绩
FROM Score
GROUP BY StudentID,CourseID
HAVING COUNT(Score)>1
分组查询—对比
WHERE子句从数据源中去掉不符合其搜索条件的数据
GROUP BY子句搜集数据行到各个组中,统计函数为各个组计算统计值
HAVING子句去掉不符合其组搜索条件的各组数据行
WHERE >> GROUP BY >> HAVING
多表联结查询—分类
内联结(INNER JOIN)
外联结
——左外联结 (LEFT JOIN)
——右外联结 (RIGHT JOIN)
——完整外联结(FULL JOIN)
交叉联结(CROSS JOIN)
多表联结查询—内联结
SELECT Students.SName, Score.CourseID, Score.Score
FROM Students,Score
WHERE Students.SCode = Score.StudentID
多表联结查询—三表联结
SELECT
S.SName AS 姓名, CS.CourseName AS 课程, C.Score AS 成绩
FROM Students AS S
INNER JOIN Score AS C ON (S.SCode = C.StudentID)
INNER JOIN Course AS CS ON (CS.CourseID = C.CourseID)
总结
使用LIKE、BETWEEN、IN关键字,能够进行模糊查询 —— 条件不明确的查询
聚合函数能够对列生成一个单一的值,对于分析和统计通常非常有用
分组查询是针对表中不同的组,分类统计和输出,GROUP BY子句通常会结合聚合函数一起来使用
HAVING子句能够在分组的基础上,再次进行筛选
多个表之间通常使用联结查询
最常见的联结查询是内联结(INNER JOIN),通常会在相关表之间提取引用列的数据项
实体,一般是名词:E-R 图中用矩形表示实体
属性,一般是名词: E-R 图中用椭圆形表示属性
关系,一般是动词: E-R 图中用菱形表示关系
第一范式的目标是确保每列的原 子性
如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
.第二范式 (2nd NF)
如果一个关系满足1NF,并且除了主键以外的其他列,都依赖与该主键,则满足第二范式(2NF)
第二范式要求每个表只描述一件事情
.第三范式 (3rd NF)
如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)
了设计结构良好的数据库,需要遵守一些专门的规则,称为数据库的设计范式 。
第一范式(1NF)的目标:确保每列的原子性。
第二范式(2NF)的目标:确保表中的每列,都和主键相关
第三范式(3NF)的目标:确保每列都和主键列直接相关,而不是间接相关