關係型資料庫之SQL
SQL最早的版本是由IBM開發的,它最初被稱為Sequel。Sequel發展至今,其名稱已經變為SQL(結構化查詢語句)。現在的關係型資料庫產品基本支援SQL語言,SQL已經明顯地確立了自己在作為標準的關係型資料庫語言的地位。
完整性約束
create table department
( dept_name varchar(20),
building varchar(20),
budget numberic(12,2),
primary key(dept_name));
)
所以create_table 命令的通用形式是:
create_table table:
(
A1,D1,
A2, D2,
......
An, Dn,
<完整性約束1>,
......
<完整性約束2>
);
SQL支援許多不同的完整性約束,我們來看看其中幾種簡單的約束,主鍵約束,外來鍵約束,非空約束:
primary key(A1,A2,A3,A4,A5): primary-key 宣告表示屬性A1,A2,A3,A4,A5構成關係的主碼。主碼屬性必須非空且唯一,也就是說沒有一個在主碼屬性上取空值,關係中也沒有兩個元組在所有主碼屬性上取值相同。
foreign key(A1, A2, A3, A4, A5)reference: foreign key 宣告表示關係中任意元組在屬性(A1, A2, A3, A4, A5)上的取值必須對應於關係s中某元組在主碼屬性上的取值。
not null: 一個屬性上的not null約束表明在該屬性上不允許空值。換句話說,此約束把空值排除在該屬性域之外。
insert,delete,drop,alter
首相看看insert的用法,這個命令可幫助我們將書資料載入到關係中,比如:
inster into instructor
values (10211,‘paul‘ ‘math‘,40000 )
其次是drop和delete的區別
drop table r , 這個語句是從資料庫中刪除掉r的所有資訊,包括邏輯設計
delete table r,這個語句保留了關係r,但是刪除全部的元組
其次是alter命令, 這個指令為已有的關係增加屬性,:
alter table r add A D;
alter table drop A;
但是很多資料庫系統並不支援去掉屬性,儘管它們允許去掉整個表。
單關係查詢
先來一個最簡單的查詢,那就是從關係中找出所有的名字:
select name
from instructor
但是某些名字是重複的,我們想去重,我們可以將上述查詢語句重寫為:
select distinct name
from instructor;
select還可以帶含有加減乘除等算術表示式,算術的物件可以是常數或者是元組的屬性,但是這並不會導致我們instructor關係的任何改變。
select ID,name,dept_name,salary * 1.1
from instructor;
where子句允許我們只選出那些在from子句的結果關係中滿足特定謂詞的元組。我們考慮查詢“所有在Computer Science 系並且工資超過70000美元的教師的名字“,該SQL語句可以寫為:
select name
from instructor
where dept_name = 'Comp.Sci' and salary > 70000;
SQL允許在where子句中使用邏輯連詞and, or 和 not。邏輯連詞的運算物件可以是包含比較運算子 <, <=, >, >=, = 和 <>的表示式。
多關係查詢
在我們前面的示例中,我都是隻對單關係表進行查詢。但是在我們日常對工作中,通常需要對多表進行查詢。比如說:找出所有教師的姓名,以及他們所在系的名稱和系所在建築的名稱。
select name, instructor.dept_name,builiding
from instructor, building
where instructor.dept_name = department.dept_name
在instructor中,其外來鍵是dept_name, 被參照關係為department。
所以在這裡,我們要可以一種更通識的方式去記憶:
1. 為from子句中列出的關係產生笛卡爾積。什麼是笛卡爾積呢?通俗一點講,就是將兩張關係的全部元組遍歷合併為一張大表。
2. 在步驟1的結果上應用where子句中指定的邏輯。
3. 對於步驟2結果中的每個元組,輸出select子句中指定的屬性(或者表示式的結果)
自然連線
自然橋接的運算也是作用於兩個關係,併產生一個關係作為結果。在笛卡爾積上,是將第一個關係的每一個元組和第二個關係的所有元組都進行連線,但是自然連線只是考慮那些在兩個關係模式上中都出現的的屬性,並且其屬性的值都相同的元組對。自然連線可以幫助我寫出更簡潔的sql語句:
select name, course_id
from instructor, teaches
where instructor.ID = teaches.ID
自然連線可以幫助簡化語言:
select name, course_id
from instructor natural join teaches;
更名運算
有時候,我們可以想用instructor_name來代替屬性名name:
select name as instructor_name, course_id
from instructor, teaches
where instructor.ID = teaches.ID
as 子句有時候在重新命名關係中特別有用,重新命名關係的一個原因是把一個長的關係名替換為一個短的,這在查詢的其他地方使用起來就更加方便了,我們來寫一個查詢“對於大學中 所有講授課程的的教師,找出他們的姓名以及所講述的的所有課程標示“:
select T.name , S.course_id
from instructor as T, teaches as S
where T.ID = S.ID
字串運算
字串串聯拼接:s || a
字串大小寫轉換:uppper(s), lower(s)
去掉字串後的空格: trim(s)
使用like操作符實現模式匹配:
- 百分號(%)可以匹配任意字串
- 下劃線(_) 匹配任意一個字元
這些運算子號可以進行一些組合,達到我們所期望的模式匹配,下面來舉一些例子
‘Intro%‘ 可以匹配任意以Intro打頭的子串
‘%Comp%‘可以匹配任何以包含‘Comp‘子串的字串
‘__‘匹配只含三個字元的字串
‘_%‘匹配至少含三個字元的字串
在SQL中我們可以用運算比較符like來表達模式,我們可以考慮‘找出所有建築名稱中包含子串‘Waston‘的所有系名‘:
select dept_name
from department
where building like '%Waston'
我們還會在like比較運算子中使用escape關鍵詞來定義轉義字元:
like 'ab\%cd%' escape '\' 匹配所有以‘ab%cd‘開頭的字串
相關文章
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- 關係型資料庫之索引資料庫索引
- SQL與NoSQL(關係型與非關係型)資料庫的區別SQL資料庫
- 關係型資料庫與非關係型資料庫介紹!資料庫
- 關係型資料庫資料庫
- 資料庫入門之3張表對比關係型與非關係型資料庫資料庫
- nodejs之MongoDB 非關係型資料庫NodeJSMongoDB資料庫
- 反DDD模式之關係型資料庫模式資料庫
- 關係型資料庫和非關係型資料庫的區別資料庫
- SQL Server 2016關係型資料庫概覽AZSQLServer資料庫
- 關係型資料庫概要資料庫
- 關係型資料庫原理資料庫
- redis—非關係型資料庫Redis資料庫
- mysqlclient操作MySQL關係型資料庫MySqlclient資料庫
- SQLALchemy操作MySQL關係型資料庫MySql資料庫
- FastAPI(44)- 操作關係型資料庫ASTAPI資料庫
- Node MySQL打造關係型資料庫MySql資料庫
- SQL、Mysql、資料庫到底什麼關係MySql資料庫
- 資料庫——關係型資料庫MySQL--簡單使用資料庫MySql
- 聊聊非關係型資料庫MongoDB索引資料庫MongoDB索引
- 平時常見關係型資料庫資料庫
- 列舉常見的關係型資料庫和非關係型都有那些?資料庫
- 關係型資料庫查詢語言 SQL 和圖資料庫查詢語言 nGQL 對比資料庫SQL
- 關係型和非關係型資料庫一定要對立?達夢資料提供新思路資料庫
- 雲關係型資料庫(Relational Database Service,RDS)資料庫Database
- 關係型資料庫分庫分表系列之一資料庫
- Java資料型別與資料庫欄位型別對應關係Java資料型別資料庫
- MYSQL資料庫型別與JAVA型別對應關係MySql資料庫型別Java
- 批量鎖(適用各種關係型資料庫)資料庫
- 看看關係型資料庫是怎麼吊打Hadoop的資料庫Hadoop
- 關係型資料庫全表掃描分片詳解資料庫
- 分散式關係型資料庫RadonDB體驗歸來分散式資料庫
- 關係型資料庫設計三大正規化資料庫
- 如何將資料從Hadoop匯出到關係型和NoSQL資料庫?HadoopSQL資料庫
- 資料庫多對多表關係資料資料庫
- 關係型資料庫 RDBMS 的舊與新 — 談談 NewSQL資料庫SQL
- 應用開發實踐之關係型資料庫(以MySql為例)小結資料庫MySql
- 並推出了關係型資料庫功能來補充其核心NoSQL資料庫功能資料庫SQL