Ⅰ 關於sql鏈接查詢的幾種方式
一、概述 通過連接運算符可以實現多個表查詢。連接是關系資料庫模型的主要特點,也是它區別於其它類型資料庫管理系統的一個標志。多表連接查詢是使用Sql的基本操作,但連接的方式卻有多種,熟練使用這些連接方式能夠簡化Sql語句,提高資料庫運行效率。 在關系資料庫管理系統中,表建立時各數據之間的關系不必確定,常把一個實體的所有信息存放在一個表中。當檢索數據時,通過連接操作查詢出存放在多個表中的不同實體的信息。連接操作給用戶帶來很大的靈活性,他們可以在任何時候增加新的數據類型。為不同實體創建新的表,然後通過連接進行查詢。 連接可以在SELECT 語句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時有助於將連接操作與WHERE子句中的搜索條件區分開來。所以,在Transact-SQL中推薦使用這種方法。 二、基本語法與方法 SQL-92標准所定義的FROM子句的連接語法格式為:FROM join_table join_type join_table [ON (join_condition)] 其中join_table指出參與連接操作的表名,連接可以對同一個表操作,也可以對多表操作,對同一個表操作的連接又稱做自連接。 join_type 指出連接類型,可分為三種:內連接、外連接和交叉連接。內連接(INNER JOIN)使用比較運算符進行表間某(些)列數據的比較操作,並列出這些表中與連接條件相匹配的數據行。根據所使用的比較方式不同。 1、內連接又分為等值連接、自然連接和不等連接三種。 2、外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時)、右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數據行。 3、交叉連接(CROSS JOIN)沒有WHERE 子句,它返回連接表中所有數據行的笛卡爾積,其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。 連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運算符、邏輯運算符等構成。 無論哪種連接都不能對text、ntext和image數據類型列進行直接連接,但可以對這三種列進行間接連接。例如:SELECT p1.pub_id,p2.pub_id,p1.pr_info FROM pub_info AS p1 INNER JOIN pub_info AS p2 ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) (一)內連接 內連接查詢操作列出與連接條件匹配的數據行,它使用比較運算符比較被連接列的列值。內連接分三種: 1、等值連接:在連接條件中使用等於號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重復列。 2、不等連接: 在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括>、>=、
Ⅱ 查詢sql語句
試下這個:
SELECT a.ygname,a.sex,isnull(b.ygname,'無') as shangsiname FROM emp a,emp b where a.ssid *= b.ygid ;
注意:「 *= 」符號。
Ⅲ 在access中,sql查詢具有3種特定形式,包括
SQL全稱是「結構化查詢語言(Structured Query Language)」,最早的是IBM的聖約瑟研究實驗室為其關系資料庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。如今無論是像Oracle ,Sybase,Informix,SQL server這些大型的資料庫管理系統,還是像Visual Foxporo,PowerBuilder這些微機上常用的資料庫開發系統,都支持SQL語言作為查詢語言。SQL是高級的非過程化編程語言,允許用戶在高層數據結構上工作。他不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的SQL語言作為數據輸入與管理的介面。它以記錄集合作為操縱對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語言可以嵌套,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語言中需要一大段程序實現的一個單獨事件只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常復雜的語句。 SQL同時也是資料庫文件格式的擴展名。 SQL語言包含4個部分: 數據查詢語言(SELECT語句) 數據操縱語言(INSERT, UPDATE, DELETE語句) 數據定義語言(如CREATE, DROP等語句) 數據控制語言(如COMMIT, ROLLBACK等語句) SQL語言是結構化語言(Structure Query Language)的縮寫,是一種用於資料庫查詢和編程的語言,已經成為關系型資料庫普遍使用的標准,使用這種標准資料庫語言對程序設計和資料庫的維護都帶來了極大的方便,廣泛地應用於各種數據查詢。VB和其他的應用程序包括Access、Foxpro、Orcale、SQL Server等都支持SQL語言。SQL語言的常用操作有:建立資料庫數據表(CREATE TABLE),如本系統中的學生及成績備份就用到該語句;從資料庫中篩選一個記錄集(SELECT),這是最常用的一個語句,功能強大,能有效地對資料庫中一個或多個數據表中的數據進行訪問,並兼有排序、分組等功能;在數據表中添加一個記錄(INSERT);刪除符合條件的記錄(DELETE);更改符合條件的記錄(UPDATE);VB中的資料庫操作對象都提供了對SQL語句的支持。其一般的用法是以VB的各種控制項接收用戶對資料庫訪問的請求,在事件響應程序代碼中將其轉換成對資料庫的SQL查詢語句,並以字元串的形式存在,然後將其傳遞給相應的資料庫操作對象,最終完成對資料庫的訪問 資料庫,顧名思義,是存入數據的倉庫。只不過這個倉庫是在計算機存儲設備上的,而且數據是按一定格式存放的。 當人們收集了大量的數據後,應該把它們保存起來進入近一步的處理,進一步的抽取有用的信息。當年人們把數據存放在文件櫃中,可現在隨著社會的發展,數據量急劇增長,現在人們就藉助計算機和資料庫技術科學的保存大量的數據,以便能更好的利用這些數據資源。 要是下定義的話,就應該是:指長期儲存在計算機內的、有組織的、可共享的數據集合。資料庫包含關系資料庫、面向對象資料庫及新興的XML資料庫等多種,目前應用最廣泛的是關系資料庫,若在關系資料庫基礎上提供部分面向對象資料庫功能的對象關系資料庫。在資料庫技術的早期還曾經流行過層次資料庫與網狀資料庫,但這兩類資料庫目前已經極少使用。資料庫管理資料庫管理(Database Administration)是有關建立、存儲、修改和存取資料庫中信息的技術,是指為保證資料庫系統的正常運行和服務質量,有關人員須進行的技術管理工作。負責這些技術管理工作的個人或集體稱為資料庫管理員(DBA)。資料庫管理的主要內容有:資料庫的建立、資料庫的調整、資料庫的重組、資料庫的重構、資料庫的安全控制、數據的完整性控制和對用戶提供技術支持。資料庫的建立:資料庫的設計只是提供了數據的類型、邏輯結構、聯系、約束和存儲結構等有關數據的描述。這些描述稱為數據模式。要建立可運行的資料庫,還需進行下列工作:(1)選定資料庫的各種參數,例如最大的數據存儲空間、緩沖決的數量、並發度等。這些參數可以由用戶設置,也可以由系統按默認值設置。(2)定義資料庫,利用資料庫管理系統(DBMS)所提供的數據定義語言和命令,定義資料庫名、數據模式、索引等。(3)准備和裝入數據,定義資料庫僅僅建立了資料庫的框架,要建成資料庫還必須裝入大量的數據,這是一項浩繁的工作。在數據的准備和錄入過程中,必須在技術和制度上採取措施,保證裝入數據的正確性。計算機系統中原已積累的數據,要充分利用,盡可能轉換成資料庫的數據。 注: "資料庫"這個詞對於不同的人應該給予不同的感覺。如果你是一個最終用戶,你根本就不關心數據存儲和維護的細節,資料庫也不應該拿這些事情來煩你。但是如果你是一個資料庫管理員,那麼有些細節上的東西你就必須要清楚。資料庫管理系統可以為不同的用戶提供不同的視圖,也就是他們所看到的資料庫是不一樣的。這就需要進行數據抽象,以形成這些不同的視圖。最早是在CODASYL的DBTG報告中完整地給出了數據抽象的三個層次。ANSI/SPARC報告中也提出了類似的建議,這個報告中抽象的層次為內部層、概念層和外部層。但是,現在的資料庫管理系統是根據DBTG的報告從三個層次來進行抽象的,它們分別是物理層、邏輯層和視圖層(概念層)。資料庫的種類大型資料庫有:Oracle、Sybase、DB2、SQL server 小型資料庫有:Access、MySQL、BD2等。
Ⅳ 搜集SQL常用的操作語句
結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。
一、插入(復制)表數據
1、INSERT INTO 語句:
(1)插入新的一行數
[sql] view plain ;
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
(2)在指定的列中插入數據
[sql] view plain ;
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');
2、SQL SELECT INTO 語句可用於創建表的備份復件
(1)在建表時復制所有數據
[sql] view plain ;
create table userinfo_new as select * from userinfo;
(2)在建表時復制部分數據
[sql] view plain ;
create table userinfo_new1 as select id,username from userinfo;
(3)在添加時復制所有數據
[sql] view plain ;
insert into userinfo_new select * from userinfo;
(4)在添加時復制部分數據
[sql] view plain ;
insert into userinfo_new(id,username) select id,username from userinfo;
二、修改表數據
Update 語句
(1)無條件更新
[sql] view plain ;
update userinfo set userpwd='111',email='[email protected]';
(2)有條件更新
[sql] view plain ;
update userinfo set userpwd='123456' where username='xxx';
三、刪除表數據
1、DELETE 語句
(1)無條件刪除
[sql]view plain;
daletefromuserinfo;
(2)有條件刪除
[sql]view plain;
='yyy';
四、查詢表數據
1、SELECT 語句:
(1)查詢所有欄位
[sql] view plain ;
select * from users;
(2)查詢指定欄位
[sql] view plain ;
select username,salary from users;
2、SELECT DISTINCT 語句
從 Company" 列中僅選取唯一不同的值,需要使用 SELECT DISTINCT 語句:
[sql] view plain ;
SELECT DISTINCT Company FROM Orders;
Ⅳ SQL的簡單介紹(基本的sql語句)
SQL是StructuredQuevyLanguage(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出「做什麼」的命令,「怎麼做」是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支持SQL。
##1二、SQL資料庫數據體系結構
SQL資料庫的數據體系結構基本上是三級結構,但使用術語與傳統關系模型術語不同。在SQL中,關系模式(模式)稱為「基本表旅凱」(basetable);存儲模式(內模式)稱為「存儲文件」(storedfile);子模式(外模式)稱為「視圖」(view);元組稱為「行」(row);屬性稱為「列」(column)。名稱對稱如^00100009a^:
##1三、SQL語言的組成
在正式學習SQL語言之前,首先讓我們對SQL語言有一個基本認識,介紹一下SQL語言的組成:
1.一個SQL資料庫是表(Table)的集合,它由一個或多個SQL模式定義。
2.一個SQL表由行集構成,一行是列的序列(集合),每列與行對應一個數據項。
3.一個表或者是一個基本表或者是一個視圖。基本表是實際存儲在資料庫的表,而視圖是由若干基本表或其他視圖構成的表的定義。
4.一個基本表可以跨一個或多個存儲文件,一個存儲文件也可存放一個或多個基本表。每個存儲文件與外部存儲上一個物理文件對應。
5.用戶可以用SQL語句對視圖和基本表進行查詢等操作。在用戶角度來看,視圖和基本表是一樣的,沒有區別,都是關系(表格)。
6.SQL用戶可以是應用程序,也可以是終端用戶。SQL語句可嵌入在宿主語言的程序中使用,宿主語言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada語言等。SQL用戶也能作為獨立的用戶介面,供交互環境下的終端用戶使用。
##1四、對資料庫進行操作
SQL包括了所有對資料庫的操作,主要是由4個部分組成:
1.數據定義:這一部分又稱為「SQLDDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。
2.數據操縱:這一部分又稱為「SQLDML」,其中包括數據查詢和數據更新兩大類操作,其中數據更絕豎新又包括插入、刪除和更新三種操作。
3.數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。
4.嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。
下面我們將分別介紹:
##2(一)數拆宏喚據定義
SQL數據定義功能包括定義資料庫、基本表、索引和視圖。
首先,讓我們了解一下SQL所提供的基本數據類型:(如^00100009b^)
1.資料庫的建立與刪除
(1)建立資料庫:資料庫是一個包括了多個基本表的數據集,其語句格式為:
CREATEDATABASE<資料庫名<〔其它參數〕
其中,<資料庫名<在系統中必須是唯一的,不能重復,不然將導致數據存取失誤。〔其它參數〕因具體資料庫實現系統不同而異。
例:要建立項目管理資料庫(xmmanage),其語句應為:
CREATEDATABASExmmanage
(2)資料庫的刪除:將資料庫及其全部內容從系統中刪除。
其語句格式為:DROPDATABASE<資料庫名<
例:刪除項目管理資料庫(xmmanage),其語句應為:
DROPDATABASExmmanage
2.基本表的定義及變更
本身獨立存在的表稱為基本表,在SQL語言中一個關系唯一對應一個基本表。基本表的定義指建立基本關系模式,而變更則是指對資料庫中已存在的基本表進行刪除與修改。
Ⅵ 求sql語法
SQL語言快速入門(一)
SQL是英文Structured Query Language的縮寫,意思為結構化查詢語言。
SQL語言的主要功能就是同各種資料庫建立聯系,進行溝通。按照ANSI(美國國家標准協會)的規定,SQL被作為關系型資料庫管理系統的標准語言。SQL語句可以用來執行各種各樣的操作,例如更新資料庫中的數據,從資料庫中提取數據等。目前,絕大多數流行的關系型資料庫管理系統,如Oracle, Sybase, Microsoft SQL Server, Access等都採用了SQL語言標准。雖然很多資料庫都對SQL語句進行了再開發和擴展,但是包括Select, Insert, Update, Delete, Create, 及Drop在內的標準的SQL命令仍然可以被用來完成幾乎所有的資料庫操作。下面,我們就來詳細介紹一下SQL語言的基本知識。
資料庫表格
一個典型的關系型資料庫通常由一個或多個被稱作表格的對象組成。資料庫
中的所有數據或信息都被保存在這些資料庫表格中。資料庫中的每一個表格都具有
自己唯一的表格名稱,都是由行和列組成,其中每一列包括了該列名稱,數據類型
,以及列的其它屬性等信息,而行則具體包含某一列的記錄或數據。以下,是一個
名為天氣的資料庫表格的實例。
城市 最高氣溫 最低氣溫
北京 10 5
上海 15 8
天津 8 2
重慶 20 13
該表格中「城市」,「最高氣溫」和「最低氣溫」就是三個不同的列
,而表格中的每一行則包含了具體的表格數據。
數據查詢
在眾多的SQL命令中,select語句應該算是使用最頻繁的。Select語句主要被用來對資料庫進行查詢並返回符合用戶查詢標準的結果數據。Select語句的語法格式如下:
select column1 [, column2,etc] from tablename
[where condition];
([] 表示可選項)
Select語句中位於Select關鍵詞之後的列名用來決定那些列將作為查詢結果返回。用戶可以按照自己的需要選擇任意列,還可以使用通配符「*」來設定返回表格中的所有列。
Select語句中位於from關鍵詞之後的表格名稱用來決定將要進行查詢操作的目
標表格。
Select語句中的where可選從句用來規定哪些數據值或哪些行將被作為查詢結果返回或顯示。在where條件從句中可以使用以下一些運算符來設定查詢標准:
= 等於
> 大於
< 小於
>= 大於等於
<= 小於等於
<> 不等於
除了上面所提到的運算符外,LIKE運算符在where條件從句中也非常重要。
LIKE運算符的功能非常強大,通過使用LIKE運算符可以設定只選擇與用戶規定格式相同的記錄。此外,我們還可以使用通配符「%」用來代替任何字元串。舉例如下:
Select firstname, lastname, city
from employee
where firstname LIKE 『E%』;
(注意,字元串必須被包含在單括弧內)
上述SQL語句將會查詢所有名稱以E開頭的姓名。或者,通過如下語句:
Select * from employee
where firstname = 『May』;
查詢所有名稱為May的行。
SQL語言快速入門(二)
創建表格
SQL語言中的create table語句被用來建立新的資料庫表格。Create table
語句的使用格式如下:
create table tablename
(column1 data type,
column2 data type,
column3 data type);
如果用戶希望在建立新表格時規定列的限制條件,可以使用可選的條件
選項:
create table tablename
(column1 data type [constraint],
column2 data type [constraint],
column3 data type [constraint]);
舉例如下:
create table employee
(firstname varchar(15),
lastname varchar(20),
age number(3),
address varchar(30),
city varchar(20));
簡單來說,創建新表格時,在關鍵詞create table後面加入所要建立的表格
的名稱,然後在括弧內順次設定各列的名稱,數據類型,以及可選的限制條件
等。注意,所有的SQL語句在結尾處都要使用「;」符號。
使用SQL語句創建的資料庫表格和表格中列的名稱必須以字母開頭,後面
可以使用字母,數字或下劃線,名稱的長度不能超過30個字元。注意,用戶在
稱時不要使用SQL語言中的保留關鍵詞,如select, create, insert等,作為表格或
列的名稱。
數據類型用來設定某一個具體列中數據的類型。例如,在姓名列中只能采
用的數據類型,而不能使用number的數據類型。
SQL語言中較為常用的數據類型為:
char(size):固定長度字元串,其中括弧中的size用來設定字元串的最大
度。Char類型的最大長度為255位元組。
varchar(size):可變長度字元串,最大長度由size設定。
number(size):數字類型,其中數字的最大位數由size設定。
Date:日期類型。
number(size,d):數字類型,size決定該數字總的最大位數,而d則用於
設定該數字在小數點後的位數。
最後,在創建新表格時需要注意的一點就是表格中列的限制條件。所謂限
制條件就是當向特定列輸入數據時所必須遵守的規則。
例如,unique這一限制條件要求某一列中不能存在兩個值相同的記錄,所有
記錄的值都必須是唯一的。除unique之外,較為常用的列的限制條件
還包括not, null和primary key等。Not null用來規定表格中某一列的值
不能為空.Primary key則為表格中的所有記錄規定了唯一的標識符。
向表格中插入數據
SQL語言使用insert語句向資料庫表格中插入或添加新的數據行。Insert語
句的使用格式如下:
insert into tablename
(first_column,...last_column)
values (first_value,...last_value);
例如:
insert into employee
(firstname, lastname, age, address, city)
values (『Li』, 『Ming』, 45, 『No.77 Changan Road』, 『Beijing」);
簡單來說,當向資料庫表格中添加新記錄時,在關鍵詞insert into後面輸
入所要添加的表格名稱,然後在括弧中列出將要添加新值的列的名稱。最後
,在關鍵詞values的後面按照前面輸入的列的順序對應的輸入所有要添加的
記錄值。
更新記錄
SQL語言使用update語句更新或修改滿足規定條件的現有記錄。
Update語句的格式為:
update tablename
set columnname = newvalue [, nextcolumn = newvalue2...]
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
update employee
set age = age+1
where first_name= 『Mary』and last_name= 『Williams』;
使用update語句時,關鍵一點就是要設定好用於進行判斷的where條件
從句。
刪除記錄
SQL語言使用delete語句刪除資料庫表格中的行或記錄。Delete語句的
格式為:
delete from tablename
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
delete from employee
where lastname = May;
簡單來說,當需要刪除某一行或某個記錄時,在delete from關鍵詞之
後輸入表格名稱,然後在where從句中設定刪除記錄的判斷條件。注意,
如果用戶在使用delete語句時不設定where從句,則表格中的所有記錄將
全部被刪除。
刪除資料庫表格
在SQL語言中使用drop table命令刪除某個表格以及該表格中的所有記
錄。Drop table命令的使用格式為:
drop table tablename;
例如:
drop table employee;
如果用戶希望將某個資料庫表格完全刪除,只需要在drop table命令後
輸入希望刪除的表格名稱即可。Drop table命令的作用與刪除表格中的所有
記錄不同。刪除表格中的全部記錄之後,該表格仍然存在,而且表格中列
的信息不會改變。而使用drop table命令則會將整個資料庫表格的所有信息
全部刪除。
以上,我們對SQL語言主要的命令和語句進行了較為詳細的介紹。應該說SQL語句的語法結構和風格還是相當簡單和直觀的,只要用戶結合實踐多加練習,一定會在短期內迅速掌握。
SQL語言快速入門(三)
我們日常使用SQL語言的工作過程中,使用最多的還是從已經建立好的資料庫中查詢信息。下面,我們就來詳細介紹一下如何使用SQL語言實現各種資料庫查詢操作。
SELECT…FROM
為方便講解,我們在資料庫中創建名為Store_Information的如下數據表。
Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000
SQL語言中用於資料庫查詢的最簡單的命令就是SELECT…FROM,語法格
式為:
SELECT \"column_name\" FROM \"table_name\"
例如,如果我們希望查詢Store_Information數據表中所有的商店名稱時,可
以使用如下命令:
SELECT store_name FROM Store_Information
查詢結果顯示為:
Store_Name
Los Angeles
San Diego
Los Angeles
Boston
如果用戶希望一次查詢多個欄位,可以將所要查詢的欄位名稱依次加入
SELECT關鍵字之後,中間用「,」隔開即可。
DISTINCT
SELECT關鍵字支持用戶查詢數據表中指定欄位的所有數據,但是這樣有時
就會不可避免的出現重復信息。如果用戶希望只查詢那些具有不同記錄值的信
息的話,可以使用SQL語言的DISTINCT關鍵字。語法格式如下:
SELECT DISTINCT \"column_name\"
FROM \"table_name\"
例如,我們可以使用以下命令查詢Store_Information數據表具有不同記錄值
的所有記錄。
SELECT DISTINCT Store_Name FROM Store_Information
查詢結果如下:
Store_Name
Los Angeles
San Diego
Boston
WHERE
除了選擇具有不同記錄值的記錄之外,有時我們可能還會需要根據某些條
件對資料庫中的數據進行查詢。例如,我們可能需要查詢Store_Information數
據表中銷售額超過1000美圓的商店。為此,我們可以使用SQL語言的WHERE
關鍵字設定查詢條件。語法格式如下:
SELECT \"column_name\"
FROM \"table_name\"
WHERE \"condition\"
由此,我們可以使用如下命令查詢銷售額超過1000美圓的商店信息:
SELECT store_name FROM Store_Information WHERE Sales > 1000
查詢結果顯示為:
store_name
Los Angeles
運算函數
現在,我們已經了解到在使用SQL語言進行資料庫查詢操作時可以通過對
數值的判斷設定靈活的查詢條件。為了增強對運算的支持能力,SQL提供了眾
多實用的運算函數供廣大用戶使用。例如,我們可以直接在SQL命令中調用
SUM或AVG這兩個分別用於計算總數和平均數的函數。語法格式如下:
SELECT \"function type\"(\"column_name\")
FROM \"table_name\"
如果我們希望查詢Store_Information數據表中所有商店的總銷售額的話,可
以使用如下命令:
SELECT SUM(Sales) FROM Store_Information
查詢結果顯示為:
SUM(Sales)
50
COUNT
除了SUM和AVG函數之外,COUNT函數是SQL語言中另一個較為常用
的運算函數。COUNT函數可以用來計算數據表中指定欄位所包含的記錄數目。
語法格式為:
SELECT COUNT(\"column_name\")
FROM \"table_name\"
例如,如果我們希望查詢Store_Information數據表中的有關商店的記錄條數
時,可以使用如下命令:
SELECT COUNT(store_name)
FROM Store_Information
查詢結果顯示為:
Count(store_name)
4
COUNT函數可以和DISTINCT關鍵字一起使用從而可以查詢數據表中指定
欄位中所有具有不同記錄值的記錄數目.例如,如果我們希望查詢Store_Information
數據表中不同商店的數目時,可以使用如下命令:
SELECT COUNT(DISTINCT store_name)
FROM Store_Information
查詢結果顯示為:
Count(DISTINCT store_name)
3
GROUP BY
下面我們來進一步看一下SQL語言中的集合函數。上文中,我們曾使用
SUM函數計算所有商店的銷售總額,如果我們希望計算每一家商店各自的總銷
售額時該怎麼辦呢?要實現這一目的我們需要做兩件事:首先,我們需要查詢
商店名稱和銷售額兩個欄位;然後,我們使用SQL語言的GROUP BY命令將
銷售額按照不同的商店進行分組,從而計算出不同商店的銷售總額。GROUP
BY命令的語法格式為:
SELECT \"column_name1\", SUM(\"column_name2\")
FROM \"table_name\"
GROUP BY \"column_name1\"
我們可以使用如下命令實現上述查詢目的:
SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name
查詢結果顯示為:
store_name SUM(Sales)
Los Angeles 00
San Diego 0
Boston 0
小註:
GROUP BY關鍵字一般應用於同時查詢多個欄位並對欄位進行算術運
算的SQL命令中。
HAVING
用戶在使用SQL語言的過程中可能希望解決的另一個問題就是對由sum或
其它集合函數運算結果的輸出進行限制。例如,我們可能只希望看到Store_
Information數據表中銷售總額超過1500美圓的商店的信息,這時我們就需要使
用HAVING從句。語法格式為:
SELECT \"column_name1\", SUM(\"column_name2\")
FROM \"table_name\"
GROUP BY \"column_name1\"
HAVING (arithematic function condition)
(GROUP BY從句可選)
由此,我們可以使用如下命令實現上述查詢目的:
SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500
查詢結果顯示為:
store_name SUM(Sales)
Los Angeles 00
小註:
SQL語言中設定集合函數的查詢條件時使用HAVING從句而不是
WHERE從句。通常情況下,HAVING從句被放置在SQL命令的結尾處。
ALIAS
下面,我們重點介紹一下如何在SQL命令中設定別名。SQL語言中一般使
用兩種類型的別名,分別為欄位別名和數據表別名。簡單的說,使用欄位別名
可以幫助我們有效的組織查詢的輸出結果。例如,上文所列舉的多個實例中,
當我們計算商店銷售總額時,顯示結果中就會出現SUM(sales)。雖然SUM(sales)
並不會對我們理解查詢結果帶來不便,但是如果我們需要在查詢中使用多項復
雜運算時,顯示結果就不會這么直觀了。如果這時我們使用欄位別名就會極大
的提高查詢結果的可讀性。
對於數據表別名,我們可以通過將別名直接放置在FROM從句中數據表名
稱的後面設定。數據表別名在我們下面將要講述的連接多個數據表進行查詢的
操作中極為有用。
欄位和數據表別名的語法格式如下:
SELECT \"table_alias\".\"column_name1\" \"column_alias\"
FROM \"table_name\" \"table_alias\"
即別名都直接放置在各自對應名稱的後面,中間用空格分開。
以Store_Information數據表為例,我們可以在GROUP BY一節中所使用的
SQL命令中設置如下欄位和數據表別名:
SELECT A1.store_name \ "Store\", SUM(Sales) \"Total Sales\"
FROM Store_Information A1
GROUP BY A1.store_name
查詢結果顯示為:
Store Total Sales
Los Angeles 00
San Diego 0
Boston 0
連接多個數據表
最後,我們來看一下如果使用SQL語言連接多個數據表,實現對多個數據
表的查詢。為方便講解,我們在資料庫中分別創建了兩個名為Store_Information
和Region的數據表。
Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000
Region
Region_Name Store_Name
East Boston
East New York
West Los Angeles
West San Diego
下面,我們就來看一下通過數據表的連接實現按不同區域查詢銷售額。
我們注意到在名為Region的數據表中包含區域和商店兩個欄位信息,而在名為
Store_Information的數據表中則包含每一家商店的銷售信息。因此,為了得到按
區域劃分的銷售信息,我們需要將兩個不同數據表的信息結合在一起進行查詢.
通過對上述兩個數據表的分析,我們發現每個數據表中都包含一個名為
Store_Name的欄位,因此,我們可以使用如下命令實現查詢目的:
SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Region A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name
查詢結果顯示為:
REGION SALES
East 0
West 50
說明:
上述查詢命令的前兩行用於指定所要查詢的目標欄位,分別為Region數據
表中的Region_Name欄位和Store_Information數據表中Sales欄位的記錄值總
數。這里,我們設定兩個欄位的別名分別為REGION和SALES,兩個數據表的
別名分別為A1和A2。如果我們只使用欄位別名而不設定數據表別名的話,上
述SQL命令的第一行就變成如下形式:
SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES
由此我們可以看出有效的使用數據表別名,可以極大的簡化對多個數據表
進行操作的SQL命令。
上述查詢命令的第3行為WHERE從句,正是該從句設定了兩個數據表的
連接條件。因為我們希望確保Region數據表中的Store_Name欄位能夠與
Store_Information數據表中的同名欄位相對應,所以我們規定兩個欄位的記錄
值應當相等。在連接多個數據表時,一定要准確設定數據表的連接條件,如果
WHERE從句設定不正確,則可能導致查詢結果中出現眾多不相關的數據 .
Ⅶ sql如何查詢語句的格式怎麼寫
語句格式
SELECT
[ALL|DISTINCT]
<目標列表達式>
[,<目標列表達式>]
…
FROM
<表名或視圖名>[,
<表名或視圖名>
]
…
[
WHERE
<條件表達式>
]
[
GROUP
BY
<列名1>
[
HAVING
<條件表達式>
]
]
[
ORDER
BY
<列名2>
[
ASC|DESC
]
];
例:查詢所有年齡在20歲以下的學生姓名及其年齡。
SELECT
Sname,Sage
FROM
Student
WHERE
Sage
<
20;
Ⅷ SQL語言基礎(4)
內連接
把兩張表相同的地方查詢出來
左連接
包括了內連接,同時還查詢左表特有的內容
右連接
包括了內連接,同時還查詢了右表獨有的內容
語法:select * from 表1 inner join 表2 on 表1.欄位 = 表2.欄位
內連接最重要的是,找出兩張表要關聯的欄位
顯式內連接
查詢a表和b表共有的數據
select * from a inner jion b on a.id = b.id;
查詢students和scores共有的數據
select * from stundets inner join scores on students.studnetNo = scores.studentNo;
語法:select * from 表1,表2 where 兩個表的連接條件
select * from students,scores where students.studentNo = scores.studnetNo;
內連接查詢顯示指定的欄位
students表與scores內連接,只顯示姓名,課程號,成績
select name,courseNo,score from studnets inner join scores students.studentNo = scores.studentNo;
表的別名在查詢中的使用(當使用表別名可以縮短SQL語句)
select name,coursenNo,score from students st inner join scores cson st.studentsNo = sc.studnetNo;
查詢成績表信息,同時顯示成績對應的課程名稱
select * from scores sc inner join course co on sc.courseNo = co.courseNo;
帶有where條件的內連接
語神顫頃法select * from 表1 inner join 表2 on 表1.欄位 = 表2.欄位 where條件
查詢王昭君的信息,要求只顯示游陸姓名、課程號、成績
select name,coursenNo,score from students st inner join scores sc on st.studentNo = sc.studentNo where name = '王昭君'
帶有and邏輯運算符的內連接查詢
查詢姓名為王昭君,並且成績小於90的信洞陵息,要求只顯示姓名、成績
select name,score from students st inner join scores sc on st.studentNo = sc.studentNo where st.name = '王昭君' and sc.score < 90;
查詢學生信息和成績以及成績對應的課程名稱(三張表關聯)
select * from students inner join scores on students.studnetNo = scores.studentNo
inner join courses on scores.courseNo = courses.courseNo;
搭框架
基本的select語句框架搭建起來,如果有多表,把相應的多表也聯合進來
看條件
決定where後面具體的條件
顯示的欄位
select後面到底要顯示什麼欄位
查詢所有學生的linux的課程成績,要求只顯示姓名、成績、課程名
第一步:搭框架
select * from students inner join scores on students.studentNo = scores.studentNo inner join courses on scores.courseNo = courses.courseNo;
第二步:看條件
select * from students inner join scores on students.studentNo = scores.studentNo inner join courses on scores.courseNo = courses.courseNo where coursename = 'linux';
第三步:返回欄位名
select name,score,coursename from students inner join scores on students.studentNo = scores.studentNo inner join courses on scores.courseNo = courses.courseNo where coursename = 'linux';
帶有order by 排序的內連接查詢
查詢成績最高的男生信息,要求顯示姓名、課程名、成績
select name,score,coursename from
students inner join scores on students.studentNo = scores.studentNo
inner join courses on scores.courseNo = courses.courseNo
order by score desc limit 0,1;
語法:select * from 表1 left join 表2 表1.欄位=表2.欄位
查詢所有學生的信息以及成績,包括沒有成績的學生
select * from students inner left join scores on studnets,studentNo = scores.studentNo;
語法:select * from 表1 right join 表2 表1.欄位=表2.欄位
查詢所有的課程信息,包括沒有成績的課程
select * from student right join courses on scores.courseNo = courses.courseNo;
多表聯合查詢,同名欄位的處理方式(如果多表查詢出現重名欄位時,一定要在所查欄位前加上指定的表名)
如果一條select要用到多個表,表中有同名欄位,就需要 表名.欄位名 加以區分
select students.studentNo form students inner join scores on students.studentNo = scores.studentNo;
查詢一共有多少省(因為省的沒有上級,我們用NULL數據填充)
select count(*) from areas where is null;
查詢一共有多少市
select count(*) from areas where is not null;
自關聯是同一張表做連接查詢
自關聯下,一定找到同一張表可關聯的不同欄位
查詢廣東省所有城市 (當要用到自關聯的時候,需要給表起別名)
select count(*) from areas a1 inner join areas a2 on a1.id = a2.pid where a1.name = '廣東';
子查詢是嵌套到主查詢裡面的
子查詢作為主查詢的數據源或者條件
子查詢是獨立可以單獨運行的查詢語句
主查詢不能獨立運行,依賴子查詢的結果
查詢大於平均年齡的學生記錄
用子查詢實現(子查詢就是把一張表的結果作為另外一張表的條件)
select * from studnets where age > (select avg(age) from students);
查詢30歲的學生的成績
1.查詢30歲學生的studentNo
select studentNo from students where age = 30;
select * from scores where studentNo in ('001','003','011');
用子查詢實現
select * from scores where studentNo in (select * from scores where age = 30);
用內連接實現
select * from student st inner join scores sc on st.studentNo = sc.studentNo where sex = '女' ;
用子查詢實現
用子查詢,查詢所有女生的信息和成績 (把表的查詢結果作為另外一個表然後在做內連接)
select * from (select * from students where sex ='女') stu inner join scores sc on stu.studentsNo = sc.studentsNo;
表級子查詢--子查詢返回結果為多行,多列
1.列出男職工的總數和女職工的總數
select sex,count(*) from employess group by sex;
2.列出非黨員職工的總數
select count(*) from employess where politicalstatus ! = '黨員';
3.列出所有職工工號,姓名以及所在部門的名稱
select empid,empname,deptname from departments d inner join employees e on d.deptid = e.deptid;
4.列出所有職工工號,姓名和對應工資
select e.empid ,empname,salary from employees e inner join salary on e.empid = s.empid;
5.列出領導崗的姓名以及所在部門名稱
select empname,deptname from departments d inner join employees e on d.deptid = e.deptid where leader is null;
6.列出職工人數大於4的部門號和總人數
select deptid,count(*) from employees group by deptid having count(*) > 4;
7.列出職工總人數大於4的部門號和部門名稱
select e.deptid ,deptname count(*) from departments d inner join employees e on d.deptid = e.deptid group by e.deptid having count(*) > 4;
8.列出開發部和測試部的職工號,姓名
select empid,empname from departments d inner join employees e on d.deptid = e.deptid where deptname in ('測試部','開發部');
select e.empid,e.empname from (select * from departments where deptname in ('測試部','開發部')) d inner join employees e on d.depid = e.depid;
9.列出市場部所有女職工的姓名和政治面貌
select empname,politicalsta from departments d inner join employees e on d.deptid = e.deptid where deptname ='市場部' and sex ='女';
10.顯示所有職工姓名和工資,包括沒有工資的職工姓名
select empname,salary from employess e left join salary s on e.empid = s.empid;
11.求不姓孫的所有職工工資
select empname,sum(salary) from employees e left join salary s on e.empid = s.empid where empname not like '孫%';
select empname,salary from (select * from employess where not like '孫%') e inner join salary s on e.empid = s.empid;
Ⅸ sql的幾種常見查詢方式
一、內連接(Inner Join)
select*fromainnerjoinbona.name=b.name;
此語句的結果為同時匹配表a和表b的記錄集。即內連接取的是兩個表的交集。
二、全外連接(full outer join)
select*fromafullouterjoinbona.name=b.name;
此語句的結果為表a與表b的並集,即任意一個表的內容都將被查詢出來,如果另一個表無對應的項,則顯示為null
select*fromafullouterjoinbona.name=b.namewherea.nameisnullorb.nameisnull;
此語句的結果為表a與表b的並集除去兩表的交集。即除去了兩表都有的部分,剩餘的是兩表各自不同的部分
三、左外連接(left outer join)
select*fromaleftouterjoinbona.name=b.name;
此語句的結果為表a的所有項加表b與a相匹配的項,b中沒有與a匹配的項時顯示為null
select*fromaleftouterjoinbona.name=b.namewhereb.nameisnull;
此語句的結果為表a的所有項除去兩表的交集
四、右外連接(right outer join)
select*fromarightouterjoinbona.name=b.name;
此語句的結果為表a與表b匹配的項加表b的所有項,a中沒有與b匹配的項時顯示為null
select*fromarightouterjoinbona.name=b.namewherea.nameisnull;
此語句的結果為表b的所有除去兩表的交集
Ⅹ 怎麼學習SQL語句
創建資料庫
創建之前判斷該資料庫是否存在 if exists (select * from sysdatabases where name='databaseName') drop database 'databaseName' go Create DATABASE database-name
刪除資料庫
drop database dbname
備份sql server
--- 創建 備份數據的 device USE master EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 開始 備份 BACKUP DATABASE pubs TO testBack
創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根據已有的表創建新表: A:create table tab_new like tab_old (使用舊表創建新表) B:create table tab_new as select col1,col2… from tab_old definition only
刪除新表
drop table tabname
增加一個列
Alter table tabname add column col type 註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
添加主鍵
Alter table tabname add primary key(col) 說明:刪除主鍵: Alter table tabname drop primary key(col)
創建索引
create [unique] index idxname on tabname(col….) 刪除索引:drop index idxname on tabname 註:索引是不可更改的,想更改必須刪除重新建。
創建視圖
create view viewname as select statement 刪除視圖:drop view viewname
幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍 插入:insert into table1(field1,field2) values(value1,value2) 刪除:delete from table1 where 范圍 更新:update table1 set field1=value1 where 范圍 查找:select * from table1 where field1 like 』%value1%』 (所有包含『value1』這個模式的字元串)---like的語法很精妙,查資料! 排序:select * from table1 order by field1,field2 [desc] 總數:select count(*) as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1[separator]
幾個高級查詢運算詞
A: UNION 運算符 UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。 B: EXCEPT 運算符 EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。 C: INTERSECT 運算符 INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。 註:使用運算詞的幾個查詢結果行必須是一致的。
使用外連接
A、left outer join: 左外連接(左連接):結果集既包括連接表的匹配行,也包括左連接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join: 右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。 C:full outer join: 全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。