您好,登錄后才能下訂單哦!
今天小編給大家分享一下SQL指令、表格處理及SQL進階知識點有哪些的相關知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
SQL指令是指SQL如何被用來儲存,讀取和處理數(shù)據(jù)庫之中的表格資料。
常見的SQL指令有如下這些:
(1)作用:將資料從數(shù)據(jù)庫的表格中選出。能夠讀取表格中一個或數(shù)個列的所有資料。
什么是表格?表格是數(shù)據(jù)庫內(nèi)的結構,目的是儲存資料。
(2)語句: select 列名1, 列名2... from 表名
(1)作用:處理資料時,需要找出表格內(nèi)不同的資料值,即要知道列中有哪些不同的值,而不關心每個值出現(xiàn)的次數(shù)。此時用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配合使用,表示條件在一個不連續(xù)的范圍內(nèi)取值
(2)語句: select 列名 from 表名 where 列名作為條件 in (值1,值2,值3...) exists
(3)補充:in子句括號內(nèi)如果只有一個值,則相當于...where 列名=值1
(1)作用:in指令是在一個或者數(shù)個不連續(xù)的值的限制內(nèi)獲取資料庫中的值,而between是在一個連續(xù)的范圍內(nèi)獲取資料庫中的值。通常也跟where配合使用。
(2)語句: select 列名 from 表名 where 列名 between 值1 and 值2
(1)作用:依據(jù)一個模式來找出需要的資料。通常也跟where配合使用。
(2)語句: select 列名 from 表名 where 列名 like {模式}
(3){模式}:
比如 A_B表示A開頭B結尾中間只能有一個字符,ABC%表示ABC開頭的字符串,%ABC表示ABC結尾的字符串,%ABC%表示所含有ABC這個模式的字符串。
(1)作用:將獲取的資料做一個有系統(tǒng)的顯示,即排序顯示,正序或者逆序。
(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)作用:數(shù)據(jù)庫中很多內(nèi)容都是以數(shù)字的形式存在,對這些數(shù)字做運算時,可以通過一些定義好的函數(shù)來直接運行。
(2)常用函數(shù):
AVG:平均值
COUNT:計數(shù)
MAX:最大值
MIN:最小值
SUM:總和
(3)語句: select 函數(shù)名(列名)from 表名
(1)作用:計數(shù),數(shù)出在表格中找到的符合條件的條目一共有幾個。
(2)語句: select count(列名) from 表名
(3)注意:count經(jīng)常和distinct一起使用,目的是找出表格中有多少個不同的條目。
(1)作用:當我們選不只一個列名且其中至少一個列名有包含函數(shù)的運用時,就需要用到group by指令。在這種情況下,需要確定我們有group by所有其他的列名。即:除了有包括函數(shù)的列名外,都需要將其放在group by的子句中。
(2)語句: select 列名1 sum(列名2) from 表名 group by 列名1
(1)作用:對函數(shù)產(chǎn)生的值來設定條件。having子句是在一個SQL句子的最后。
一個含有having子句的SQL并不一定要包含group by子句。
(2)語句: select 列名1,sum(列名2) from 表名 group by 列名1 having(函數(shù)條件)
(3)注意:如果被select的只有函數(shù)欄,那就不需要group by子句。
(1)作用:給表和列起別名。
列名的別名:是為了讓SQL產(chǎn)生的結果易讀。
表格的別名:只要在from子句中的表格名后空一格,然后再列出要用的表格別名即可。
即:這兩種別名,都放在要替代的表名或列名的后面,跟表名或列名用空格分開。
(2)語句: select 表別名.列名1 列名1 列別名 from 表名 表別名
(3)注意:列別名不僅可以直接放在列名后面,也可以放在函數(shù)后,比如 ...sum(列名) 列別名...
(1)作用:通過兩個表中相同的列,將兩個表連起來。
where子句在表格連接中起了很重要的作用。
如果where使用有誤,很可能得到一個笛卡爾連接(所得兩個表格每兩行之間所有可能的組合)。
(1)作用:
我們常說的左連接也就是內(nèi)部連接。在內(nèi)部連接的情況下,需要兩個表格內(nèi)都有同樣的值,那一筆資料才會被選中。
如果要列出一個表格中每一筆的資料,無論它的值在另一個表中有沒有出現(xiàn)。此時,就需要外部連接:SQL OUTER JOIN。
(2)語句: 外部連接的語法是依數(shù)據(jù)庫的不同而不同。比如,在Oracle中,where子句中要選出所有資料的那個表格后加上 (+)來表示這個表格中的所有資料我們都需要。
(3)注意:當?shù)诙€表格沒有相對的資料時,SQL會傳回NULL。
(1)作用:將由不同列名獲得的結果串連起來。每個數(shù)據(jù)庫提供的方法可能有所不同:
MySQL:CONCAT()
Oracle:CONCAT(), ||
SQL Server:+
(2)語句: concat(字符1,字符2,字符3...)
表示將字符1,字符2,字符3串連起來。
(3)注意:Oracle的concat()只允許兩個參數(shù);即一次只能將兩個字符串串起來。但是可以用||來一次串連其多個字符串。
(1)作用:SQL中的substring函數(shù),是用來獲取一個列資料中的其中一部分。
在不同的數(shù)據(jù)庫中,這個函數(shù)名稱不一樣:
MySQL: substr(), substring()
Oracle: substr()
SQL Server: substring()
(2)語句: substr(str, pos)表示選出從第pos位置開始字符。該語法不適用于SQL Server上。
sub(str, pos, len)表示從str的pos位置開始,選出len長度的字符串。
(1)作用:trim()函數(shù)用來移除掉字符串中的字頭或字尾。最常用的是移除字頭或字尾的空白。
在不同的數(shù)據(jù)庫中,該方法不同:
MySQL:trim(), rtrim(), ltrim()
Oracle:rtrim(), ltrim()
SQL Server:rtrim(), ltrim()
(2)語句: trim([[位置] [要移除的字符串] from] 字符串)
(3)注意:如果沒有列出要移除的字符串是什么的話,就會移除空白(如果有的話)。
表格處理指令,是指如何使用SQL來處理數(shù)據(jù)庫中的各個表格,增刪改查等。
(1)作用:在數(shù)據(jù)庫中創(chuàng)建表格
(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限制尚未被執(zhí)行于MySQL數(shù)據(jù)庫上。
(1)作用:主鍵(primary key)中的每一個值都是表格中的唯一值。
即,它是用來獨一無二地確認一個表格中的每一行值。
主鍵可以是原本資料內(nèi)的一個列或是一個人造列(和原本的值沒有關系的列位)。
主鍵可以包含一個或多個列位。當主鍵包含多個列位時,稱為組合鍵(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)如何通過改變現(xiàn)有表格架構來設定主鍵的方式:
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)作用:外來鍵是一個或數(shù)個指向另外一個表格主鍵的列。
外來鍵的目的是確定值的參考完整性(referential integrity)。即只有被準許的值才會被存入數(shù)據(jù)庫。
(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)如何通過改變現(xiàn)有表格架構來設定外鍵的方式:
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)作用:視圖表可以被當做虛擬表格。與常規(guī)的表格不同的是,表格中有實際存儲資料,但視圖是建立在表格之上的一個架構,它本身不實際存儲資料。
(2)語句: create view 視圖名 as SQL語句;
其中,SQL語句可以類似:select 列名 from 表名;
(3)注意:可以用視圖來連接兩個表格。這種情況下,使用者就可以直接由一個視圖表中找出需要的信息,而不需要從兩個不同的表格中去先做連接動作再查找。
(1)作用:
索引可以幫助我們從表格中快速的找到需要的資料。
如果一個表格沒有索引,數(shù)據(jù)庫系統(tǒng)需要將整個報個的資料讀出,這個過程叫table scan。
如有適當?shù)乃饕嬖?,?shù)據(jù)庫系統(tǒng)就可以先由這個索引去找出需要的資料是在表格中的什么位置,然后直接去該位置獲取資料,加快了獲取資料的速度。
索引是有利于系統(tǒng)效率的事情。一個索引可以涵蓋一個或多個列。
(2)語句: create index 索引名 on 表名(列名1, 列名2);
(1)作用:表格被建立后,有時需要改變表格的結構。比如,加一列,刪一列,改變列名稱,改變列的屬性等等。
(2)語句: alter 表名 列名 [改變方式]
[改變方式]常見的有:
加一列:add 列名2 屬性
刪一列:drop 列名2
改變列名稱:change 舊列名 新列名 新屬性
改變列的屬性:modify 列名2 新屬性
(1)作用:從數(shù)據(jù)庫中清除一個表格(刪掉表格)
(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)作用:在某些情況下,需要直接由數(shù)據(jù)庫中去除一些資料。(刪掉的是一行或多行)
(2)語句:delete from 表名 where 條件
如何使用SQL來執(zhí)行一些較為復雜的運算,以及如何用SQL做這些操作:
排名 rank
中位數(shù) median
累積總計 running total
總和百分比 percent to total
累積總和百分比 cumulative percent to total
(1)作用:目的是將兩個SQL語句的結果合并起來。這個角度來看,union和join類似。
union的一個限制是兩個SQL語句所產(chǎn)生的列位需要是同樣的屬性類型。
另外,當使用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語句所產(chǎn)生的結果做處理。
不同的是,union基本是一個OR,而intersect則更像AND。即union是聯(lián)集,intersect是并集。
(2)語句:
SQL 語句1
intersect
SQL 語句2
(3)注意:intersect指令,不同的值只會被列出一次。
(1)作用:
mius是指運用在兩個SQL語句上。
先找出第一個SQL語句所產(chǎn)生的結果,然后看這些結果有沒有在第二個SQL語句的結果中。如果有,那這第一筆資料就被去除,而不會在最后的結果中出現(xiàn)。
如果第二個SQL語句所產(chǎn)生的結果并沒有存在于第一個SQL所產(chǎn)生的結果內(nèi),那這筆資料也會被拋棄。
(類似于減法?最后只剩下第一個SQL語句中那些只在第一個SQL語句中出現(xiàn)而不會在第二個SQL語句中出現(xiàn)的項)
(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,>, <, = 等來連接內(nèi)查詢和外查詢。exists也是其中一個方式。
基本上,exists是用來測試內(nèi)查詢有沒有產(chǎn)生任何結果。
如果有,系統(tǒng)就會執(zhí)行外查詢中的SQL。若沒有,那整個SQL語句就不會產(chǎn)生任何結果。
(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)補充:條件可以是一個數(shù)值或一個公式。else子句不是必須的。
以上就是“SQL指令、表格處理及SQL進階知識點有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。