2019-06-18


数据库中表关系

表与表之间一般存在三种关系,即一对一,一对多,多对多关系。

一对多:一对多关系是建立在两张表之间的关系。 一个表中的一条数据可以对应另一个表中的多条数据。记住:外键永远在多方。外键允许重复,允许含有空值。

一对一:是建立在一对多的基础之上,外键可以在任何一方,需要让外键一方具备唯一约束。

多对多:需要建立一个中间表,中间表里建立两个列,然后需要用这两个列作为这个表的联合主键,然后每个列在作为外键参照各自的表的主键

SQL 语言

什么是SQL?

结构化查询语言(Structured Query Language)简称 SQL(发音:sequal['si:kwəl]),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

SQL 能做什么?

SQL 面向数据库执行查询

SQL 可从数据库取回数据

SQL 可在数据库中插入新的记录

SQL 可更新数据库中的数据

SQL 可从数据库删除记录

SQL 可创建新数据库

SQL 可在数据库中创建新表

SQL 可在数据库中创建存储过程

SQL 可在数据库中创建视图

SQL 可以设置表、存储过程和视图的权限

SQL标准

SQL 是 1986年 10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了 SQL 正式国际标准。1989 年 4 月,ISO 提出了具有完整性特征的 SQL89 标准,1992年 11月又公布了 SQL92 标准,在此标准中,把数据库分为三个级别:基本集、标准集和完全集。在 1999 年推出 99版标准。最新版本为 SQL2016 版。比较有代表性的几个版本:SQL86、SQL92、SQL99。除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的私有扩展!

SQL语言结构

数据查询语言(DQL:Data Query Language)

其语句, 也称为“数据检索语句”, 用以从表中获得数据, 确定数据怎样在应用程序给出。关键字 SELECT 是 DQL(也是所有 SQL)用得最多的动词,其他 DQL 常用的关键字有WHERE,ORDER BY,GROUP BY 和 HAVING。这些 DQL 关键字常与其他类型的 SQL 句一起使用。select......from.....where.....查询数据

数据操作语言(DML:DataManipulation Language)

其语句包括动词 INSERT,UPDATE 和 DELETE。它们分别用于添加,修改和删除表中的行。

insert.......插入一条数据

update.....更新一条数据

delete......删除一条数据

事务处理语言(TCL:Transaction Control Language)

它的语句能确保被 DML 语句影响的表的所有行及时得以更新。

commit.....事物提交

rollback....事物回滚

savepoint..设置回滚点

数据控制语言(DCL:Data Control Language)

它的语句通过 GRANT 或 REVOKE 获得许可,确定单个用户和用户组对数据库对象的访问。

grant...授予用户权限

revork..撤销用户权限

数据定义语言(DDL:Data Definition Language)

定义数据库对象语言,其语句包括动词 CREATE 和 DROP 等。

create.....创建数据库对象

drop.......删除数据库对象

arter......修改数据库对象

rename.....修改数据库对象名称

Oracle中的HR 用户介绍

HR 用户是 Oracle 自带的一个示例用户。在该用户下提供了可供我们练习数据库操作时所使用的表与数据。

DQL 语言:

编写基本SELECT语句

SELECT 语句的作用是从数据库中返回信息。

列选择(投影操作)

能够使用 SELECT 语句的列选择功能选择表中的列,这些列是我们想要用查询返回

的。当我们查询时,可在选择查询的表中指定的列。

行选择(选择操作)

能够使用 SELECT 语句的行选择功能选择表中的行,这些行是我们想要用查询返回

的。能够使用不同的标准限制所看见的行。

连接(多表操作)

能够使用 SELECT 语句的连接功能来集合数据,这些数据虽然被存储在不同的表中,

但是我们可以通过连接查询到该数据。

SELECT语句基本结构

SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

SELECT 确定哪些列。

FROM 确定哪张表。

基本 SELECT 语句

在最简单的形式中,SELECT 语句必须包含下面的内容:

一个 SELECT 子句,指定被显示的列

一个 FROM 子句,指定表,该表包含 SELECT 子句中的字段列表

在语法中

SELECT 是一个或多个字段的列表

* 选择所有的列

DISTINCT 关键字表示禁止重复

column|expression 选择指定的字段或表达式

alias 给所选择的列不同的标题

FROM table 指定包含列的表

选择操作(投影操作)

选择所有列

SELECT * FROM table;

选择指定的列

SELECT columnName,columnName FROM table;

语句语法要求

• SQL 语句对大小写不敏感

• SQL 语句可以写成一行或多行

• 关键字不能简写或分开折行

• 子句通常放在不同的行

• 缩进用于增强可读性

SELECT语句中的算术表达式

用算术运算符创建数字和日期数据的表达式。(+ - * /)

注意:如果对日期进行计算,我们只能对 DATE 和 TIMESTAMP 数据类型使用加和

减操作。

运算符的优先级

• 乘法和除法比加法和减法的优先级高

• 相同优先级的运算符从左到右计算

• 圆括号用于强制优先计算,并且使语句更清晰

定义空值

空值是一个未分配的、未知的,或不适用的值

空值不是 0,也不是空格

空值

如果一行中的某个列缺少数据值,该值被置为空值。空值和 0 或者空格不相同。0 是

一个数字,而空格是一个字符。任何数据类型的列都可以包含空值。可是,某些约束,如,

NOT NULL 和 PRIMARY KEY,防止在列中使用空。

算术表达式中的空值

包含空值的算术表达式计算结果为空。

定义列别名

列别名:

• 改变列标题的名字

• 紧跟在列名后面 – 在列名和别名之间可以有选项 AS 关键字

• 如果别名中包含有空格、或者特殊字符、或者大小写敏感,要求用双引号在 SELECT 列表中的列名后面指定别名,列名和别名之间用空格分开。默认情况下别名标题用大写字母显示。如果别名中包含空格或者特殊字符(例如 # 或 &),或者大小写敏感,将别名放在双引号 (“”) 中。

连字运算符

• 连接列或者字符串到其它的列

• 用两个竖线表示 (||)

• 构造一个字符表达式的合成列

我们能够用连字运算符 (||) ,进行列与列之间、列与算术表达式之间或者列与常数值之间的连接,来创建一个字符表达式。连字运算符两边的列被合并成一个单个的输出列。

文字字符串

文字字符串是包含在 SELECT 列表中的一个字符串,一个数字或者一个日期

• 日期和字符的文字字符串值必须用单引号括起来

• 每个文字字符串在每行输出一次

文字字符串不是列名或别名。对每个返回行打印一次。任意格式文本的文字字符串能够被包含在查询结果中,并且作为 SELECT 列表中的列处理。日期和字符文字 必须 放在单但引号 (' ') 中;数字不需要。

去除重复行

在 SELECT 语句中用 DISTINCT 关键字除去相同的行。

注:为了在结果中除去相同的行,在 SELECT 子句中的 SELECT 关键字后面紧跟 DISTINCT 关键字。

约束和排序数据:

用选择限制行

SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [WHERE condition(s)] ;

WHERE 子句跟着 FROM 子句

WHERE 限制查询满足条件的行

condition 由列名、表达式、常数和比较操作组成限制选择的行

你能够用 WHERE 子句限制从查询返回的行。一个 WHERE 子句包含一个必须满足的条件,WHERE 子句紧跟着 FROM 子句。如果条件是 true,返回满足条件的行。WHERE 子句能够比较列值、文字值、算术表达式或者函数,WHERE 子句由三个元素组成:

列名

比较条件

列名、常量或值列表

字符串和日期

• 字符串和日期的值放在单引号中

• 字符值区分大小写,日期值是格式敏感的

• 日期的默认格式是 DD-MON-RR

• 中文版 Oracle 与英文版 Oracle 对于日期的月份格式有区别。中文版的用 1月 英文版为月份的简写如:January Jan.

在 WHERE 子句中字符串和日期必须包含在单引号 (‘ ’) 中。但是,数字常数不应该包含在单引号中。所有的字符搜索是大小写敏感的。Oracle 数据库以内部数字格式存储日期,表示为:世纪、年、月、日、小时、分和秒。默认的日期显示是 DD-MON-RR。

使用 BETWEEN 条件

BETWEEN 条件: 可以用 BETWEEN 范围条件显示基于一个值范围的行。指定的范围包含一个下限和一个上限。BETWEEN … AND …实际上是由 Oracle 服务器转变为 AND条件: (a >= 下限) AND (a <= 上限), 所以使用 BETWEEN … AND … 并没有性能的提高,只是逻辑上简单。

使用 IN 条件

IN 条件:用 IN 条件在指定的一组值中进行选择。IN ( ... ) 实际上是由 Oracle 服务器转变为一组 OR 条件:a = value1 OR a = value2 OR a = value3,所以使用 IN ( ... ) 并没有得到性能的提高,只是逻辑上简单。

使用 LIKE 条件

• 使用 LIKE 条件执行有效搜索串值的通配符搜索

• 搜索条件既可以包含文字也可以包含数字:

% 表示零个或多个字符

_ 表示一个占位符

LIKE 条件:我们也许不总能知道要搜索的确切的值,但能够选择那些用 LIKE 条件匹配一个字符模板的行。字符模板匹配运算涉及通配符查询。有两个符号 % 和 _ 可以用来构造搜索串。

ESCAPE:可以用 ESCAPE 标识符搜索实际的 % 和 _ 符号。使用 ESCAPE 选项,该选项指定换码符是什么。如果你想要搜索包含‘SA_’的字符串可以使用 ESCAPE 对\表示该符号为转义符号。LIKE '%SA\_%' ESCAPE '\';

使用 NULL 条件

NULL 条件:NULL 条件中包括 IS NULL 条件和 IS NOT NULL 条件。IS NULL 条件用于空值测试。空值的意思是难以获得的、未指定的、未知的或者不适用的。因此,不能用 = 判断,因为 null 不能等于或不等于任何值。IS NOT NULL 测试不是空值。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容