关系数据库标准语言SQL(一)

声明:最近在准备考试,故整理数据库笔记。

关系数据库标准语言SQL(一)

SQL概述

 SQL是一种完整地数据库语言,其功能涵盖数据定义、数据操纵、数据控制等数据管理的主要需求

 但SQL语言相对比较简洁,其核心动词只有9个

 CREATE,ALTER,DROP

 SELECT,INSERT,DELETE,UPDATE

 GRANT,REVOKE

数据定义

SQL的数据类型

 CHAR(n):定长字符串,长度n由用户指定。省略n时,长度为1,CHAR的全称是CHARACTER。

 VARCHAR(n):变长字符串,最大长度n由用户指定,VARCHAR的全称是CHARACTER VARYING。

 定长和变长字符串的差别主要表现在前者需要固定长度的空间,而后者占用的空间在最大长度范围内是可改变的。

 BIT(n):定长二进位串,长度n由用户指定。省略n时,长度为1

 BIT VARYING(n):变长二进位串,最大长度n由用户指定数据类型。

 INT:整数,其值域依赖于具体实现。INT的全称是INTEGER。

 SMALLINT:小整数,其值域依赖于具体实现,但小于INT的值域。

 DEC(p, d):p位有效数字的定点数,其中小数点右边占d位。DEC的全称是DECIMAL。

 FLOAT(n):精度至少为n位数字的浮点数,其值域依赖于实现。

 REAL:实数,精度依赖于实现数据类型。

 DOUBLE PRECISION:双精度实数,精度依赖于实现,但精度比REAL高  DATE:日期,包括年、月、日,格式为YYYY-MM-DD。

 TIME:时间,包括时、分、秒,格式为HH:MM:SS。TIME(n)可以表示比秒更小的单位,秒后取n位

 TIMESTAMP:时间戳,是DATE与 TIME的结合。

 INTERVAL:时间间隔。SQL允许对DATE、TIME和INTERVAL类型的值进行计算数据类型。

 SQL提供ETRACT(field FROM Var),Var可以是DATE、TIME或TIMESTAMP数据类型的变量,ETRACT函数的功能是从Var中提取字。段 field。 例如,如果d是DATE类型,则ETRACT(YEAR FROM d)返回d中的年份。

模式的定义和删除

模式的定义

 CREATE SCHEMA <模式名> [<模式元素>…]

 创建一个以<模式名>命名的模式,并可以在创建模式的同时为该模式创建或不创建模式元素

 <模式元素>可以是表定义、视图定义、断言定义、授权定义等

 这种格式没有授权其他用户访问创建的模式,以后可以用授权语句授权

 CREATE SCHEMA [<模式名>] AUTHORIZATION <用户名> [<模式元素>…]

 与第一种的区别在于它将创建的模式授权予<用户名>指定的用户

 当<模式名>缺省时,用<用户名>作为模式名

模式删除

 DBA和模式的拥有者可以用DROP SCHEMA删除模式。删除模式的语句格式为:

 DROP SCHEMA <模式名> CASCADE∣RESTRICT

 其中CASCADE和RESTRICT两者必须选择其一

 CASCADE,则删除<模式名>指定模式得同时并删除该模式中的所有数据库对象(基本表、视图、断言等)

 RESTRICT,则仅当<模式名>指定的模式不包含任何数据库对象时才删除指定的模式,否则拒绝删除

表的定义

 CREATE TABLE <表名> (<列名><数据类型> [DEFAULT <缺省值>] [列级约束定义],<列名><数据类型> [DEFAULT <缺省值>] [列级约束定义],…, [<表级约束定义>, …, <表级约束定义>]);

列级约束的定义

NOT NULL:不允许该列取空值

PRIMARY KEY:指明该列是主码

UNIQUE:该列上的值必须惟一

CHECK (<条件>):指明该列的值必须满足的条件,其中<条件>是一个涉及该列的布尔表达式

表级约束的定义

PRIMARY KEY (A1, …, Ak):说明属性列A1, …, Ak构成该关系的主码

UNIQUE (A1, …, Ak):说明属性列A1, …, Ak上的值必须惟一,这相当于说明A1, …, Ak构成该关系的候选码

CHECK (<条件>):说明该表上的一个完整性约束条件

FOREIGN KEY (A1, …, Ak) REFERENCES <外表名> (<外表主码>) [<参照触发动作>]

修改基本表

 ALTER TABLE <表名> [ADD [COLUMN] <列名><数据类型>[列级约束定义]]

[ALTER [COLUMN] <列名> {SET DEFAULT <缺省值> |

DROP DEFAULT}]

[DROP [ COLUMN ] <列名> {CASCADE | RESTRICT}]

[ADD <表约束定义>]

[DROP CONSTRAINT <约束名>{CASCADE | RESTRICT}]

删除基本表

 DROP TABLE <表名> {CASCADE∣RESTRICT}

 其中CASCADE表示及联删除,依赖于表的数据对象(最常见的是视图)也将一同被删除

 RESTRICT表示受限删除,如果基于该表定义有视图,或者有其他表引用该表(如CHECK、FOREIGN KEY等约束),或者该表有触发器、存储过程或函数等,则不能删除

索引的定义

 CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名> [<次序>]{,<列名> [<次序>]})

 <索引名>为建立的索引命名

 <表名>是要建立索引的基本表的名字

 索引可以建在该表的一列或多列上,各列名间用逗号分隔;每个<列名>后可以用<次序>指定索引值的排列次序

 次序可以是ASC(升序)和DESC(降序),缺省值为ASC

 UNIQUE 表示该索引为惟一性索引UNIQUE缺省时,创建的索引为非唯一性索引

 CLUSTER表示建立的索引是聚簇索引,缺省时为非聚簇索引

 创建索引不仅创建索引结构,而且将索引的定义存储在数据字典中

索引删除

 索引—旦建立,就由系统来选择和维护,无需用户干预,但当删除一些不必要的索引时,可用下列语句来实现:

 DROP INDEX <索引名>  删除索引时,系统将删除索引结构,并同时从数据字典中删去有关该索引的定义

SELECT语句介绍

 SELECT语句的一般形式如下:

 SELECT [ALL︱DISTINCT] <选择序列>

 FROM <表引用>, …, <表引用>

 [WHERE <查询条件>]

 [GROUP BY <分组列> {,<分组列>} [HAVING <分组选择条件>]]

 [ORDER BY <排序列> [ASC︱DESC] {, <排序列> [ASC︱DESC]}]

 最基本的结构是SELECT-FROM-WHERE,并且SELECT子句和FROM子句是必须的,其他子句都是可选的

单表查询

SELECT Cno, Cname, Period, CreditFROM Courses;SELECT *FROM Courses;

SELECT子句中的列可以是表达式

SELECT DISTINCT 2019﹣year(Birthday) AS AgeFROM Students;

比较表达式

SELECT *FROM DepartmentsWHERE Dname = '信息工程学院';

BETWEEN表达式

SELECT Sname, SpecialityFROM StudentsWHERE year(Birthday) BETWEEN 1997 AND 1999;

IN表达式

SELECT Sno, SnameFROM StudentsWHERE Speciality IN (‘计算机科学与技术’, ‘软件工程’)

LIKE表达式

SELECT CnameFROM CoursesWHERE Cname LIKE ‘数据%’;

NULL表达式

SELECT Sno, CnoFROM SC

WHERE Grade IS NULL;

排序

SELECT *FROM SC

WHERE Cno=’CS202’ORDER BY Grade DESC;

聚集函数

SELECT MIN (Grade), AVG (Grade), MAX (Grade)FROM SC

WHERE Cno = ‘CS102’;

分组语句group by

SELECT Cno, AVG (Grade)FROM SC

GROUP BY Cno;

SELECT Sno, AVG (Grade)FROM SC

GROUP BY Sno HAVING AVG (Grade)>85;

分组和聚集函数的关系

SELECT Student.Sno, Sname, AVG (Grade)FROM SC, StudentsWHERE Students.Sno = SC. Sno

GROUP BY Students.Sno, Sname

连接查询

SELECT Cname, GradeFROM SC, CoursesWHERE SC.Cno=Courses.Cno AND Sno = ‘201705001’

SELECT Student.Sno, Sname, AVG (Grade)FROM SC, StudentsWHERE Students.Sno = SC. Sno

GROUP BY Students.Sno, Sname

HAVING AVG (Grade)>85;

嵌套查询

SELECT Sno, SnameFROM StudentsWHERE Sex = ‘女’ AND Speciality IN(SELECT SpecialityFROM StudentsWHERE Sname = ‘林艳’);

集合的比较引出的子查询

SELECT Sno, Sname, Speciality, year(Birthday)FROM StudentsWHERE Speciality <>‘软件工程’ AND

year(Birthday)> ALL (SELECT year(Birthday)FROM StudentsWHERE Speciality = ‘软件工程’);

存在量词引出的子查询

SELECT Sno, SnameFROM Students, SC

WHERE Students.Sno=SC.Sno AND Cno=‘CS102’);

SELECT Sno, SnameFROM Students

WHERE Sno IN(SELECT SnoFROM SC

WHERE Cno=‘CS102’);

集合查询

SELECT DISTINCT SnoFROM SC

WHERE Cno=‘CS301’ OR Cno=‘CS306’;

SELECT DISTINCT SnoFROM SC

WHERE Cno=‘CS301’ AND Sno NOT IN (SELECT SnoFROM SC

WHERE Cno= ‘CS306’);

SELECT DISTINCT SnoFROM SC

WHERE Cno=‘CS301’ AND SnoIN (SELECT SnoFROM SC

WHERE Cno=‘CS306’);

插入

INSERT INTO Students

VALUES (‘201816010’, ‘司马煜’, ‘男’, 1999-01-28, ‘2018’, ‘计算数学’, ‘MATH’)

INSERT INTO Cardinf (Card-no, Name, Balance)SELECT Tno, Tname, 100.00FROM TeachersWHERE Dno= ‘IE’;

删除

DELETE FROM StudentsWHERE Sno = ‘201824010’;

DELETE FROM SC

WHERE Sno IN(SELECT SnoFROM StudentsWHERE Speciality=‘软件工程’);

修改

UPDATE TeachersSET Title = ‘副教授’WHERE Tno = ‘B050041’;

UPDATE SC

SET Grade = Grade + 5WHERE Grade<60 AND Sno IN(SELECT SnoFROM StudentsWHERE Speciality=‘软件工程’);

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

推荐阅读更多精彩内容