Oracle數據庫

Oracle數據庫 sql

目錄數據庫

1.    數據庫初步    1 函數

2.    select… from…    2spa

3.    過濾where和排序order by數據    2對象

4.    多表查詢    4blog

5.    分組函數(group by,having)    6排序

6.    子查詢    10索引

7.    建立和管理數據表,對錶進行的操做 建立刪除修改表    13事務

8.    數據處理,對數據表中的數據進行處理 增刪改查。    15ip

9.    約束(not null非空,unique惟一性,primary key主鍵,foreign key外鍵,check檢查)    17

 

 

  1. 數據庫初步

    SQL語句分爲如下三種類型:

DML::Data Manipulation Language 數據庫操縱語言

  1. DML用於查詢與修改數據記錄:包括以下SQL語句
  • Insert :添加數據到數據庫中
  • Update:修改數據庫中的數據
  • Delete:刪除數據庫中的數據
  • Select:選擇(查詢)數據

DDL::Data Definition Language 數據庫定義語言

  1. DDL用於定義數據庫的結構,好比建立、修改或刪除數據庫對象,包括以下SQL語句:
  • Create table:建立數據庫表
  • Alter table :更改表結構,添加,刪除,修改列長度
  • Drop table:刪除表
  • Create index:在表上創建索引
  • Drop index:刪除索引

DCL::Data Control Language 數據庫控制語言

  1. DCL用來控制數據庫的訪問,包括以下sql語句:
  • GRANT:授予訪問權限
  • REVOKE:撤銷訪問權限
  • COMMIT:提交事務處理
  • ROLLBACK:事務處理回退
  • SAVEPOINT:設置保存點
  • LOCK:對數據庫的特定部分進行鎖定

 

  1. select… from…
  • 返回表中的所有數據

Select * from employee;

 

  • 返回表中指定列的數據

Select department_id from employee;

 

  • 使用別名,必定要用雙引號,不能使用單引號

Select department_id as "department" from employee;

 

  • 使用distinct,查找不重複數據

Select distinct department_id from employee;

 

  • 顯示錶結構

Distinct employees;

 

  1. 過濾where和排序order by數據
  • 使用where語句過濾掉不知足條件的語句

Select employee_id from employees where department_id=90;

Select employee_id from employees where salary<=3000;

Where語句可跟>,<,>=,<=,=,!=等等,其中字符和日期用單引號'字符串',不能使用雙引號。

 

  • 其餘比較運算
  1. Between…and… 在兩個值之間,包含邊界

Select last_name,salary from employees where salary between 2500 and 3000;

 

  1. In(set): 等於值列表中的一個

Select employee_id ,last_name from employees where manager_id in(101,201);

 

  1. Like:模糊查詢(%表示零個或多個 '_'表示一個)

Select first_name from employees where first_name like '_o%';

表示第二個字符是'o',後邊有零個或多個字符

 

  1. Is null:空值,用來判斷空值

Select last_name from employees where manager_id is null;

 

  1. 邏輯運算:並and ,或or,否not

Select employee_id,last_name from employees where salary>1000 and job_id like '%MAN%';

Select employee_id,last_name from employees where salary>1000 or job_id like '%MAN%';

Select last_name ,job_id from employees where job_id not in ('IT_PROG','ST_CLERK');

 

  1. Order by子句在select語句的結尾

    Asc :升序(ascend默認升序)

    Desc:降序(descend)

Select last_name,job_id,department_id,hire_date from employees order by hire_date;

Select last_name,job_id,hire_date from employees order by hire_date descend;

 

  1. 多個列排序

Select last_name,salary,department_id from employees

order by department_id,salary desc;

先按department_id排序,而後按照salary排序

select last_name,department_id,salary from employees order by salary,department_id desc;

先按salary排序,而後安好department_id排序。

 

  1. 多表查詢
  • 等值查詢

Select employees.department_id,departments.department_id from employees,departments

where employees.department_id=departments.department_id;

查詢兩個數據表中department_id相同的數據

 

  • 多個鏈接條件與and操做符
  • 區分重複的列名

使用表名前綴在多個表中區分相同的列

在不一樣的表中具備相同列名的列能夠用表的別名加以區分。

Select e.employee_id ,e.last_name ,d.department_id,d.location_id from employees e,departments d where e.department_id=d.department_id;

使用別名能夠簡化查詢,

使用表名前綴能夠提升執行效率

 

  • 鏈接多個表

    鏈接n個表,至少須要n-1個鏈接條件,例如:鏈接三個表,至少須要兩個鏈接條件。

select e.last_name,e.salary,j.grade_level from employees e,job_grades j

where e.salary between j.lowest_sal and j.highest_sal;

 

  • 內鏈接和外鏈接
  1. 內鏈接:(典型的聯接運算,使用像=或<,>之類的比較運算符),包括相等鏈接和天然鏈接。內鏈接使用比較運算符根據每一個表共有的列的值匹配兩個表中的行。例如,檢索students和courses表中學生標識號相同的全部行。

    A inner join B on 條件

  2. 外鏈接:外鏈接能夠是左向外鏈接,右向外鏈接或完整外部鏈接。
  • 左鏈接返回左表中的全部行,若是左表中行在右表中沒有匹配行,則結果中右表中的列返回空值。

    A left join B on 條件

  • 右鏈接返回右表中的全部行,若是右表中行在左表中沒有匹配行,則結果中左表中的列返回空值。

    A right join B on 條件

  • 全鏈接:返回左表和右表中的全部行。當某行在另外一表中沒有匹配行,則另外一表中的列返回空值。

    A full join B on 條件

  1. 交叉鏈接:不帶where的子句,表示兩個表的乘積,即A表的每一個數據都對應B表的全部數據。當與笛卡爾積,左表和右表組合。
  • 有where子句每每會先生成兩個錶行數乘積的數據表,而後才根據where條件從中選擇。查詢結果跟等值鏈接的查詢結果是同樣。
  1. 自鏈接,使用本表中數據鏈接查詢

select worker.last_name || 'work for'||manager.last_name

from employees worker,employees manager

where worker.manager_id=manager.employee_id;

首先,先給employees員工起別名,worker,manager,而後查找的是worker.last_name和manager.last_name。條件是worker.manager_id與manager.employee_id相同。

 

  1. 分組函數(group by,having)
  • 什麼是分組函數

    分組函數做用於一組數據,並對一組數據返回一個值。

  • 組函數類型

    Commission_pct:表示忽略空值

    • AVG()求平均值,(數值型數據)
    • SUM()合計,計算總和(數值型數據)
    • MIN()求最小值

    • MAX()求最大值

    • COUNT()計數,返回表中記錄總數(默認不包含空值)

    • COUNT(expr)返回expr不爲空的記錄總數

    • DISTINCT關鍵字,返回非空且不重複的記錄。

    • GROUP BY子句,能夠將表中的數據按照列中的元素進行分組。

      Where和group by是兩個子句。

    • 在group by子句中包含多個列

  • 過濾分組 having子句

    使用having過濾分組,

    • 行已經被分組
    • 使用了組函數
    • 知足having子句中條件的分組將被顯示

    Having後面緊跟組函數:如max(),avg(),min(),count(),sum()等等

    使用having子句

    使用嵌套

     

  1. 子查詢

  • 子查詢(內查詢)在主查詢以前一次執行完成。子查詢的結果被主查詢使用。

注意:

  • 子查詢要包含在括號中
  • 將子查詢放在比較條件的右側
  • 單行操做符對應單行子查詢,多行操做符對應多行子查詢

題目:返回job_id與141號員工相同,salary比143號員工多的員工的姓名,job_id,和工資。

題目:返回公司工資最少的員工的last_name,job_id和salary

題目:查詢最低工資大於50號部門最低工資的部門id和其最低工資

  • 多行子查詢

    返回多行

    使用多行比較操做符

 

  1. 建立和管理數據表,對錶進行的操做

  • Create table語句

    必須指定:表名,列名,數據類型,尺寸

     

  • 使用子查詢建立表,複製表

  • Alter table語句,增刪改

    使用 ALTER TABLE 語句追加, 修改, 或刪除列的語法

    • 增長1列

    • 修改1列

    • 刪除1列

    • 修改列名

  • 刪除表drop table

    數據和結構都被刪除

    全部正在運行的相關事務被提交

    全部相關索引被刪除

    Drop table語句不能回滾。

  • 清空表truncate table

    刪除表中全部的數據

    釋放表的存儲結構

    Truncate 語句不能回滾。

    若是想要回滾數據,能夠使用delete語句

    Delete from emp2;select * from emp2;rollback;select * from emp2;

  • 總結

  1. 數據處理,對數據表中的數據進行處理。

  • Insert 語句語法

    使用insert語句向表中插入數據,

    使用這種語法一次只能向表中插入一條數據。

  • 從其餘表中拷貝數據

    沒必要書寫 VALUES 子句。

    子查詢中的值列表應與 INSERT 子句中的列名對應

  • Update語句語法

    使用update語句更新數據

    能夠一次更新多條數據

    若是省略where子句,則表中的說有數據都將被更新。

    能夠在update語句中使用子查詢

    題目:更新 114號員工的工做和工資使其與205號員工

    相同。

  • 刪除數據delete from table where 條件

    使用 DELETE 語句從表中刪除數據。

    使用where子句刪除指定的記錄,

    若是省略where子句,則表中的所有數據將被刪除

    在delete中使用子查詢

  1. 約束(not null非空,unique惟一性,primary key主鍵,foreign key外鍵,check檢查)

  • 表級約束和列級約束

     

  • Not null約束:保證列值不能爲空,只能定義在列級

    系統命名

    用戶命名

  • Unique約束:只容許值出現1此,除了null能夠屢次出現

    系統命名:

    用戶命名:constraint前要加逗號。

  • Primary key約束

PRIMARY KEY 約束惟一標識數據庫表中的每條記錄。

主鍵必須包含惟一的值。

主鍵列不能包含 NULL 值。

每一個表都應該有一個主鍵,而且每一個表只能有一個主鍵。

系統命名:

用戶命名:

  • Foreign key約束

    一個表中的 FOREIGN KEY 指向另外一個表中的 PRIMARY KEY。

    FOREIGN KEY 約束用於預防破壞表之間鏈接的動做。

    FOREIGN KEY 約束也能防止非法數據插入外鍵列,由於它必須是它指向的那個表中的值之一。

CREATE TABLE Orders

(

Id_O int NOT NULL,

OrderNo int NOT NULL,

Id_P int,

PRIMARY KEY (Id_O),

FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)

)

 

  • Check約束

CHECK 約束用於限制列中的值的範圍。

若是對單個列定義 CHECK 約束,那麼該列只容許特定的值。

若是對一個表定義 CHECK 約束,那麼此約束會在特定的列中對值進行限制。

CREATE TABLE Persons

(

Id_P int NOT NULL CHECK (Id_P>0),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

 

  • 添加和刪除約束,可是不能修改約束

    添加not null約束

    添加主鍵約束

    刪除約束:

    無效化約束:

    激活約束:

    查詢約束:

  • 建立索引:

    CREATE INDEX index_name

    ON table_name (column_name)

相關文章
相關標籤/搜索