1. 程式人生 > >【資料庫】SQL語言全部關鍵字詳解

【資料庫】SQL語言全部關鍵字詳解

SQL語言基本定義


基本型別

SQL表中支援很多固有型別,包括:

型別 含義
char(n) 存放固定長度的字串,使用者指定長度為n。如果沒有使用n個長度則會在末尾新增空格。
varchar(n) 可變長度的字串,使用者指定最大長度n。char的改進版,大多數情況下我們最好使用varchar。
int 整數型別
smallint 小整數型別
numeric(p,d) 定點數,精度由使用者指定。這個數有p位數字(包括一個符號位)d位在小數點右邊。
real ,double precision 浮點數和雙精度浮點數。
float(n) 精度至少位n位的浮點數

特殊關鍵字

SQL中用很多關鍵字來表達CRUD的操作(增刪改查)。在這之外有很多特殊的關鍵字用來表示一些其他的含義,在總結SQL之前我們有必要進行一些瞭解。

型別 含義 示例
primary key 主鍵,後面括號中是作為主鍵的屬性 primary key(student_id)
foreign key references 外來鍵,括號中為外來鍵,references後為外來鍵的表 foreign key(course_id) references Course
not null 不為空,前面為屬性的定義 name varchar(10) not null

SQL插入/刪除/修改語句


SQL語法使用最多的就是查詢,除了查詢語句之外,其他的語句內容都很少。

型別 含義
create table 建立一張表
insert into…values 向表中插入一條資訊
delete from 從表中刪除一條資訊
update…set…where 在where的位置,更新內容為set的值
drop table 刪除表
alter table…add 向表中新增某個屬性
alter table…drop 將表中的某個屬性刪除

create table

create table Student(
    ID varchar(20) not null,
    name varchar(10) not null, 
    age int,
    class varchar(50),
    primary key (ID)
);

建立一張叫做Student的表,表中有四個屬性,ID,姓名,年齡和班級,麼個屬性都有各自的型別。在這張表中主鍵是ID。

insert into…values

insert into Student(ID,name,class) values(10152510302,"Tom","class 1");

向表中新增一行資訊,一個名叫Tom的學生的資訊,因為age值不是not null,也就不是必須的,所以我們不新增age屬性也沒有問題。

delete from

delete form Student where name="Tom";

從表中刪除所有名字叫做Tom的資訊。如果delete from不寫where查詢條件表示清空這張表。

update…set…where

update Student set age=18 where name="Tom";

將所有名字叫做Tom的資訊的年齡設定為18。

drop table

drop table Student;

刪除Student這張表。

alter table…add

alter table Student add sex varchar(5);

向表中新增性別屬性,並且將表中以存放的資訊的sex值設為null。所有通過這種方式新增的屬性都不能被設定為not null型別。

alter table…drop

alter table Student drop class;

從表中將class這一列屬性刪除。

SQL查詢語句


SQL最為常用的就是查詢,我們使用資料庫並從中查找出我們希望的內容。在這個過程中,我們可能要編寫很複雜的語句。這裡我們分類別詳細的總結具體的查詢情況。

單關係查詢

單關係查詢是指只一張表中的內容查詢有關資訊,不涉及其他的表,這是查詢中最為基本的一種情況。我們通過這種情況來總結一些基本的SQL語句編寫方法。下面先給出一些涉及到的關鍵字。

型別 含義
select 表示要查找出的表所含有的屬性
from 表示要操作的表
where 判斷條件,根據該判斷條件選擇資訊
distinct 在select後加入關鍵字distinct表示將結果去重
all 在select後加入關鍵字all表示不去重(預設)
and 在where中使用and表示將判斷條件連線起來
or 在where中使用or表示判斷條件多選一
not 在where中使用not表示判斷條件取反

在下面的查詢語句中,我們仍舊使用Student這張表來進行操作。先回顧一下這張表的欄位。

create table Student(
    ID varchar(20) not null,
    name varchar(10) not null, 
    age int,
    class varchar(50),
    primary key (ID)
);

示例:

select name distinct from Student where age=18 and class="A";

在Student這張表中查詢所有年齡是18歲,並且班級是A的學生的名字,並將結果去重。

多關係查詢

多關係查詢是指在多個表中通過一些操作查找出希望的資訊。除去上面已有的關鍵字,我們還會使用到下面這些。

型別 含義
A,B 在from後面通過逗號連線多張表,表示將這些表進行笛卡兒積運算
natural join 將natural join關鍵字前後的兩張表進行自然連線運算
A join B using(c) 將A和B通過c屬性自然連線

為了能夠進行多關係查詢,我們需要有除了Student的另外一張表。再建一張表,表示上數學課的所有學生的資訊和成績情況。(實際上這兩張表建的都不好,不能滿足基本的幾個正規化,但是為了方便起見用來舉例)

create table Math(
   ID varchar(20) not null,
   name varchar(10) not null,
   sex varchar(5),
   score int,
   primary key(ID)
);

示例:

select score from Student natural join Math where class<>"B" and sex="men";

將Student表和Math表自然連線,所得的結果查詢出不是B班的男生的成績。

附加運算查詢

我們已經總結了單關係和多關係運算的查詢方法,但是隻有這些

型別 含義
as 將as前的關係起一個別名,在此語句中,可以用別名來代指這個表
* 在select中通過: “表名.*” 來表示查找出這個表中所有的屬性
order by 讓查詢結果中的資訊按照給定的屬性排序(預設升序,上小下大)
desc 在order by之後的屬性後使用,表示採用降序排序
asc 在order by之後的屬性後使用,表示採用升序排序(預設)
between 在where中使用between表示一個數在兩個數值之間取值
not between between的反義詞,在兩個數之外取值
union/union all 將兩個SQL語句做並運算,並且自動去重,新增all表示不去重
intersect/intersect all 將兩個SQL語句做交運算,並且自動去重,新增all表示不去重
except/except all 將兩個SQL語句做差運算,並且自動去重,新增all表示不去重
is null 在where中使用is null表示這個值是空值
is not null 在where中使用is not null表示這個值不是空值

示例:

select S.*
from Student as S,Math as M
where S.ID = M.ID

將Student和Math兩張表做笛卡兒積,結果中所有ID相同的資訊,取出他們屬於Student屬性的部分作為結果。

select name
from Student natural join Math
where class="A" and sex="women"
order by score desc;

在Student和Math自然連線的結果中,找出A班的女生的姓名,並且按照成績的降序把名字排列出來。

select name
from Math
where score between 60 and 90;
order by score asc;

在Math表中,找出成績在60分到90分之間的學生姓名,並且將姓名按照成績的升序排列出來。

(select name
from Student natural join Math
where class="A" and sex="women"
order by score desc)
union
(select name
from Math
where score between 60 and 90;
order by score);

將上面兩個查出來的結果做並集,並且去重。

select name
from Student 
where age is null;

在Student表中記錄的年齡值未填寫(為空)的所有人的姓名查出來。

聚集函式運算查詢

已經總結了SQL語句的很多關鍵字,現在我們可任意的進行排序、查詢。但是如果我們要獲得一些與資料相關的統計資訊,但是這些資訊在資料庫中沒有,那麼我們要使用SQL中的聚集函式來進行操作。

型別 含義
avg 平均值
min 最小值
max 最大值
sum 總和
count 計數
distinct 表示將distinct後的屬性去重
group by 將在group by上取值相同的資訊分在一個組裡
having 對group by產生的分組進行篩選,可以使用聚集函式

示例:

select class,avg(score) as avg_score
from Student natural join Math
group by class
having avg(score) < 60;

在Student與Math表自然連線的結果中按照班級分組,並且去除那些班級的平均成績沒到60的班級,剩下的班級和該班成績的平均數(該班成績的平均數這個屬性被重新命名為avg_score)作為一張新表被輸出出來。

 

參考原文:https://blog.csdn.net/quinnnorris/article/details/71056445