zoukankan      html  css  js  c++  java
  • 数据库语言(二):SQL语法实例整理

    连接表达式:

    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

  • 相关阅读:
    Elispse快捷键
    cannot connect to daemon at tcp:5037: cannot connect to 127.0.0.1:5037: 由于目标计算机积极拒绝,无法连接。 (10061)
    android studio如何连接夜神模拟器
    Default Activity Not Found解决方法
    Android ANR log trace日志文件分析
    使用trace文件分析ANR
    ANR日志分析
    并发容器
    git上tag的一些操作
    final关键字与不变性
  • 原文地址:https://www.cnblogs.com/xinchrome/p/4845130.html
Copyright © 2011-2022 走看看