【数据库复习】SQL

 

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

 

数据模型:对于数据的描述方式;比如关系数据模型是用二维表来描述,层次数据模型用树来描述数据。

数据模型由三部分组成:

(1)数据结构:定义数据的结构;

(2)数据操作:CRUD;

(3)数据约束:比如键约束、完整性约束等;

 

数据模型介绍

 

1.关系数据模型

 

将数据描述成二维表的形式,例如:

关系模型的特点:

(1)建模方便,操作简单(SQL);

(2)高效性(访问快速)、易用性;

(3)描述数据单一,即用表来表述数据;
 

2.半结构化数据模型

 

将数据描述成类似于XML的形式,例如:


 

3.对象关系模型

 

关系的属性不仅仅是基本数据类型,并且每个关系都有相关的方法;


 

4.层次模型

 

基于树结构的模型,在物理层次进行操作,很不方便;

 

5.网状模型

 

基于图结构的模型,也是在物理层次进行操作,很不方便;

 

关系模型术语

 

关系模型约定:属性具有原子性,即每个属性都是基本的数据类型;

关系:二维表;

属性:每列为一个属性;

元组:每一行为一个元组,即记录;

分量(component):元组的每个属性值就是一个分量;

表模式:由表名、表的属性、属性的数据类型组成;

数据库模式:多个表的模式;

:属性的数据类型;

实例:表就是关系的实例,当然,如果随着时间的改变,表发生改变,但是他仍然是关系的实例;

当前实例 :当前表的数据集;

超键:能够确定一个元组的属性集;

候选键:最小的超键;

主键:设计者选定的候选键;

主属性:包含于候选码的一个属性;比如如果候选码为AB,则主属性可以是A,B,只要包含于候选码的单个属性即可;

一般我们都是通过新建一个虚拟键作为主键,比如学校里有学号,社会上有身份证号,书有书号等;

就上图来说,

关系:account;

属性:account_number、balance;

元组:(A-101,500),....;

第一个元组的第一个分量:A-101;

表模式:account(account_number,balance);

数据库模式未知;

account_number的域:string,balance的域为int;

实例为现在account的这张表;

超键可以为(account_number,balance)、(account_number);

候选键为(account_number);

主键根据设计者自行选定;


问:比较以下两个关系,是否为同一个关系?




答:是的,这两个关系只是把属性的顺序以及元组的顺序改变了,但是他们还是同一个关系,只是表现形式不同;


SQL初步


SQL是专门用于关系模式的查询语言,他是高度抽象化的;

SQL的版本有最早的  ANSI SQL-->SQL92-->SQL99-->SQL2003

现在的各大商业数据库都是有各自版本的SQL,比如SQL Server对应T-SQL,而Oracle对应PL/SQL;

SQL中存在DDL和DML;

SQL默认是基于包的数据库,即允许一个表中存在重复的元组;

SQL不区分大小写,包括关键字,表名,属性名等都是,但是字符串是大小写敏感的;比如:FROM 和 from是一样的,表明Table和tablE是一样的,属性名Attr和attR是一样的;

SQL中的比较运算符:需要注意的是两个运算符,=和<>分别表示相等和不等,不能使用!=来表示不等;

字符串连接运算符:+,即'xiaz'+'dong';

字符串是用单引号括起来的;

 

DDL语句

 

(1)CREATE TABLE创建表模式;

(2)ALTER TABLE 修改表模式,比如:

            ALTER TABLE  t1 ADD age    int;

            ALTER TABLE  t1 DROP age;

(3)DROP TABLE 删除表模式,比如:

            DROP TABLE t1;

 

小知识点:如果想要为某个属性定义默认值,可以在属性声明后面加上 DEFAULT 值;

比如:age int DEFAULT 0;


基本数据类型


(1) INT;

(2)DECIMAL,指定小数点位数,DECIMAL(n,d) 表示一共n位有效数字,d个小数位;

(3)VARCHAR;变长的字符串,比如VARCHAR(5)表示最多长度为5的字符串;

(4)CHAR:固定长度的字符串,比如 CHAR(5)表示长度为5的字符串;

(5)DATE,DATE'2010-02-03'

(6)TIME:时间,由时、分、秒、微秒组成,TIME '14:00:20'  表示 14时00分20秒;

(7)TIMESTAMP:由DATE和TIME组成;

(5)BOOLEAN:TRUE、FALSE、UNKNOWN;

(6)位串BIT;B'0010'


问:CHAR(3)和VARCHAR(3)有什么区别?


答:如下图所示:  虽然这两种数据类型的存储方式不同,但是如果char(3)类型的'a'和varchar(3)类型的'a'是相等的;



注意:SQL中string是用单引号括起来的;


问:数据库和表的关系?


答:数据库中含有多个表,不能单纯的创建表;


问:PRIMARY KEY和UNIQUE有什么区别?


答:PRIMARY KEY 和UNIQUE都表示属性能够区别所有元组,但是PRIMARY KEY 不能存在NULL值,而UNIQUE允许NULL值;


问:类似PRIMARY KEY这种约束声明在哪?


答:可以声明在两个地方,

CREATE TABLE person(

         id               INT            PRIMARY KEY,    

         name        VARCHAR(20),

         ismale      boolean DEFAULT TRUE,

         birth          DATE,

         salary       DECIMAL(6,2)

);

或者

CREATE TABLE person(

         id               INT,    

         name        VARCHAR(20),

         ismale      boolean DEFAULT TRUE,

         birth          DATE,

         salary       DECIMAL(6,2),

  PRIMARY  KEY(id)

);

 

 

示例:

 

 

SQL查询


原始Person表有如下数据:


规范:

SELECT attr1,attr2....attrn

FROM table1

WHERE predicate;

执行顺序:先FROM,再where后SELECT;

AS 可用来重命名属性或关系,比如:

SELECT id AS 学号,name AS 姓名,age AS 年龄,'ECNU' AS 学校

FROM Person

 

运行结果如下所示:

 

 从上图中可以看出,列被重命名,而且还多加了一个“学校”的属性,因此在SELECT 中可以用AS重命名,而且还可以添加新的列;

 

字符串的操作


1.字符串的连接:+

2.字符串的额比较:<,>,<>,=,<=,>=;

3.字符串的模式匹配:%和 _ 分别表示任意多个字符和单个任意字符;比如'xiazdong'匹配'xia%','xia_ _ _ _ _';

    S LIKE P:S匹配模式P时返回true;

    S NOT LIKE P: S不匹配模式P时返回true;

    字符串中两个连续的单引号表示一个单引号,比如'a''a'表示字符串a'a;

    我们可以通过ESCAPE '字符'定义转义字符,比如ESCAPE '\'就表名定义\为转义字符,即\%表示真实的%,而不是模式匹配的%;

            比如:name LIKE 'xia\%\_%' ESCAPE '\'表示\作为转义字符,并且名字是以xia%_开头的字符串;

举例:

如果Person表存在以下数据:


 可以通过如下语句进行查找

SELECT * 

FROM Person

WHERE name LIKE 'xia!%!_%'  ESCAPE '!'

就可以查找到此记录;



SQL日期操作


SQL日期分为:

(1)DATE:由年月日组成,标准格式为'yyyy-MM-dd';

(2)TIME:由小时、分钟、秒组成,标准格式为'HH:mm:ss';

(3)TIMESTAMP:由DATE和TIME组合而成,标准的格式为'yyyy-MM-dd HH:mm:ss';

日期实例:

DATE '2012-04-25' 表示 2012年4月25日;

TIME '14:30:00' 表示14点30分00秒;

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值