连接表达式:

select *

from student join takes on student.ID = takes.ID;

通过on后面的谓词作为连接条件,相同的属性可以出现两次,也就是等价于:

select *

from student, takes

where student.ID = takes.ID;

内连接:inner join

只保留匹配的元组,会去除新表中的重复属性。

tips: 外连接和关键字 on 共同使用, 内连接和关键字 using 共同使用。

natural join:指明了两表进行自然连接,并且连接是基于两表中所有同名字段的。两个表同名的列不能超过1个。
 join...using:用于两表有同名字段但数据类型不同,或者使用多个同名字段中的某一个做等值连接
 join...on :最为灵活,可以指明连接的条件。
 新加入字段导致自然连接的条件发生变化,修改后变为了指定字段的等值连接。像这种项目中的类似问题,还是不要使用自然连接的好,最开始就使用join...using或join...on避免他人因修改表结构造成的错误。[2]

外连接:outer join

包含 左外连接 右外连接 全外连接

select *

from student natural left outer join takes

where course_id is null;

全外连接:full outer join

select *

from (select *

   from student

   where dept_name = "Computer Science")

   natural full outer join

   (select *

   from takes

   where year = 2015);

视图:

视图也是一个关系。视图的定义和with子句定义关系是类似的,在定义的时候,并不执行sql语句(当然对于物化视图而言,定义的时候就会执行并保存结果),仅仅是如函数一样定义了一个生成表的过程,在实际调用这个过程的时候,再来生成新的表。

create view faculty as

select ID, name, dept_name

from instructor;

对于查询语句,视图符合关系的所有特征,但是视图不一定是可更新的 updatable。

定义关系时的完整性约束

check:在定义关系的时候,check 后面的谓词用于检查表中的记录,任何时刻每条记录都要满足此谓词。

unique:表示后面的属性集合构成候选码。

cascade:级联删除,用于维持参照完整性,也就是一个关系中某个属性的取值集合是另一个关系某个属性的取值集合的子集。

not null: 非空约束

default : 设置默认值

create table course

  (ID varchar(15),

  dept_name varchar(15),

  semester varchar(10) default 'Spring',

  primary key(ID),

  foreign key(dept_name) references department

    on delete set null

    on update cascade,

  check ( semester in ('Spring', 'Summer','Fall','Winter')) );

创建索引:

create index student_ID_index on student(ID);

数据类型:

除了在(一)中有的类型,还有其他类型:[1]

date:日期 '2015-9-28'

time :一天中的时间 '22:09:00'

timestamp:两者结合 '2015-9-28 22:09:00'

clob(10KB) :大的字符数据

blob(2GB) :大的二进制数据

[1] http://www.cnblogs.com/xinchrome/p/4843137.html

[2] http://blog.csdn.net/chenjinlin1/article/details/6570419

数据库语言(二):SQL语法实例整理的更多相关文章

  1. 数据库语言(一):SQL语法实例整理

    数据库系统以一些语句作为输入,并返回一些输出,例如sql查询总是返回一张表,我们定义:具有相同格式的记录的集合是一张表. 考虑大学数据库系统: SQL中的数据类型: char(n) 字符串长度为n   ...

  2. 网络安全从入门到精通 (第二章-2) 后端基础SQL—MySQL数据库简介及SQL语法

    本文内容: 什么是数据库 常见数据库 数据库的基本知识 基本SQL语法 1,什么是数据库? 数据库就是将大量数据保存起来,通过计算机加工,可以高效访问的数据聚合. 数据库就是长期存储在计算机内,有组织 ...

  3. SQL语法粗整理

    1.在同一张表中,对前一条数据进行更新性插入操作,即:

  4. tn文本分析语言(二) 基本语法

    tn是desert和tan共同开发的一种用于匹配,转写和抽取文本的语言.解释器使用Python实现,代码不超过1000行. 本文主要介绍tn的基本语法.高级内容可以参考其他篇章.使用这样的语法,是为了 ...

  5. PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)

    1. 首先要得到该数据库中有哪些表,所用函数 mysql_list_tables(),然后可以将获取的所有表名存到一个数组.----------------该函数由于被弃用   用show table ...

  6. access 数据库创建表SQL语法

    create table R_CAIFA_B13 ( ID AUTOINCREMENT PRIMARY KEY, XB varchar(255), C1 varchar(50), C2 varchar ...

  7. 整理的一些数据库不容易想到的SQL语句实例一

    1.行转列SQL语句 SELECT * FROM ( SELECT [FID] , [Weeks] , [Qty] FROM dbo.TempTable where Weeks is not null ...

  8. 数据库SQL语法到MySQL实操

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname 3.说明:备份sql server--- 创建 ...

  9. {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句

    MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...

随机推荐

  1. java基础知识回顾之java Thread类学习(十)--线程的状态以及转化使用的方法介绍

       线程的概述:         线程是程序的多个执行路径,执行调度的单位,依托于进程存在.线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系 ...

  2. SDUT1500 Message Flood

    以前做过的用的字典树,可是貌似现在再用超内存....求解释... 问了LYN用的map函数做的,又去小小的学了map函数.... http://wenku.baidu.com/view/0b08cec ...

  3. 在UWSGI和NGINX配合的情况下,配置个别目录上传及超时

    笨办法就是多加一个LOCATION. 然后,自定义以下类似参数 client_max_body_size uwsgi_connect_timeout uwsgi_read_timeout server ...

  4. hdu 2486/2580 / poj 3922 A simple stone game 博弈论

    思路: 这就是K倍动态减法游戏,可以参考曹钦翔从“k倍动态减法游戏”出发探究一类组合游戏问题的论文. 首先k=1的时候,必败态是2^i,因为我们把数二进制分解后,拿掉最后一个1,那么会导致对方永远也取 ...

  5. 解决maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e.错误

    POM文件报错maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supp ...

  6. c# 在windows服务中 使用定时器

    由于最近做自动执行的程序,开始做windows服务程序, 在windows服务中如何使用定时器的时候一直失效, 以前是直接拖入timer控件,但是不能直接运行,后来在网上找了一段程序,好使了. //开 ...

  7. lintcode :最长上升连续子序列

    题目: 最长上升连续子序列 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列.(最长上升连续子序列可以定义为从右到左或从左到右的序列.) 样例 ...

  8. Makefile笔记

    一个简单的Makefile描述规则组成: TARGET...:PREREQUISITES... COMMANDS... ... target:规则的目标.通常是程序中间或者最后要生成的文件名,也可以是 ...

  9. darwin转发时,摄像机在3G和4G模式下的参数设置

    darwin转发时,摄像机在3G和4G模式下的参数设置 我们转发的是摄像机的子码流,因为在不同的网络环境下,为了达到当前网络环境下最清晰,最流畅的目标,在转发前要根据使用的是3G还是4G及信号强度来自 ...

  10. 修改 eclipse 文件编码格式

    如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,Eclipse工作空间(workspace)的缺省字符编码是操作系统缺省的编码,简 ...