推薦學習:
SQL指令是指SQL如何被用來儲存,讀取和處理資料庫之中的表格資料。
常見的SQL指令有如下這些:
(1)作用:將資料從資料庫的表格中選出。能夠讀取表格中一個或數個列的所有資料。
什麼是表格?表格是資料庫內的結構,目的是儲存資料。
(2)語句: select 列名1, 列名2... from 表名
(1)作用:處理資料時,需要找出表格內不同的資料值,即要知道列中有哪些不同的值,而不關心每個值出現的次數。此時用distinct。
(2)語句: select distinct 列名 from 表名
(1)作用:當需要有條件的進行選擇性查詢一些資料時,用到where
(2)語句: select 列名 from 表名 where 條件
(1)作用:where的複雜條件是由兩個或多個簡單條件通過and或or連線而成的。一個SQL語句中可以有無限多個簡單條件的存在。
(2)語句: select 列名 from 表名 where 簡單條件1 and|or 簡單條件2...
(1)作用:in子句,通常跟where配合使用,表示條件在一個不連續的範圍內取值
(2)語句: select 列名 from 表名 where 列名作為條件 in (值1,值2,值3...) exists
(3)補充:in子句括號內如果只有一個值,則相當於...where 列名=值1
(1)作用:in指令是在一個或者數個不連續的值的限制內獲取資料庫中的值,而between是在一個連續的範圍內獲取資料庫中的值。通常也跟where配合使用。
(2)語句: select 列名 from 表名 where 列名 between 值1 and 值2
(1)作用:依據一個模式來找出需要的資料。通常也跟where配合使用。
(2)語句: select 列名 from 表名 where 列名 like {模式}
(3){模式}:
比如 A_B表示A開頭B結尾中間只能有一個字元,ABC%表示ABC開頭的字串,%ABC表示ABC結尾的字串,%ABC%表示所含有ABC這個模式的字串。
(1)作用:將獲取的資料做一個有系統的顯示,即排序顯示,正序或者逆序。
(2)語句: select 列名 from 表名 where 條件 order by 列名[ASC, DESC]
(3)[ ]表示可選,不是必選的。ASC表示從小到大,DESC反之。預設用ASC。
(4)注意:如果存在where,那麼where需要在order by子句的前面。
(5)補充:可以同時對幾個列名進行排序。order by 列名1[ASC, DESC], 列名2[ASC,DESC]。如果對兩個列都選擇從小到大排序,那這個子句的結果是:按照列名1從小到大排。若有好幾個查詢結果的列名1相等,那這幾個結果就按照列名2從小到大排,以此類推。
(1)作用:資料庫中很多內容都是以數位的形式存在,對這些數位做運算時,可以通過一些定義好的函數來直接執行。
(2)常用函數:
AVG:平均值
COUNT:計數
MAX:最大值
MIN:最小值
SUM:總和
(3)語句: select 函數名(列名)from 表名
(1)作用:計數,數出在表格中找到的符合條件的條目一共有幾個。
(2)語句: select count(列名) from 表名
(3)注意:count經常和distinct一起使用,目的是找出表格中有多少個不同的條目。
(1)作用:當我們選不只一個列名且其中至少一個列名有包含函數的運用時,就需要用到group by指令。在這種情況下,需要確定我們有group by所有其他的列名。即:除了有包括函數的列名外,都需要將其放在group by的子句中。
(2)語句: select 列名1 sum(列名2) from 表名 group by 列名1
(1)作用:對函數產生的值來設定條件。having子句是在一個SQL句子的最後。
一個含有having子句的SQL並不一定要包含group by子句。
(2)語句: select 列名1,sum(列名2) from 表名 group by 列名1 having(函數條件)
(3)注意:如果被select的只有函數欄,那就不需要group by子句。
(1)作用:給表和列起別名。
列名的別名:是為了讓SQL產生的結果易讀。
表格的別名:只要在from子句中的表格名後空一格,然後再列出要用的表格別名即可。
即:這兩種別名,都放在要替代的表名或列名的後面,跟表名或列名用空格分開。
(2)語句: select 表別名.列名1 列名1 列別名 from 表名 表別名
(3)注意:列別名不僅可以直接放在列名後面,也可以放在函數後,比如 ...sum(列名) 列別名...
(1)作用:通過兩個表中相同的列,將兩個表連起來。
where子句在表格連線中起了很重要的作用。
如果where使用有誤,很可能得到一個笛卡爾連線(所得兩個表格每兩行之間所有可能的組合)。
(1)作用:
我們常說的左連線也就是內部連線。在內部連線的情況下,需要兩個表格內都有同樣的值,那一筆資料才會被選中。
如果要列出一個表格中每一筆的資料,無論它的值在另一個表中有沒有出現。此時,就需要外部連線:SQL OUTER JOIN。
(2)語句: 外部連線的語法是依資料庫的不同而不同。比如,在Oracle中,where子句中要選出所有資料的那個表格後加上 (+)來表示這個表格中的所有資料我們都需要。
(3)注意:當第二個表格沒有相對的資料時,SQL會傳回NULL。
(1)作用:將由不同列名獲得的結果串連起來。每個資料庫提供的方法可能有所不同:
MySQL:CONCAT()
Oracle:CONCAT(), ||
SQL Server:+
(2)語句: concat(字元1,字元2,字元3...)
表示將字元1,字元2,字元3串連起來。
(3)注意:Oracle的concat()只允許兩個引數;即一次只能將兩個字串串起來。但是可以用||來一次串連其多個字串。
(1)作用:SQL中的substring函數,是用來獲取一個列資料中的其中一部分。
在不同的資料庫中,這個函數名稱不一樣:
MySQL: substr(), substring()
Oracle: substr()
SQL Server: substring()
(2)語句: substr(str, pos)表示選出從第pos位置開始字元。該語法不適用於SQL Server上。
sub(str, pos, len)表示從str的pos位置開始,選出len長度的字串。
(1)作用:trim()函數用來移除掉字串中的字頭或字尾。最常用的是移除字頭或字尾的空白。
在不同的資料庫中,該方法不同:
MySQL:trim(), rtrim(), ltrim()
Oracle:rtrim(), ltrim()
SQL Server:rtrim(), ltrim()
(2)語句: trim([[位置] [要移除的字串] from] 字串)
(3)注意:如果沒有列出要移除的字串是什麼的話,就會移除空白(如果有的話)。
表格處理指令,是指如何使用SQL來處理資料庫中的各個表格,增刪改查等。
(1)作用:在資料庫中建立表格
(2)語句:
create table 表名
( 列名1 屬性,
列名2 屬性,
列名3 屬性 );
(1)作用:用來指定哪些資料可以存入表格中,或者之後藉由alter table語句來指定。
(2)常見的限制有:
not null
unique
check
主鍵(primary key)
外來鍵(Foreign key)
(1)作用:在沒有做出任何限制的情況下,一個列的值是允許有null值的。如果不允許一個列的值含有null,那就需要對那個列做not null的指定。
(2)語句:
create table 表名
(列名1 屬性 not null,
列名2 屬性 not null,
列名3 屬性);
(1)作用:保證一個列中的值都是不一樣的。
(2)語句:
create table 表名
(列名1 屬性 not null unique,
列名2 屬性 not null,
列名3 屬性);
(3)注意:一個被指定為主鍵的列,一定會含有unique特性。但一個unique列並不一定是主鍵。
(1)作用:保證一個列中的所有值都是符合某些條件。
(2)語句:
create table 表名
(列名1 屬性 check(列名1>10) not null unique,
列名2 屬性 not null,
列名3 屬性);
(3)注意:check限制尚未被執行於MySQL資料庫上。
(1)作用:主鍵(primary key)中的每一個值都是表格中的唯一值。
即,它是用來獨一無二地確認一個表格中的每一行值。
主鍵可以是原本資料內的一個列或是一個人造列(和原本的值沒有關係的列位)。
主鍵可以包含一個或多個列位。當主鍵包含多個列位時,稱為組合鍵(composite key)。
(2)語句:
MySQL中:
create table 表名
(列名1 屬性 check(列名1>10) not null unique,
列名2 屬性 not null,
列名3 屬性,
primary key(列名1));
Oracle中:
create table 表名
(列名1 屬性 check(列名1>10) not null unique primary key,
列名2 屬性 not null,
列名3 屬性);
SQL Server中:
create table 表名
(列名1 屬性 check(列名1>10) not null unique primary key,
列名2 屬性 not null,
列名3 屬性);
(3)如何通過改變現有表格架構來設定主鍵的方式:
MySQL: alter table 表名 add primary key(列名2)
Oracle: alter table 表名 add primary key(列名2)
SQL Server: alter table 表名 add primary key(列名2)
(4)注意:在用alter語句新增主鍵之前,需要確認被用當做主鍵的列是否設定為not null。即,主鍵列一定要 not null。
(1)作用:外來鍵是一個或數個指向另外一個表格主鍵的列。
外來鍵的目的是確定值的參考完整性(referential integrity)。即只有被准許的值才會被存入資料庫。
(2)語句:
MySQL中:
create table 表名1
(列名1 屬性 check(列名1>10) not null unique,
列名2 屬性 not null,
列名3 屬性,
primary key(列名1)
foreign key(列名2) references 表名2(主鍵列));
Oracle中:
create table 表名1
(列名1 屬性 check(列名1>10) not null unique primary key,
列名2 屬性 not null,
列名3 屬性 references 表名2(主鍵列));
SQL Server中:
create table 表名1
(列名1 屬性 check(列名1>10) not null unique primary key,
列名2 屬性 not null,
列名3 屬性 references 表名2(主鍵列));
(3)如何通過改變現有表格架構來設定外來鍵的方式:
MySQL: alter table 表名1 add foreign key(列名2) references 表名2(列名2)
Oracle: alter table 表名1 add(constraint xxx) foreign key(列名2) references 表名2(列名2)
SQL Server: alter table 表名1 add foreign key(列名2) references 表名2(列名2)
(1)作用:檢視表可以被當做虛擬表格。與常規的表格不同的是,表格中有實際儲存資料,但檢視是建立在表格之上的一個架構,它本身不實際儲存資料。
(2)語句: create view 檢視名 as SQL語句;
其中,SQL語句可以類似:select 列名 from 表名;
(3)注意:可以用檢視來連線兩個表格。這種情況下,使用者就可以直接由一個檢視表中找出需要的資訊,而不需要從兩個不同的表格中去先做連線動作再查詢。
(1)作用:
索引可以幫助我們從表格中快速的找到需要的資料。
如果一個表格沒有索引,資料庫系統需要將整個報個的資料讀出,這個過程叫table scan。
如有適當的索引存在,資料庫系統就可以先由這個索引去找出需要的資料是在表格中的什麼位置,然後直接去該位置獲取資料,加快了獲取資料的速度。
索引是有利於系統效率的事情。一個索引可以涵蓋一個或多個列。
(2)語句: create index 索引名 on 表名(列名1, 列名2);
(1)作用:表格被建立後,有時需要改變表格的結構。比如,加一列,刪一列,改變列名稱,改變列的屬性等等。
(2)語句: alter 表名 列名 [改變方式]
[改變方式]常見的有:
加一列:add 列名2 屬性
刪一列:drop 列名2
改變列名稱:change 舊列名 新列名 新屬性
改變列的屬性:modify 列名2 新屬性
(1)作用:從資料庫中清除一個表格(刪掉表格)
(2)語句: drop table 表名
(1)作用:清除一個表格中的所有資料(不刪表格)
(2)語句: truncate table 表名
(1)作用:將資料輸入表格中。
(2)語句:
insert into 表名(列1,列2...)values(值1,值2...)
insert into 表名1(列1,列2...)select 列名3,列名4 from 表名2
(1)作用:修改表格中的資料。
(2)語句: update 表名 set 列名1=新值 where 條件
(1)作用:在某些情況下,需要直接由資料庫中去除一些資料。(刪掉的是一行或多行)
(2)語句:delete from 表名 where 條件
如何使用SQL來執行一些較為複雜的運算,以及如何用SQL做這些操作:
排名 rank
中位數 median
累積總計 running total
總和百分比 percent to total
累積總和百分比 cumulative percent to total
(1)作用:目的是將兩個SQL語句的結果合併起來。這個角度來看,union和join類似。
union的一個限制是兩個SQL語句所產生的列位需要是同樣的屬性型別。
另外,當使用union時,我們只會看到不同的資料值,即結果值不重複,類似select distinct。
(2)語句:
SQL 語句1
union
SQL 語句2
(3)注意:如果我們在任何一個SQL語句(或者兩句都一起)用select disinct 列名,那很可能得到完全一樣的結果。
(1)作用:目的也是要將兩個SQL語句的結果合併到一起。
不同的是,union all會將每一筆符合條件的資料都列出來,無論資料值有無重複。結果值可重複。
(2)語句:
SQL 語句1
union all
SQL 語句2
(1)作用:與union類似,intersect也是對兩個SQL語句所產生的結果做處理。
不同的是,union基本是一個OR,而intersect則更像AND。即union是聯集,intersect是並集。
(2)語句:
SQL 語句1
intersect
SQL 語句2
(3)注意:intersect指令,不同的值只會被列出一次。
(1)作用:
mius是指運用在兩個SQL語句上。
先找出第一個SQL語句所產生的結果,然後看這些結果有沒有在第二個SQL語句的結果中。如果有,那這第一筆資料就被去除,而不會在最後的結果中出現。
如果第二個SQL語句所產生的結果並沒有存在於第一個SQL所產生的結果內,那這筆資料也會被拋棄。
(類似於減法?最後只剩下第一個SQL語句中那些只在第一個SQL語句中出現而不會在第二個SQL語句中出現的項)
(2)語句:
SQL 語句1
minus
SQL 語句2
(3)注意:minus指令,不同的值只會被列出一次。
(1)作用:subquery,在一個SQL語句中放入另一個SQL語句。
當我們在where子句或having子句中插入另一個sql語句時,我們就有一個子查詢。
子查詢的作用,第一,可以被用來連線表格。第二,有時子查詢是唯一能夠連線兩個表格的方式。
(2)語句:
select 列名1 from 表名1 where 列名2 [比較運算素] (select 列名2 from 表名2 where 條件)
其中,[比較運算素]可以是相等的運算素(=, >=, >, <=, <),也可以是一個對文字的運算素(LIKE)。
(1)作用:在前面我們用in,>, <, = 等來連線內查詢和外查詢。exists也是其中一個方式。
基本上,exists是用來測試內查詢有沒有產生任何結果。
如果有,系統就會執行外查詢中的SQL。若沒有,那整個SQL語句就不會產生任何結果。
(2)語句: select 列名1 from 表名1 where exists (select 列名2 from 表名2 where 條件)
(1)作用:case用來作為if-then-else之類邏輯的關鍵字。
(2)語句:
select case(列名)
when 條件1 then 結果1
when 條件2 then 結果2
...
[else 結果n]
end
from 表名
(3)補充:條件可以是一個數值或一個公式。else子句不是必須的。
推薦學習:
以上就是一起聊一聊SQL指令、表格處理以及SQL進階知識點總結的詳細內容,更多請關注TW511.COM其它相關文章!