【資料庫】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