SQL(Structured Query Language)结构化查询语言,标准、通用、功能强;
特点:集数据查询Data Query;数据操纵Data Manipulation ;数据定义Data Definition;数据控制Data Control功能于一体
综合统一:DDL;DML;DCL三种语言于一体
高度非过程化:只要提出做什么就好
面向集合的操作方式:操作的对象都是元组的集合
同种语法结构提供多种使用方式:内嵌到c++,java中
简洁、易学易用:
几个动词:
数据查询:SELECT
数据定义:CREATE; DROP; ALTER
数据操纵:INSERT; DELETE; UPDATE
数据控制:GRANT; REVOKE
基本概念:
外模式对应:视图View和部分基本表Base Table
模式:基本表
内模式:存储文件Stored File
视图:一个或者几个基本表导出的表;数据库中只存放图的定义不存放视图对应的数据;虚表
SQL中一个关系对应一个基本表;一个基本表对应一个存储文件;一个表可以带若干索引;索引存放在存储文件中
数据定义:
模式定义:CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
eg:CREATE SCHMA "S-T" AUTHORIZATION WANG
tt:如果没有知道模式名,则隐含为用户名
模式的删除:DROP SCHMA <模式名> <CASCADE | RESTRICT>
eg:DROP SCHEMA ZHANG CASCADE;
tt:CASCADE是级联,表示删除模式同时把该模式中所有数据库对象全部一起删除了
RESTRICT限制,只有当该模式下没有任何下属的对象时候才能执行该删除成功;否则拒绝操作
基本表定义:
CREATE TABLE Student
(
Sno char(9) primary key, /*列级完整性约束条件,Sno是主码*/
Sname char(20) unique, /*Sname取唯一值*/
Ssex char(2),
Sage smallint,
Sdept char(20)
);
CREATE TABLE Course
(
Cno char(4) primary key,
Cname char(4),
Cpno char(4), /*先修课*/
Ccredit smallint,
FOREIGN KEY Cpno REFERENCE Course(Cno) /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/
);
CREATE TABLE SC
(
Sno char(9),
Cno char(4),
Grade smallint,
PRIMARY KEY(Sno,Cno), /*主码由两个属性组成,必须作为表级完整性进行定义*/
FOREIGN KEY(Sno) REFERENCE Student(Sno),
FOREIGN KEY(Sno) REFERENCE Course(Cno)
);
数据类型:
CHAR(N) 长度为n的定长字符串
VARCHAR(n) 最大长度为n的变长字符串
INT 长整数
SMALLINT 短整数
NUMBER(p,d) 定点树,p位数字组成(不包括符号、小数点),小数后面d位数字
REAL 取决于机器的精度的浮点数
Double Precision 双精度取决于机器
FLOAT(n) 浮点数 精度至少为n为数字
DATE 日期 YYYY-MM-DD
TIME 时间 HH:MM:SS
每个基本表都属于一个模式,一个模式包括多个基本表
CREATE TABLE "S-T".Student();
修改基本表:
ALTER TABLE <表名>
[ADD <新列名> <数据类型> <完整性约束>]
[ DROP <完整性约束>]
[ALTER COLUMN<列名> <数据类型>]
删除表:
DROP TABLE Student CASCADE; //删除表有关的视图触发器索引表数据等。 Restrict
索引建立:加快查询速度
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名> (<列名>[ ASC | DESC ])
eg: create unique index Studentsnindex on Student(Sno DESC);
删除索引:DROP INDEX <索引名>
数据查询:
单表查询:select Sno from Student;
DISTANCT 取消重复元组 :select distinct Sno from SC;
别名:select Sname NAME from Student;
满足条件:
比较:= > < >= <= != <> NOT
确定范围: between and、not between and
确定集合:IN,NOT IN
字符串匹配:LIKE,NOT LIKE (%任意长度的字符串;_任意单个字符)
空值:IS NULL ,IS NOT NULL
多重条件:AND、OR、NOT
ORDER BY子句:ASC and DESC排序结果 置于where 子句后面,多个列逗号隔开
GROUP BY子句:查询结果按照某一列或者多列分组,细化聚集函数,HAVING短句指定筛选条件
select Cno, COUNT(Sno)
from SC
GROUP BY Cno;