1. SQL概述

SQL,结构化查询语言,重要性不必在赘述了,基本上开发软件没有不用到的,此外在一些大数据也有广泛的应用。SQL主要包含数据定义语言(DDL)、数据操纵语言(DML)以及数据控制语言(DCL)【感觉没什么太大用处】。SQL不仅支持独立使用还支持嵌入到通用程序设计语言中。其中,DDL主要负责基本表、视图、模式等等的定义修改和删除;DML主要就是查询、更新(插入、删除、修改)表或者视图这些对象,关系代数也基本都会投射到这上面来;DCL主要是创建用户、修改密码、分配权限这些数据库层面上的操作。

在SQL中,关系被称为表,SQL的表有两类:基本表和导出表,基本表就不必解释,导出表即通过查询表达式求值时,直接或者间接从一个或者多个基本表中导出而来,视图表是命名的导出表。

2.数据定义

1)表的创建

关于数据定义,首先就是基本表的创建、修改和删除。SQL使用 CREATE TABLE 语句创建基本表,下面是创建一个Teachers表的SQL语句:

CREATE TABLE Teachers

(Tno           CHAR(7)         PRIMARY KEY,

Tname       CHAR(10)      NOT NULL,

Sex           CHAR(2)        CHECK(Sex = '男' OR Sex ='女'),

Birthday    DATE,

Title           CHAR(6),

Dno          CHAR(4),

FOREIGN KEY (Dno) REFERENCES Departments(Dno)); 

从第二行起即为定义属性的信息,基本格式如:<列名> <类型> [DEFAULT <缺省值>] [<列约束>,…, <列约束>],【统一说明[X]表示可以缺省,而<X>表示需进一步定义】。

第一列是属性名称;

类型代表该列在SQL中的数据类型,而SQL中的内置数据类型包括:CHAR(n) 长度为n的定长字符串,默认为长度1,全称为CHARACTER; VARCHAR(n)最大长度为n的变长字符串,默认长度为1,全称CHARACTER VARYING,VARCHAR与CHAR的主要区别是定长字符串不论你输入字符串是长是短,分配的存储空间是一定的,而变长字符串会根据输入的大小占用的空间是可变的,显然会更加灵活一些;BIT(n)定长二进位串,默认为长度1;BIT VARYING(n) 最大长度为n的变长二进位串,默认长度为1;INT整型,全称INTEGER;SMALLINT小整数;NUMERIC(p,d) p为有效数字的定点数,其中小数点右边占d位;DEC(p,d)全称DECIMAL,好像和NUMERIC没太大区别(未经查证);FLOAT(n) 精度至少为n的浮点数;REAL 实数,其中REAL=FLOAT(24);DOUBLE PRECISION双精度实数,精度比REAL高;DATE日期,包括年月日,格式为YYYY-MM-DD;TIME时间,包括时分秒,格式为HH:MM:SS,TIME(n)可以表示更加精确的单位,意即秒后取n位;TIMESTAMP时间戳,是DATE和TIME的结合,TIMESTAMP(n)表示秒后取n位;INTERVAL时间间隔;

缺省值即定义该列没有赋值时默认的取值,可以省略;列约束可以在每列上定义零个或者多个约束条件,约束该列的取值,例如上面示例中的PRIMARY KEY代表主键,不能取空,不能重复;NOT NULL代表不能为空;CHECK(条件)指明该列的值必须满足的条件,其中<条件>是一个布尔表达式;除此之外,常用的列约束还有UNIQUE表示该列上的值唯一,说明该列是候选码;

最后一行是表约束,常见格式是[,<表约束1>,…,<表约束n>],常见的表约束和列约束大致相同只不过是plus版本,比如主码PRIMARY KEY(A1,…,Ak)代表这些属性共同构成主码,UNIQUE和主码的使用方法差不多。而比较复杂的可能是外码设置上,它具有如下格式:FOREIGN KEY (A1,…,Ak) REFERENCES <外表名称> (<外表的主码>) [<参照的触发动作>],<参照的触发动作>表示违反参照完整性时数据库应该采取什么方式的操作,当然外键声明可以有不止一条,可以将其视为多个列约束,以逗号分开即可。

2)表的修改(添加列、删除列、添加表约束、删除表约束)

而表的修改主要使用ALTER语句,我们可以添加列 ALTER TABLE <表名> ADD [COLUMN] <列定义>,比如在Courses中添加一个新的列Pno表示课程号,可以使用语句

ALTER TABLE Courses ADD Pno CHAR(10) PRIMARY KEY;

有添加列,自然就会有删除列的操作,DROP关键词隆重登场,以后关于删除我们还会用到它哦,基本格式比较简单 ALTER TABLE <表名> DROP [COLUMN] <列名> {CASCADE|RESTRICT},比如我们再把上面添加的列删除:

ALTER TABLE Courses DROP COLUMN Pno;

对于CASCADE表示级联,删除成功后会将依赖于该列的数据库对象(比如视图)一并删除。RESTRICT表示受限,即当该列没有数据库对象依赖时,才能删除成功。

除了添加、删除之外,还能对已存在的列进行表约束的添加和删除:ALTER TABLE <表名> ADD <表约束定义>;ALTER TABLE <表名> DROP CONSTRAINT <表约束定义>;{CASCADE|RESTRICT},其实只要出现删除几乎就会出现它们俩,这是为了保证数据库完整性约束的必要之举。

补充:其实还有一个修改或这删除列的缺省值,ALTER TABLE <表名> ALTER [COLUMN] <列名>  {SET DEFAULT <缺省值> | DROP DEFAULT}

3)表的删除

最喜欢这种简单的SQL语句啦!!

DROP TABLE <表名> {CASCADE|RESTRICT}

摊手,就是这么简介高效。

3.数据查询

查询是最重要的数据库操作,没有之一!而在SQL中查询时通过SELECT语句来实现的。SELECT语句的基本形式为:

SELECT [ALL|DISTINCT] <选择序列>

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

[WHERE <查询条件>]

[GROUP BY <分组列>,…,<分组列> [HAVING <分组选择条件>] ]

[ORDER BY <排序列> [ASC|DESC],…,<排序列> [ASC|DESC]]

好长啊,不过分解来看也就五个语句,分别是SELECT,FROM ,WHERE ,GROUP BY 以及ORDER BY,其中只有SELECT和FROM是必须的,而其他均为可选,我们也按照这个思路进行展开。

1)SELECT+FROM进行简单查询

SELECT即为投影运算,形式为:SELECT [ALL|DISTINCT] <选择序列>,先接ALL或者DISTINCT修饰,分别代表不删除和删除相应的重复行,当然可以不写,默认为ALL咯。选择序列“要选择的属性”,属性之间以逗号分开,如果结果包含所有属性,可以使用*表示。

FROM语句相当于笛卡儿积运算,列出需要查询的基本表和导出表,表之间中间用逗号隔开,基本格式:FROM <表引用>,…,<表引用>,为什么不是表名而是表引用呢?表名只是其中一种表引用,但是因为还用另一种用法,即重命名表名,具体形式为:<表名> [AS] <表别名>,用于SELECT+FROM+WHERE结构中区分重复出现的同一张表。

SELECT+FROM是最基本的查询操作,当然这样只能从同一张表中进行查询,比如在Courses表中查询所有课程的名称,并重命名为X,且删除重复的课程名,具体语句为:

SELECT DISTINCT Cname AS X 

FROM Courses;(关于SQL中分号问题,其实经过我的观察是很开放的,并没有明确的规则来确定是否加分号,可能需要视情而定,但是在程序中嵌入一般都不需要分号,这样会报错的)

2)SELECT+FROM+WHERE进行查询

WHERE可以进行更加复杂的查询,后跟一个布尔表达式,包括比较表达式(>、<、=、>=、<=、<>、!=)、BETWEEN表达式、IN表达式、LIKE表达式等等。我们一一来看,对于比较表达式其实就是比较大小。

例如查寻考试成绩不合格的学生学号:

SELECT DISTINCT Sno

FROM SC

WHERE Grade < 60;

BETWEEN表达式可以表示一个范围,例如查询出生年份在1997-2000年的学生的姓名和专业:

SELECT Sname,Cname

FROM Student

WHERE Year (NOT) BETWEEN 1997 AND 2000;(加上not的表示不在这个范围年份的学生学号或者专业)

BETWEEN AND表达式一般都可以用AND或者OR连接的比较表达式表示。

SELECT Sname,Cname

FROM Student

WHERE Year >= 1997 AND <=2000;(Year < 1997 OR >2000和上面加NOT语句之后表达的意思一样)

 

IN表达式用于判别给定的元素是否在给定的集合中,自然NOT IN表示不在集合中胡返回TRUE。基本形式为<值表达式> [NOT] IN (<值表达式列表>),前面的值表达式通常是属性,后面的值表达式通常就是指具体值,多个值组成所谓的集合,中间用逗号分隔并用括号括住。

例如查询计算机科学与技术和软件工程两个专业的学生学号和姓名

SELECT Sno,Sname

FROM Student

WHERE Speciality IN (‘计算机科学与技术’,‘软件工程’);(字符串表达式记得加上单引号)

LIKE表达式能够模糊地查询出相似的字符串值,最常用的两种是已知若干字符、已知其中若干字符和位置并了解全部字符串的长度。

第一种使用%代表不定长的字符,例如查询所有姓李的学生的姓名

SELECT Sname

FROM Student

WHERE Sname LIKE ‘李%’ (若以李结尾则可改为‘%李’)

%使用时不确定性比较高,信息较多时可以使用_表示一个字符,然后用已知字符和_字符共同表示出目标字符串,例如查询‘数据’开头,并且四个汉字的课程名称

SELECT Cname

FROM Courses

WHERE Cname LIKE ‘数据_ _ _ _’(汉字占两个字符,因此需用四个_表示剩下的两个汉字)

但是想必做过简单开发的同学都知道,这时间肯定会出现转义问题,当你要查的值本省身就'_'或者'%'字符时那就必须要进行‘转义’,就像C语言的 \ 一样,SQL中是ESCAPE语句,比如查询C_开头的课程:

SELECT Cname

FROM Courses

WHERE Cname LIKE 'C\_%' ESCAPE '\'(ESCAPE定义\为转义字符,因此C\_%中的_将被转义,不在作为通配符使用)

此外,还有NULL表达式可以查询属性上是否为空

SELECT Sno

FROM SC

WHERE Grade IS NULL;

 

 

 

 

(三) 结构化查询语言SQL——1的更多相关文章

  1. 数据库入门4 结构化查询语言SQL

    知识内容: 1.了解SQL 2.库.表操作及索引 3.select语句及insert语句 4.update语句与delete语句 5.SQL常用函数 6.多表连接及组合查询 7.视图操作及数据控制 参 ...

  2. 结构化查询语言-SQL

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程 ...

  3. 结构化查询语言(SQL)数据类型

    简要描述一下结构化查询语言中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型. 字符型 VARCHARVS CHAR VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要.他们都是用 ...

  4. Oracle数据库语言——结构化查询语言SQL

    一.数据定义语言DDL 1.创建表空间:CREAT TABLESPACE lyy DATAFILE 'C:/app/lyy.dbf' SIZE 10M;(创建一个10M的表空间,存放在C盘app文件夹 ...

  5. (五) 结构化查询语言SQL——3

    4. 数据更新 1)增 对应INSERT语句.格式为INSERT INTO T[(A1,…,Ak)]  VALUES (C1,…,Ck),其中A代表表T的属性,C代表常量,A可以缺省,此时C必须严格按 ...

  6. (四) 结构化查询语言SQL——2

    3)ORDER BY排序语句 通常,查询的结果是以无序的方式显示的,有时需要将查询结果按照一定次序来进行排序.ORDER BY就可以用上了,例如查询课程号为202的课程成绩的所有信息,并按照成绩降序排 ...

  7. SQL 数据库结构化查询语言

    1.数据库 常见数据库 MySQL:开源免费的数据库,小型的数据库. Oracle:收费的大型数据库,Oracle 公司的产品 DB2:IBM 公司收费的数据库,常应用在银行系统中 SQLServer ...

  8. SQL 结构化查询语言

    SQL 结构化查询语言 一.数据库的必要性: >>作用:存储数据.检索数据.生成新的数据 1)可以有效结构化存储大量的数据信息,方便用户进行有效的检索和访问. 2)可以有效地保持数据信息的 ...

  9. 简单了解SQL(结构化查询语言)

    简单了解SQL(结构化查询语言) 年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际 ...

随机推荐

  1. 【C/C++开发】【VS开发】win32位与x64位下各类型长度对比

    64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂):可以访问大型数据库.本文介绍的是64位下C语言开发程序注意事项. 1. 32 位和 64 ...

  2. 数据结构与算法-stack

    栈的本质是一种线性表,特殊的一种线性表 基本概念 概念 栈是一种特殊的线性表 栈仅能在线性表的一端进行操作 栈顶(Top):允许操作的一端 栈底(Bottom):不允许操作的一端 stack是一种线性 ...

  3. Excel小技巧(随机点名)

    如图,想要做一个随机点名的表格,同样可以石头剪刀布的场合,随机选人. 如何做呢? 第一步,填好想要的数据 第二步,在空的位置输入=INDIRECT("A"&RANDBETW ...

  4. 获得http请求的RequestID

    firefox: F12---network---响应, 请求一个页面:

  5. [bzoj1776][Usaco2010 Hol]cowpol 奶牛政坛_倍增lca

    [Usaco2010 Hol]cowpol 奶牛政坛 题目大意: 数据范围:如题面. 题解: 第一想法是一个复杂度踩标程的算法..... 就是每种政党建一棵虚树,然后对于每棵虚树都暴力求直径就好了,复 ...

  6. 【LOJ】#3094. 「BJOI2019」删数

    LOJ#3094. 「BJOI2019」删数 之前做atcoder做到过这个结论结果我忘了... em,就是\([1,n]\)之间每个数\(i\),然后\([i - cnt[i] + 1,i]\)可以 ...

  7. 结对编程-如何用精简的java代码写出这个系统

    [写在前面]这篇博客是软件工程这门课中要求结对编程.规则是这样的:结对的两个人,分别看对方个人项目代码,2天时间内,分析对方代码优点和缺点.我是来分析凌嘉文同学的代码. 先写一下个人项目中的项目需求, ...

  8. 开发过程遇到的css样式问题记录

    一.移动端 1.部分安卓机圆角border-radius失效,显示为方形状?   background-clip: padding-box; 2.部分安卓机字体图标出现锯齿? 使用iconfont图标 ...

  9. Scala学习九——文件和正则表达式

    一.本章要点 Source.fromFile(...).getLines.toArray输出文件的所有行; Source.fromFile(...).mkString以字符串形式输出文件内容; 将字符 ...

  10. create-react-app创建项目修改配置项的两种方法

    方法一:eject 打开 package.json ,可以看到eject.运行 npm run eject 可以让由create-react-app创建的项目的配置项暴露出来. { ... " ...