溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL指令、表格處理及SQL進階知識點有哪些

發(fā)布時間:2022-02-25 09:19:00 來源:億速云 閱讀:192 作者:iii 欄目:數(shù)據(jù)庫

今天小編給大家分享一下SQL指令、表格處理及SQL進階知識點有哪些的相關知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

SQL指令、表格處理及SQL進階知識點有哪些

1. SQL指令

SQL指令是指SQL如何被用來儲存,讀取和處理數(shù)據(jù)庫之中的表格資料。

常見的SQL指令有如下這些:

1.1 SELECT:選擇

(1)作用:將資料從數(shù)據(jù)庫的表格中選出。能夠讀取表格中一個或數(shù)個列的所有資料。

什么是表格?表格是數(shù)據(jù)庫內(nèi)的結構,目的是儲存資料。

(2)語句: select 列名1, 列名2... from 表名

1.2 DISTINCT:區(qū)分(選擇)

(1)作用:處理資料時,需要找出表格內(nèi)不同的資料值,即要知道列中有哪些不同的值,而不關心每個值出現(xiàn)的次數(shù)。此時用distinct。

(2)語句: select distinct 列名 from 表名

1.3 WHERE:帶查詢條件

(1)作用:當需要有條件的進行選擇性查詢一些資料時,用到where

(2)語句: select 列名 from 表名 where 條件

1.4 AND OR:與,或(連接條件)

(1)作用:where的復雜條件是由兩個或多個簡單條件通過and或or連接而成的。一個SQL語句中可以有無限多個簡單條件的存在。

(2)語句: select 列名 from 表名 where 簡單條件1 and|or 簡單條件2...

1.5 IN:在一個不連續(xù)范圍內(nèi)取值(跟where配合)

(1)作用:in子句,通常跟where配合使用,表示條件在一個不連續(xù)的范圍內(nèi)取值

(2)語句: select 列名 from 表名 where 列名作為條件 in (值1,值2,值3...) exists

(3)補充:in子句括號內(nèi)如果只有一個值,則相當于...where 列名=值1

1.6 BETWEEN:在一個連續(xù)范圍內(nèi)取值(跟where配合)

(1)作用:in指令是在一個或者數(shù)個不連續(xù)的值的限制內(nèi)獲取資料庫中的值,而between是在一個連續(xù)的范圍內(nèi)獲取資料庫中的值。通常也跟where配合使用。

(2)語句: select 列名 from 表名 where 列名 between 值1 and 值2

1.7 LIKE:帶查找模式(跟where配合)

(1)作用:依據(jù)一個模式來找出需要的資料。通常也跟where配合使用。

(2)語句: select 列名 from 表名 where 列名 like {模式}

(3){模式}:

比如 A_B表示A開頭B結尾中間只能有一個字符,ABC%表示ABC開頭的字符串,%ABC表示ABC結尾的字符串,%ABC%表示所含有ABC這個模式的字符串。

1.8 ORDER BY:排序

(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.9 函數(shù)

(1)作用:數(shù)據(jù)庫中很多內(nèi)容都是以數(shù)字的形式存在,對這些數(shù)字做運算時,可以通過一些定義好的函數(shù)來直接運行。

(2)常用函數(shù):

AVG:平均值

COUNT:計數(shù)

MAX:最大值

MIN:最小值

SUM:總和

(3)語句: select 函數(shù)名(列名)from 表名

1.10 COUNT:計數(shù)

(1)作用:計數(shù),數(shù)出在表格中找到的符合條件的條目一共有幾個。

(2)語句: select count(列名) from 表名

(3)注意:count經(jīng)常和distinct一起使用,目的是找出表格中有多少個不同的條目。

1.11 GROUP BY:分類

(1)作用:當我們選不只一個列名且其中至少一個列名有包含函數(shù)的運用時,就需要用到group by指令。在這種情況下,需要確定我們有group by所有其他的列名。即:除了有包括函數(shù)的列名外,都需要將其放在group by的子句中。

(2)語句: select 列名1 sum(列名2) from 表名 group by 列名1

1.12 HAVING:

(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.13 ALIAS:別名(針對表或列)

(1)作用:給表和列起別名。

列名的別名:是為了讓SQL產(chǎn)生的結果易讀。

表格的別名:只要在from子句中的表格名后空一格,然后再列出要用的表格別名即可。

即:這兩種別名,都放在要替代的表名或列名的后面,跟表名或列名用空格分開。

(2)語句: select 表別名.列名1 列名1 列別名 from 表名 表別名

(3)注意:列別名不僅可以直接放在列名后面,也可以放在函數(shù)后,比如 ...sum(列名) 列別名...

1.14 表格連接

(1)作用:通過兩個表中相同的列,將兩個表連起來。

where子句在表格連接中起了很重要的作用。

如果where使用有誤,很可能得到一個笛卡爾連接(所得兩個表格每兩行之間所有可能的組合)。

1.15 外部連接

(1)作用:

我們常說的左連接也就是內(nèi)部連接。在內(nèi)部連接的情況下,需要兩個表格內(nèi)都有同樣的值,那一筆資料才會被選中。

如果要列出一個表格中每一筆的資料,無論它的值在另一個表中有沒有出現(xiàn)。此時,就需要外部連接:SQL OUTER JOIN。

(2)語句: 外部連接的語法是依數(shù)據(jù)庫的不同而不同。比如,在Oracle中,where子句中要選出所有資料的那個表格后加上 (+)來表示這個表格中的所有資料我們都需要。

(3)注意:當?shù)诙€表格沒有相對的資料時,SQL會傳回NULL。

1.16 CONCATENATE:串連字符

(1)作用:將由不同列名獲得的結果串連起來。每個數(shù)據(jù)庫提供的方法可能有所不同:

MySQL:CONCAT()

Oracle:CONCAT(), ||

SQL Server:+

(2)語句: concat(字符1,字符2,字符3...)

表示將字符1,字符2,字符3串連起來。

(3)注意:Oracle的concat()只允許兩個參數(shù);即一次只能將兩個字符串串起來。但是可以用||來一次串連其多個字符串。

1.17 SUBSTRING:截取字符

(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.18 TRIM:移除字符串頭部或尾部的指定內(nèi)容

(1)作用:trim()函數(shù)用來移除掉字符串中的字頭或字尾。最常用的是移除字頭或字尾的空白。

在不同的數(shù)據(jù)庫中,該方法不同:

MySQL:trim(), rtrim(), ltrim()

Oracle:rtrim(), ltrim()

SQL Server:rtrim(), ltrim()

(2)語句: trim([[位置] [要移除的字符串] from] 字符串)

(3)注意:如果沒有列出要移除的字符串是什么的話,就會移除空白(如果有的話)。

2. 表格處理

表格處理指令,是指如何使用SQL來處理數(shù)據(jù)庫中的各個表格,增刪改查等。

2.1 CREATE TABLE :創(chuàng)建表

(1)作用:在數(shù)據(jù)庫中創(chuàng)建表格

(2)語句:

create table 表名

( 列名1 屬性,

列名2 屬性,

列名3 屬性 );

2.2 CONSTRAINT:限制

(1)作用:用來指定哪些資料可以存入表格中,或者之后借由alter table語句來指定。

(2)常見的限制有:

not null

unique

check

主鍵(primary key)

外來鍵(Foreign  key)

2.3 NOT NULL:限制列的值非NULL

(1)作用:在沒有做出任何限制的情況下,一個列的值是允許有null值的。如果不允許一個列的值含有null,那就需要對那個列做not null的指定。

(2)語句:

create table 表名

(列名1 屬性 not null,

列名2 屬性 not null,

列名3 屬性);

2.4 UNIQUE:限制列的值唯一

(1)作用:保證一個列中的值都是不一樣的。

(2)語句:

create table 表名

(列名1 屬性 not null unique,

列名2 屬性 not null,

列名3 屬性);

(3)注意:一個被指定為主鍵的列,一定會含有unique特性。但一個unique列并不一定是主鍵。

2.5 CHECK

(1)作用:保證一個列中的所有值都是符合某些條件。

(2)語句:

create table 表名

(列名1 屬性 check(列名1>10) not null unique,

列名2 屬性 not null,

列名3 屬性);

(3)注意:check限制尚未被執(zhí)行于MySQL數(shù)據(jù)庫上。

2.6 primary key:主鍵

(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

2.7 foreign key:外來鍵

(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)

2.8 CREATE VIEW:新建視圖

(1)作用:視圖表可以被當做虛擬表格。與常規(guī)的表格不同的是,表格中有實際存儲資料,但視圖是建立在表格之上的一個架構,它本身不實際存儲資料。

(2)語句: create view 視圖名 as SQL語句;

其中,SQL語句可以類似:select 列名 from 表名;

(3)注意:可以用視圖來連接兩個表格。這種情況下,使用者就可以直接由一個視圖表中找出需要的信息,而不需要從兩個不同的表格中去先做連接動作再查找。

2.9 CREATE INDEX:新建索引

(1)作用:

索引可以幫助我們從表格中快速的找到需要的資料。

如果一個表格沒有索引,數(shù)據(jù)庫系統(tǒng)需要將整個報個的資料讀出,這個過程叫table scan。

如有適當?shù)乃饕嬖?,?shù)據(jù)庫系統(tǒng)就可以先由這個索引去找出需要的資料是在表格中的什么位置,然后直接去該位置獲取資料,加快了獲取資料的速度。

索引是有利于系統(tǒng)效率的事情。一個索引可以涵蓋一個或多個列。

(2)語句: create index 索引名 on 表名(列名1, 列名2);

2.10  ALTER TABLE:修改表格

(1)作用:表格被建立后,有時需要改變表格的結構。比如,加一列,刪一列,改變列名稱,改變列的屬性等等。

(2)語句: alter 表名 列名 [改變方式]

[改變方式]常見的有:

加一列:add 列名2 屬性

刪一列:drop 列名2

改變列名稱:change 舊列名 新列名 新屬性

改變列的屬性:modify 列名2 新屬性

2.11 DROP TABLE:刪除表格

(1)作用:從數(shù)據(jù)庫中清除一個表格(刪掉表格)

(2)語句: drop table 表名

2.12 TRUNCATE TABLE:清除表格內(nèi)容

(1)作用:清除一個表格中的所有資料(不刪表格)

(2)語句: truncate table 表名

2.13 INSERT INTO:在表格中插入內(nèi)容

(1)作用:將資料輸入表格中。

(2)語句:

insert into 表名(列1,列2...)values(值1,值2...)

insert into 表名1(列1,列2...)select 列名3,列名4 from 表名2

2.14 UPDATE:更新表格內(nèi)容

(1)作用:修改表格中的資料。

(2)語句: update 表名 set 列名1=新值 where 條件

2.15 DELETE FROM:刪除一行或多行

(1)作用:在某些情況下,需要直接由數(shù)據(jù)庫中去除一些資料。(刪掉的是一行或多行)

(2)語句:delete from 表名 where 條件

3. 進階SQL

如何使用SQL來執(zhí)行一些較為復雜的運算,以及如何用SQL做這些操作:

排名 rank

中位數(shù) median

累積總計 running total

總和百分比 percent to total

累積總和百分比 cumulative percent to total

3.1 UNION:合并

(1)作用:目的是將兩個SQL語句的結果合并起來。這個角度來看,union和join類似。

union的一個限制是兩個SQL語句所產(chǎn)生的列位需要是同樣的屬性類型。

另外,當使用union時,我們只會看到不同的資料值,即結果值不重復,類似select distinct

(2)語句:

SQL 語句1

union

SQL 語句2

(3)注意:如果我們在任何一個SQL語句(或者兩句都一起)用select disinct 列名,那很可能得到完全一樣的結果。

3.2 UNION ALL

(1)作用:目的也是要將兩個SQL語句的結果合并到一起。

不同的是,union all會將每一筆符合條件的資料都列出來,無論資料值有無重復。結果值可重復。

(2)語句:

SQL 語句1

union all

SQL 語句2

3.3 INTERSECT

(1)作用:與union類似,intersect也是對兩個SQL語句所產(chǎn)生的結果做處理。

不同的是,union基本是一個OR,而intersect則更像AND。即union是聯(lián)集,intersect是并集。

(2)語句:

SQL 語句1

intersect

SQL 語句2

(3)注意:intersect指令,不同的值只會被列出一次。

3.4 MINUS

(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指令,不同的值只會被列出一次。

3.5 子查詢

(1)作用:subquery,在一個SQL語句中放入另一個SQL語句。

當我們在where子句或having子句中插入另一個sql語句時,我們就有一個子查詢。

子查詢的作用,第一,可以被用來連接表格。第二,有時子查詢是唯一能夠連接兩個表格的方式。

(2)語句:

select 列名1 from 表名1 where 列名2 [比較運算素] (select 列名2 from 表名2 where 條件)

其中,[比較運算素]可以是相等的運算素(=, >=, >, <=, <),也可以是一個對文字的運算素(LIKE)。

3.6 EXISTS

(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 條件)

3.7 CASE

(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è)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

sql
AI