• 第四天20160729


    --约束
    1.主键约束:PRIMARY KEY。主键不能为NULL,不能重复。通过主键可以在表中找到唯一的一行数据。
    2.非空约束:NOT NULL。列不能为NULL。
    3.检查约束:CHECK。向列中添加与修改数据时,检查值是否合法。
    4.默认值:DEFAULT。当没有向列中添加数据时,Oracle默认向列中添加的数据。
    5.唯一约束:UNIQUE。列中的数据不能重复,可以为NULL。
    6.外键约束:FOREIGN KEY

    --数据库中不能出现同名的元素。

    --删除表:DROP TABLE 表名;
    DROP TABLE USERS;

    CREATE TABLE USERS(
    USER_ID NUMBER(6) PRIMARY KEY,
    USER_NAME VARCHAR2(20) NOT NULL,
    USER_AGE NUMBER(2) CHECK(USER_AGE BETWEEN 20 AND 50),
    USER_SEX CHAR(1 CHAR) DEFAULT '女'
    );

    INSERT INTO USERS VALUES(1,'AA',20,NULL);
    INSERT INTO USERS(USER_ID,USER_NAME,USER_AGE) VALUES(2,'BB',20);

    CREATE TABLE S(
    S_ID NUMBER(6) PRIMARY KEY,
    S_NAME VARCHAR2(20) NOT NULL
    );

    CREATE TABLE C(
    C_ID NUMBER(3) PRIMARY KEY,
    C_NAME VARCHAR2(100) NOT NULL
    );

    CREATE TABLE SC(
    SC_ID NUMBER(8) PRIMARY KEY,
    SC_S_ID NUMBER(6) NOT NULL,
    SC_C_ID NUMBER(3) NOT NULL,
    CONSTRAINT SC_SID_FK FOREIGN KEY(SC_S_ID) REFERENCES S(S_ID),
    CONSTRAINT SC_CID_FK FOREIGN KEY(SC_C_ID) REFERENCES C(C_ID)
    );

    --外键的添加数据:先添加主表中的数据,再添加子表中的数据。
    INSERT INTO S VALUES(1,'AA');
    INSERT INTO C VALUES(1,'JAVA');
    INSERT INTO SC VALUES(1,1,1);
    INSERT INTO SC VALUES(2,1,2);--错误

    --外键的删除数据:先删除子表中的数据,再删除主表中的数据。
    DELETE FROM SC WHERE SC_S_ID=1;
    DELETE FROM S WHERE S_ID=1;

    --联合主键
    --表只能有一个主键,但一个主键可以由多个列组成。
    CREATE TABLE TEST(
    T_NAME VARCHAR2(20),
    T_SEX CHAR(1 CHAR),
    CONSTRAINT TEST_PK PRIMARY KEY(T_NAME,T_SEX)
    );

    --事务:单位时间内的一系列操作,这些操作要么全都成功,要么全都失败。
    COMMIT:提交数据,将对数据库表的操作保存到表中。
    ROLLBACK:回退数据,将数据还原为最初或最后一次提交的状态。

    --SQL语句的分类:
    /*
    1.DML:数据操纵语言。SELECT,INSERT,DELETE,UPDATE
    2.DDL:数据定义语言。CREATE,DROP,ALTER等。
    3.DCL:数据控制语言。COMMIT,ROLLBACK,SAVEPOINT等。
    */

    /*
    事务组成:
    1.可以有多个DML.
    2.只能有一个DDL语句。
    3.只能有一个DCL语句。
    */

    --当异常结束ORACLE会话时,会自动回退事务。
    --当正常结束ORACLE会话时,会自动提交事务。

    --截断表:TRUNCATE TABLE 表名,删除表中所有的数据,但不删除表。删除的数据无法ROLLBACK
    TRUNCATE TABLE STUDENTS;

    --序列:产生一个数字。通常用于自动生成主键。序列的值不能ROLLBACK。
    --创建序列的基本格式:CREATE SEQUENCE 序列名;
    CREATE SEQUENCE STUDENT_ID_SEQ;

    --序列的属性:
    NEXTVAL:获得序列的下一个值,每次使用此属性序列的值都会发生变化。
    CURRVAL:获得序列的当前值。调用此属性不会改变序列的值。

    INSERT INTO STUDENTS(STU_ID,STU_NAME) VALUES(STUDENT_ID_SEQ.NEXTVAL,'AA');

    --视图(伪表)
    --创建语句
    /*
    CREATE [OR REPLACE] VIEW 视图名
    AS
    SELECT 语句;
    */
    CREATE OR REPLACE VIEW V_1
    AS
    SELECT LAST_NAME,JOB_ID,SALARY,
    CASE
    WHEN JOB_ID='IT_PROG' THEN SALARY*1.10
    WHEN JOB_ID='ST_CLERK' THEN SALARY*1.15
    WHEN JOB_ID='SA_REP' THEN SALARY*1.20
    ELSE SALARY
    END AS 新工资
    FROM EMPLOYEES;

    --视图的作用
    1.简化查询
    2.可以提高数据库的安全性

    --视图中没有数据,视图的数据来自于表。

    --索引:可以提高查询的效率,但会降低增删改的效率。
    CREATE INDEX EMP_NAME_INDEX ON EMPLOYEES(LAST_NAME);

    SELECT LAST_NAME
    FROM EMPLOYEES
    WHERE LAST_NAME LIKE '%a%';

    --多表连接
    --查询员工的last_name,department_name
    SELECT LAST_NAME,DEPARTMENT_NAME
    FROM EMPLOYEES , DEPARTMENTS;

    --笛卡尔集
    --行数:表行数的乘积
    --原因:没有连接条件或连接条件不正确。

    --内连接(等值连接):只能查询出满足连接条件的数据。
    --查询员工的last_name,department_name
    SELECT LAST_NAME,DEPARTMENT_NAME
    FROM EMPLOYEES , DEPARTMENTS
    WHERE EMPLOYEES.DEPARTMENT_ID=DEPARTMENTS.DEPARTMENT_ID;

    --查询员工的last_name,job_title(在JOBS表中)
    SELECT LAST_NAME,JOB_TITLE
    FROM EMPLOYEES , JOBS
    WHERE EMPLOYEES.JOB_ID=JOBS.JOB_ID;

    --建议在多表连接时,每个列前面都加表的前缀,可以提高查询效率。
    --查询员工的last_name,department_id,department_name
    SELECT EMP.LAST_NAME,DEPT.DEPARTMENT_ID,DEPT.DEPARTMENT_NAME
    FROM EMPLOYEES EMP , DEPARTMENTS DEPT
    WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID;

    --通常情况下,连接条件的个数为表的个数减一。
    --查询员工的last_name,department_name,city
    SELECT EMP.LAST_NAME,DEPT.DEPARTMENT_NAME,LOC.CITY
    FROM EMPLOYEES EMP,DEPARTMENTS DEPT,LOCATIONS LOC
    WHERE EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID
    AND DEPT.LOCATION_ID=LOC.LOCATION_ID;

    SET LINESIZE 200

    --查询在'Toronto'工作的员工的last_name,job_title,department_name
    SELECT EMP.LAST_NAME,JOB.JOB_TITLE,DEPT.DEPARTMENT_NAME
    FROM EMPLOYEES EMP,JOBS JOB,DEPARTMENTS DEPT,LOCATIONS LOC
    WHERE EMP.JOB_ID=JOB.JOB_ID
    AND EMP.DEPARTMENT_ID=DEPT.DEPARTMENT_ID
    AND DEPT.LOCATION_ID=LOC.LOCATION_ID
    AND LOC.CITY='Toronto';

  • 相关阅读:
    linux 常用命令
    books list
    开发文化,沟通、会议、总结
    编程资源
    敏捷开发流程
    服务器安全部署指南
    服务器应用部署规范
    单元测试
    弱弱的页码问题
    实验A javaScript XML数据操作按姓名查询
  • 原文地址:https://www.cnblogs.com/yzyqqhr/p/5719820.html
Copyright © 2020-2023  润新知