zoukankan      html  css  js  c++  java
  • 第四天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';

  • 相关阅读:
    hihocoder 1049 后序遍历
    hihocoder 1310 岛屿
    Leetcode 63. Unique Paths II
    Leetcode 62. Unique Paths
    Leetcode 70. Climbing Stairs
    poj 3544 Journey with Pigs
    Leetcode 338. Counting Bits
    Leetcode 136. Single Number
    Leetcode 342. Power of Four
    Leetcode 299. Bulls and Cows
  • 原文地址:https://www.cnblogs.com/yzyqqhr/p/5719820.html
Copyright © 2011-2022 走看看