一.資料庫簡介

資料庫是數據管理的重要技術,也是計算機的重要分支.常用的資料庫有:Oracle,Mysql,DB2

DBMS(Database Management System)

資料庫管理系統是一種操縱和管理資料庫的大型軟體,用於建立、使用和維護資料庫,簡稱 DBMS。

大部分 DBMS 提供數據定義語言DDL(Data Definition Language)和數據操作語言 DML(Data Manipulation Language),供用戶定義資料庫的模式結構與許可權約束,實現對數據的追加、刪除等操作。

根據存儲模型可將資料庫劃分為關係型資料庫和非關係型數據.。簡單來說,關係模型指的就是二維表格模型,而一個關係型資料庫就是由二維表及其之間的聯繫所組成的一個數據組織。標準數據查詢語言 SQL 就是一種基於關係資料庫的語言,這種語言執行對關係資料庫中數據的檢索和操作。

Oracle Database,又名 Oracle RDBMS,或簡稱 Oracle。是甲骨文公司的一款關係資料庫管理系統。

SQL 語言

SQL(Structured Query Language)為資料庫的語言,它是結構化查詢語言,是一個通用的、功能極強的關係型資料庫語言。它包含三部分:

命令分類操作:

Select篇

表(Table)

1)、表是從屬於用戶的 ,查詢表(用戶名.表名),當前用戶查詢自己的表時,用戶名.

可以省略,其他用戶查詢別的用戶表,不能省略,同時必須存在許可權。

2)、表是邏輯表(概念表),不是物理表

塊(8k) --->區(連續塊)-->段(連續區) -->表(多個段) ,數據段不全是表,表一定是數據段。還有其他段:如索引段

2、表結構

表由表名、欄位(名稱+類型+約束)、記錄 組成(欄位就相當於類中的各種屬性)。與 java 相對應:

二、Scott 用戶表

Scott用戶的4張表

? dept:部門表

? emp:僱員表

? salgrade:工資等級表

? bonus:獎金錶

oracle 命令不區分大小寫(SELECT 與 select), 存儲數據|內容 區分大小寫

  1. 查看錶結構 ,例如:desc emp

  1. 用戶表說明

三、三範式

在設計資料庫時,存在行業的標準,這個標準也稱為條件,即範式 Normal Form。一般遵循三個條件即可,也就是」三範式」(3NF)

? 1NF:是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,

即實體中的某個屬性不能有多個值或者不能有重複的屬性

? 2NF:滿足第二範式必須先滿足第一範式,第二範式要求資料庫表中的每個實例或行必須可以被唯一地區分。

為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。如 emp 表中加上了員

工編號(empno)列,因為每個員工的員工編號是唯一的,因此每個員工可以被唯一區分。

這個唯一屬性列被稱為主關鍵字或主鍵、主碼。同時要求實體的屬性完全依賴於主關鍵字。

即第二範式就是非主屬性非部分依賴於主鍵

? 3NF:必須先滿足第二範式。3NF 要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(deptno)、部門名稱、地址等信息。那麼員工信息表(emp)中列出部門編號後就不能再將部門名稱、部門地址等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三範

式(3NF)也應該構建它,否則就會有大量的數據冗餘。即第三範式就是屬性不依賴

於其它非主屬性。

簡而言之,最終的目的避免數據重複冗餘,1NF列不可再分,最小原子(避免重複);2NF ?主鍵依賴 (確定唯一);3NF消除傳遞依賴(建立主外鍵關聯拆分表)

主鍵:確定一條記錄的唯一性,主鍵不能重複

外鍵列:可能是概念程序員自己控制,主外鍵約束

主外鍵約束:外鍵的值必須是主鍵的值,null,外鍵可重複

四、SELECT

注意:命令不區分大小寫

Sql中的注釋用:--

DQL 查詢語句

1.select *|欄位名1,欄位名2... from 表名; (|代表或者)

select * from 表名 查詢該表中的所有數據

例如:

select * from dept;

select * from emp;

查詢所有員工的姓名

select 欄位名 from 表名;

select ename from emp;

查詢所有員工的姓名,員工編號,上級編號

查詢的數據: ename,empno,mgr

數據來源: emp僱員表

查詢的條件:

select ename, empno, mgr from emp;

查詢所有員工的部門編號

查詢的數據: deptno

來源: dept|emp

select deptno from dept;

select deptno from emp;

所有有員工存在的部門的部門編號

查詢的數據: deptno

來源: emp

去重 distinct

select distinct deptno from emp;

select distinct ename,deptno from emp;

表達式 結果欄位的名字為表達式的名字 值為表達式計算的結果-->計算器

select 1+1 from emp;

select distinct 123*456 from emp;

別名 select 欄位1 as 別名,欄位2 as 別名, 欄位3 別名.. from 表名 ;

別名如果是英文默認大寫,如果想要原樣使用|中文帶空格,在別名的前後""

select distinct 123+456 as "get Sum" from dept;

select distinct 123+456 "求 和" from dept d;

代表字元串 ""原樣輸出 結果欄位名和值原樣字元串輸出

select 哈哈 "123" from emp;

表達式|字元串都是偽列:不是表中真是存在的欄位

字元串的拼接 ||

select a-||-b from dual;

查詢所有員工的姓名添加同一前綴 尚學堂

select 尚學堂||ename "學生姓名" from emp;

虛表: oracle中不是真是存在的表,其中沒有任何數據 dual

select sysdate from dual;


推薦閱讀:
相關文章