数据库
首页 > 数据库> > DBMS第四篇(上):SQL 查询语言 (第三章)——SQL的组成、基本模式定义、查询基本结构

DBMS第四篇(上):SQL 查询语言 (第三章)——SQL的组成、基本模式定义、查询基本结构

作者:互联网

1. SQL查询语言概述

“In 1986, the American National Standards Institute (ANSI) and the International Organization for Standardization (ISO) published an SQL standard, calledSQL-86. ANSI published an extended standard for SQL, SQL-89, in 1989.
The next version of the standard was SQL-92 standard, followed by SQL:1999, SQL:2003, SQL:2006,and most recently SQL:2008.
The bibliographic notes provide references to these standards.”


标准是企业竞争的制高点

1.1 SQL的组成部分

Data-definition language ——DDL数据定义(描述)语言。提供了定义关系模式、删除关系和修改关系模式的命令。
Data-manipulation Language ——DML数据操作语言,提供了从数据库:查询、插入元组、删除和修改元组的功能
Integrity完整性,The SQL DDL包括了用于指定存储在数据库中的数据必满足完整性约束的命令不允许违反完整性约束的更新
View definitionSQL DDL包括用于定义视图的命令
Transaction control事务控制,指定事务的开始和结束。
Embedded SQL and dynamic SQL嵌入式和动态SQL定义了如何在通用编程语言(如C、c++和Java)中嵌入SQL语句
AuthorizationSQL DDL包括用于指定对关系和视图的访问权限的命令

1.2 Data Definition Language 数据定义语言

SQL DDL, 不只可以指定关系(relations)集,还可以指定每个关系的详细细信息

1.2.1 Basic Types基本类型

类型说明
char(n)用户指定长度为n的固定长度(fixed-length)字符串,若输入不足n个字符,会用空格补全所以char(n)类型的变量,长度永远是n
varchar(n)一个由用户指定的最大长度n可变长度(variable-length) 字符串,若输入不足n个字符,无碍。不会像上面的类型用空格补全。
int一个整数(依赖于机器的整数的有限子集)。
smallint短整型
numeric(p, d)p代表整数位加小数位的总位数, d代表小数位数
real, double precision双精度实数,浮点数和双精度浮点数与机器相关的精度
float(n)一种精度至少为n位的浮点数

空值NULL:
每种类型都可以包含。
表示可能存在,但未知,或根本不存在的缺失值。
在某些情况下,我们可能希望禁止输入空值


1.2.2 如何为表中属性选择恰当的数据类型

一般原则

1.3 Basic Schema Definition基本模式定义

1.create table

在数据库中创建一个关系部门

create table department
	(dept name varchar (20),
	building varchar (15),
	budget numeric (12,2),
	primary key (dept name));

create table命令的一般形式

create table r 
	(A1 D1, 
	A2 D2,
	...,
	An Dn, 
	(integrity-constraint1),
	...,
	(integrity-constraintk ));
	/*
r is the name of the relation n each 
Ai is an attribute name in the schema of relation r n 
Di is the data type of values in the domain of attribute
*/

和c/c++语言类似,分号; 表示一条语句的结束

Integrity Constraints in Create Table

create table instructor 
	( ID char(5), 
	name varchar(20) not null, 
	dept_name varchar(20), 
	salary numeric(8,2),
	primary key (ID), 
 	foreign key (dept_name) references department);

primary key declaration on an attribute automatically ensures not null
属性上的主键声明自动确保不为空

create table course ( 
	 course_id varchar(8) primary key, 
	 title varchar(50), 
	 dept_name varchar(20), 
	 credits numeric(2,0), 
	 foreign key (dept_name) references 
	department) );

主键声明可以与属性声明相结合


2.insert into

新创建的关系最初是空的。
可以使用insert命令将数据加载到关系中。

insert into instructor
	values (10211, ’Smith’, ’Biology’, 66000);

3.delete from

使用delete命令从关系中删除元组

delete from student;

4.drop table

用来从数据库中删除 所被删除关系的所有信息。
这个所有信息包括表本身
比 delete更加猛烈(drastic)

drop table r;

所以,drop r后, 除非用create table命令重新创建,否则不能将元组插入到r中

5.alter table

向现有关系添加属性

alter table r add A D;

6.alter table … drop …

从关系r中删除属性A

alter table r drop A;

许多数据库系统不支持删除属性,但允许删除整个表

1.4 Basic Structure of SQL Queries查询基本结构

	select name
	from instructor
	where dept name = ’Comp. Sci.’ and salary > 70000;

查询将from子句中列出的关系作为输入
可以多个关系作为输入,

按照where和select子句中指定的方式对它们进行操作
在where子句中,可以使用逻辑连接词和and、或or、和否not
同样,比较运算符 <, <=, >, >=, =, <>
where 子句还有很多用法。逐步介绍…

然后生成一个关系作为结果

The select Clause 选择子句(投影)

1.select distinct

找到所有有教员的系名,并删除重复的

select distinct dept_name 
from instructor

默认是不去重的。所以select语句没有distinct关键字,默认不去重
那之所所以默认不去重,
是因为: 去重操作消耗系统资源、用户或许需要看到重复信息

2.select all

关键字all指定不删除重复的。(当然,不用all也是等效的)

select all dept_name 
from instructor

3.select salary * 1.1

select子句还可以包含算术表达式: + - * /

select ID, name, dept name, salary * 1.1
from instructor;

这显示了如果我们给每位教师加薪10%的结果;
注意,它不会导致任何改变教员关系


4.select *

星号 * (asterisk),代表所有属性

select *
from instructor

The where Clause

1.Example

下图是关系Sailors
在这里插入图片描述
选择rating > 8的元组
在这里插入图片描述
在这里插入图片描述

2. between

SQL中,有若干类似英语自然语言的保留字
人性化,改善用户界面,
为自然语言查询作的伏笔.
这是SQL在竞争中获胜的原因之一。

如下,列出loan表中,amount在90000到100000之间的loan-number

select loan-number 
from loan
where amount between 90000 and 100000  -- 闭区间[90000,100000]

The from clause

“The from clause by itself defines a Cartesian product of the relations listed in the clause.
It is defined formally in terms of set theory, but is perhaps best understood as an iterative process that generates tuples for the result relation ofthe from clause”
可以简单的把from理解成一个迭代的过程,一个循环

from 子句的伪码解释:

for each tuple t1 in relation r1
	for each tuple t2 in relation r2
	...
		for each tuple tm in relation rm
			Concatenate t1, t2,..., tm into a single tuple t
			Add t into the result relation

对于上面伪码最后得到的result relation

1.Example

查找计算机科学系教师的教师姓名和课程标识符

select name, course id
from instructor, teaches
where instructor.ID= teaches.ID and instructor.dept name = ’Comp. Sci.’;

执行顺序如下:

  1. 生成from子句中列出的关系的笛卡儿积
  2. 对步骤1的结果应用where子句中指定的谓词(predicates)。
  3. 对于步骤2结果中的每个元组,输出select子句中指定的属性(或表达式的结果)。

此外,如果忽略/注释了where子句,那么返回一个from的两个表的笛卡尔积表,
很大哟

标签:DBMS,name,子句,SQL,模式定义,table,instructor,select
来源: https://blog.csdn.net/m0_46156900/article/details/115525042