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学习笔记-gdb

    gdb即GNU debugger,用来调试程序 gdb使用前提 要使用gdb,则需要在编译源代码时候使用-g参数 gcc -g –o test test.c 启动gdb gdb 程序名 [corefi ...

  2. SpringCloud学习(七)高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)

    上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用 准备工作 ...

  3. OpenCV_复制一个或多个ROI图像区域

    在对图像进行处理过程中,我们经常需要对图像的某个或多个感兴趣区域进行处理.在OpenCV中我们能够非常方便地获取指定ROI区域的子图像.下面这段代码就演示了怎样获取指定单个ROI或多个ROI图像区域. ...

  4. Oracle - WITH AS -用于查询当月与上月数据

    注:在之前工作的时候,数据需要根据时间查询出当月值和上月的值. 语法: WITH A AS( SELECT * FROM TABLE ), B AS (SELECT * FROM TABLE)SELE ...

  5. 创建Sqoop作业,报错Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject

    WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P in ...

  6. JSP与Servlet之间的交互,传值

    一.Servlet 首先要明白一点,servlet需要容器的支持才能够运行,如Tomcat.jetty 达到servlet的请求,需要ServletRequest对象和ServletResponse对 ...

  7. ssm中静态文件加载路径

    项目在本地软件和在服务器上的项目路径如果写死,有可能会出现项目在本机上可以访问,架设在服务器上后就不能访问 这儿介绍在ssm框架中使用 @WebServlet(urlPatterns = {},loa ...

  8. python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)

    今日临时总结的内容,可能还有些不正确的地方,初步当做个速查表吧. 类的内置函数(继承object的,自己重写) 内置函数 执行时机 注意点 调用案例 __init__ 实例化对象时 不允许写返回值(r ...

  9. 搞懂Dubbo服务发布与服务注册

    一.前言 本文讲服务发布与服务注册,服务提供者本地发布服务,然后向注册中心注册服务,将服务实现类以服务接口的形式提供出去,以便服务消费者从注册中心查阅并调用服务. 本文源码分析基于org.apache ...

  10. Js 更换html同一父元素下子元素的位置

    //更换两个元素的位置 var exchange=function (el1, el2) { var ep1 = el1[0].parentNode, ep2 = el2[0].parentNode, ...