⑴ sql基本命令都是什麼含義,求列表解釋
--SQL基本命令
--數據定義語言
Create(創建)
Alter(更改)
Drop(刪除)
--數據操縱語言
Insert(插入)
select(選擇)
delete(刪除)
update(更新)
--事務控制語言
commit(提交)
savepoint(保存點)
rollback(回滾)
--數據控制語言
Grant(授權)
Revoke(回收)
--Orcale數據類型
--字元數據類型
char這種數據類型的列長度可以是1到2000個位元組。
varchar2該數據類型的大小在1-4000個位元組范圍內
long這種數據類型可存儲最大2GB。
--數值數據類型
number數據類型可以存儲正數、負數、零、定點數和精度為38位的浮點數。
--日期時間數據類型
date數據類型使用七個位元組固定長度,每個位元組分別存儲世紀、年、月、日、小時、分和秒。從4712年1月1日到公元9999年12月13日。
Timestamp數據類型用於存儲日期的年、月、日以及時間的小時、分和秒值。秒值是精確到小數點後6位。該數據類型還包括了時區信息。
--Raw和LongRaw數據類型
Raw數據類型
Raw數據類型用於存儲基於位元組的數據。如二進制數據或位元組串,該數據類型最多能存儲2000個位元組。
LongRaw數據類型用於存儲可變長度的二進制數據,最多能存儲2GB。(該數據不能使用索引,long受到的所有限制對longraw數據類型同樣有效)
--LOB數據類型
Clob數據類型能夠存儲大量字元數據。該數據類型可以存儲單位元組數據和多位元組字元數據。clob可用於存儲非結構化的XML文檔。
Blob數據類型可以存儲較大的二進制對象,如圖形、視頻剪輯和聲音剪輯等。
Bfile數據類型能夠將二進制文件存儲二進制文件存儲在資料庫外部的操作系統文件中。Bfile列存存儲一個Bfile定位器。它指向位於伺服器文件系統上的二進制文件。支持的文件最大為4GB。
--查看指定偽列用戶(scott)
select rowid,ename,comm from emp where sal=1500
--查看偽列數
select * from emp where rownum<2
--數據定義語言
create table (需要創建的表)
alter table (需要更改的表)
truncate table (需要截斷的表)
drop table (需要刪除的表)
--create table保命令
create table [所有者即模式的名稱,如果用戶在自己的模式中創建表,則可以不指定所有者名稱。][需要創建的表名]
([列的名稱] [數據類型及長度]);
--例子(在當前用戶下創建了一張名為(Cool)的表,里有有三個列分別是:Cool_ID、Cool_Name、Cool_like):
create table Cool(
Cool_ID number,
Cool_Name varchar(20),
Cool_like varchar(30));
--在表中插入數據
insert into Cool values(8850,'酷兒','編寫Java應用程序');
insert into Cool values(8851,'酷兒','編寫Java應用程序1');
insert into Cool values(8852,'酷兒','編寫Java應用程序2');
insert into Cool values(8853,'酷兒','編寫Java應用程序3');
insert into Cool values(8854,'酷兒','編寫Java應用程序4');
insert into Cool values(8856,'酷兒','編寫Java應用程序5');
insert into Cool values(8855,'酷兒','編寫Java應用程序6');
--alter table命令
alter table [需要更改的表命稱] [模式(modify=更改,add=添加,drop=刪除)] (表中的列名)
--例子
--更改表中Cool_like列數據長度更改為15
alter table cool modify (cool_name varchar(15));
--插入數據進行測試第一條數據可以順利插入到列中,而第二條數據則不能插入列數,應為它的長度己超過了15個字元。(執行結果為:Error位於第一行:ora-01401:插入數據值對於列過大);
insert into Cool values(8855,'酷兒Test','編寫Java應用程序、游戲等等。');
insert into Cool values(8855,'測試用戶名,此列長度將超過15個字元。','編寫Java應用程序、游戲等等。');
--在表中添加一個列,在表中添加一個Cool_Tel來存儲電話號碼。
alter table Cool add (Cool_Tel varchar(12));
insert into Cool values(8856,'酷兒8856','編寫Java應用程序','13529424360');
--在表中刪除Cool_Tel列;
alter table cool drop column cool_tel;
--Truncate table命令
--刪除表中的記錄而不刪除列,此方法不能回滾因為它不使用事務處理。(優點:刪除速度快)
truncate table cool;(執行結果:表己截斷)
--desc查看cool表的結構
desc cool;
--drop table命令
--刪除Cool表。此方法可以使用事務回滾。
drop table cool;
--數據操縱語言
--選擇命令(Select)
select * from emp;(查詢表中所有數據)
select * from emp where ename='adams';(按條件查詢表中數據)
select distinct * from emp;(不選擇表中的重復行,使用distinct關鍵字);
select * from cool where cool_name='酷兒' order by cool_id asc;(按Coo_ID進行升序排序)
select * from cool where cool_name='酷兒' order by cool_id desc;(按Coo_ID進行降序排序)
create table CoolDemo as select * from cool;(用現有表Cool創建一個新表,數據包括在select語包里,可以是所有,也可以是指定的列)
create table CoolDemo2 as select * from cool where 1 = 2;(此條件不成立,所有隻創建了表結構,沒有數據)
select cool_id+10 sum ,cool_name from cool;(此條語句使用了別名sum並且是cool_id+10語後的值,但原始值不會改變。)
--插入命令(Insert)
insert into cool values(8857,'酷兒','編寫Java應用程序');(在Cool表中插入數據)
insert into cool(cool_name,cool_like) values('酷兒','編寫Java應用程序null');(只插入姓名列(cool_name)和愛好列(cool_like)的值)
insert into cool values(8858,'酷兒',null);(在cool表中跳過了cool_like列,使用空值來填充)
alter table cool add(cool_date date);(在表中添加一個日期列,以便下面插入日期值)
insert into cool values(8859,'酷兒','編寫Java應用程序8859','22-11月-06');(此條語句在Cool表中cool_date列插入了2006年11月12日的日期)
insert into cool select * from cooldemo;(此條語句插入了來自期它表的數據)
--更新命令(Update)
update cool set cool_name='酷兒至酷' where cool_name='酷兒';(如果cool_name列的值等於(酷兒)那麼就將它更改為(酷兒至酷),這是有條件的查詢)
update cool set cool_name='酷兒';(此條語句將cool_name列的所有值更改為(酷兒))
--刪除命令(delete)
delete cool where cool_like='編寫Java應用程序null';(如果cool表中cool_like列值等於(編寫Java應用程序null)就刪除它)
--提交命令(Commit)
commit;(提交事務)
commit work;(功能同上)
--標記命令(SavePoint)
savepoint savepoint_id;(它用來標記事務中可以應用回滾的點。)
--回滾事務(RollBack)
rollback;
rollback work;
rollback to savepoint [自己標記的記錄點];
--數據控制語言
--授權命令(Grant)
Grant [操作許可權如:select,update,delete等] on [表名稱] to [用戶名]
grant select,update,delete on cool to hedong911;(此條語句授權給用戶hedong911查詢、更新、刪除cool表的權力)
grant update(cool_id,cool_name) on cool to hedong911;(此條語句授權給用戶hedong911更新cool表(cool_id,cool_name)列權力)
grant select on cool to hedong911 with grant option;(此語句授權的用戶hedong911可以給其它用戶授權)
--回收授權命令(revoke)
revoke select,update,delete on cool to hedong911;(此條語句回收了hedong911的查詢、更新、刪除權力)
--算術操作符
(跳過)
--比較操作符
--比較操作符包括(=、!=、<、>、<=、>=、between……and(檢查是否在兩個值之間)、in(與列表中的值相匹配)、like(匹配字元模式)和is null(檢查是否為空),最後四個操作符還可以和not(非)一起使用如:not between……and等
select * from cool where cool_name!='1';
select * from cool where cool_name like '酷兒';
select * from cool where cool_id < 8853;
select * from cool where cool_id > 8853;
select * from cool where cool_id <= 8853;
select * from cool where cool_id >= 8853;
select * from cool where cool_like in ('編寫Java應用程序');
--邏輯操作符
--邏輯操作符包括and(與)、or(或)和now(非);
select * from cool where cool_id <=8856 and cool_id >= 8853;
select * from cool where cool_id =9999 or cool_like in ('編寫Java應用程序');
--集合操作符
--聯合查詢(union)
select * from cool union select * from cooldemo;(此條語句將Cool和CoolDemo兩張表的查詢結果合拼,並刪除重復行)
--聯合所有查詢(union all)
select * from cool union all select * from cooldemo;(此條語句將Cool和CoolDemo兩張表的查詢結果合拼,不刪除重復行)
--交集查詢(intersect)
select * from cool intersect select * from cooldemo;(此條語句查詢兩張表都有的行)
--減集查詢(minus)
select * from cool minus select * from cooldemo;(此條語句返回第二張表沒有的數據)
--連接(||)操作符
select ('用戶編號:'||cool_id||'姓名是:'||cool_name||'愛好是:'||cool_like||'日期是:'||cool_date) from cool where cool_id=8859;(運行結果:用戶編號:8859姓名是:酷兒愛好是:編寫Java應用程序8859日期是:22-11月-06)
⑵ SQL查詢語句
SQL查詢語句大全
SQL語句無論是種類還是數量都是繁多的,很多語句也是經常要用到的,SQL查詢語句就是一個典型的例子,無論是高級查詢還是低級查詢,SQL查詢語句的需求是最頻繁的。那麼SQL查詢語句有哪些?下面跟我一起來看看吧!
一、簡單查詢語句
1. 查看錶結構
SQL>DESC emp;
2. 查詢所有列
SQL>SELECT * FROM emp;
3. 查詢指定列
SQL>SELECT empmo, ename, mgr FROM emp;
SQL>SELECT DISTINCT mgr FROM emp; 只顯示結果不同的項
4. 查詢指定行
SQL>SELECT * FROM emp WHERE job='CLERK';
5. 使用算術表達式
SQL>SELECT ename, sal*13+nvl(comm,0) FROM emp;
nvl(comm,1)的意思是,如果comm中有值,則nvl(comm,1)=comm; comm中無值,則nvl(comm,1)=0。
SQL>SELECT ename, sal*13+nvl(comm,0) year_sal FROM emp; (year_sal為別名,可按別名排序)
SQL>SELECT * FROM emp WHERE hiredate>'01-1月-82';
6. 使用like操作符(%,_)
%表示一個或多個字元,_表示一個字元,[charlist]表示字元列中的任何單一字元,[^charlist]或者[!charlist]不在字元列中的任何單一字元。
SQL>SELECT * FROM emp WHERE ename like 'S__T%';
7. 在where條件中使用In
SQL>SELECT * FROM emp WHERE job IN ('CLERK','ANALYST');
8. 查詢欄位內容為空/非空的語句
SQL>SELECT * FROM emp WHERE mgr IS/IS NOT NULL;
9. 使用邏輯操作符號
SQL>SELECT * FROM emp WHERE (sal>500 or job='MANAGE') and ename like 'J%';
10. 將查詢結果按欄位的值進行排序
SQL>SELECT * FROM emp ORDER BY deptno, sal DESC; (按部門升序,並按薪酬降序)
二、復雜查詢
1. 數據分組(max,min,avg,sum,count)
SQL>SELECT MAX(sal),MIN(age),AVG(sal),SUM(sal) from emp;
SQL>SELECT * FROM emp where sal=(SELECT MAX(sal) from emp));
SQL>SELEC COUNT(*) FROM emp;
2. group by(用於對查詢結果的分組統計) 和 having子句(用於限制分組顯示結果)
SQL>SELECT deptno,MAX(sal),AVG(sal) FROM emp GROUP BY deptno;
SQL>SELECT deptno, job, AVG(sal),MIN(sal) FROM emp group by deptno,job having AVG(sal)<2000;
對於數據分組的總結:
a. 分組函數只能出現在選擇列表、having、order by子句中(不能出現在where中)
b. 如果select語句中同時包含有group by, having, order by,那麼它們的順序是group by, having, order by。
c. 在選擇列中如果有列、表達式和分組函數,那麼這些列和表達式必須出現在group by子句中,否則就是會出錯。
使用group by不是使用having的前提條件。
3. 多表查詢
SQL>SELECT e.name,e.sal,d.dname FROM emp e, dept d WHERE e.deptno=d.deptno order by d.deptno;
SQL>SELECT e.ename,e.sal,s.grade FROM emp e,salgrade s WHER e.sal BETWEEN s.losal AND s.hisal;
4. 自連接(指同一張表的連接查詢)
SQL>SELECT er.ename, ee.ename mgr_name from emp er, emp ee where er.mgr=ee.empno;
5. 子查詢(嵌入到其他sql語句中的select語句,也叫嵌套查詢)
5.1 單行子查詢
SQL>SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp where ename='SMITH');查詢表中與smith同部門的人員名字。因為返回結果只有一行,所以用「=」連接子查詢語句
5.2 多行子查詢
SQL>SELECT ename,job,sal,deptno from emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=10);查詢表中與部門號為10的工作相同的員工的姓名、工作、薪水、部門號。因為返回結果有多行,所以用「IN」連接子查詢語句。
in與exists的區別: exists() 後面的子查詢被稱做相關子查詢,它是不返回列表的值的。只是返回一個ture或false的結果,其運行方式是先運行主查詢一次,再去子查詢里查詢與其對 應的結果。如果是ture則輸出,反之則不輸出。再根據主查詢中的每一行去子查詢里去查詢。in()後面的子查詢,是返回結果集的,換句話說執行次序和 exists()不一樣。子查詢先產生結果集,然後主查詢再去結果集里去找符合要求的欄位列表去。符合要求的輸出,反之則不輸出。
5.3 使用ALL
SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ALL (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MAX(sal) FROM emp WHERE deptno=30);查詢工資比部門號為30號的所有員工工資都高的員工的姓名、薪水和部門號。以上兩個語句在功能上是一樣的,但執行效率上,函數會高 得多。
5.4 使用ANY
SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ANY (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MIN(sal) FROM emp WHERE deptno=30);查詢工資比部門號為30號的任意一個員工工資高(只要比某一員工工資高即可)的員工的姓名、薪水和部門號。以上兩個語句在功能上是 一樣的,但執行效率上,函數會高得多。
5.5 多列子查詢
SQL>SELECT * FROM emp WHERE (job, deptno)=(SELECT job, deptno FROM emp WHERE ename='SMITH');
5.6 在from子句中使用子查詢
SQL>SELECT emp.deptno,emp.ename,emp.sal,t_avgsal.avgsal FROM emp,(SELECT emp.deptno,avg(emp.sal) avgsal FROM emp GROUP BY emp.deptno) t_avgsal where emp.deptno=t_avgsal.deptno AND emp.sal>t_avgsal.avgsal ORDER BY emp.deptno;
5.7 分頁查詢
資料庫的每行數據都有一個對應的行號,稱為rownum.
SQL>SELECT a2.* FROM (SELECT a1.*, ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal) a1 WHERE ROWNUM<=10) a2="" where="" rn="">=6;
指定查詢列、查詢結果排序等,都只需要修改最里層的子查詢即可。
5.8 用查詢結果創建新表
SQL>CREATE TABLE mytable (id,name,sal,job,deptno) AS SELECT empno,ename,sal,job,deptno FROM emp;
5.9 合並查詢(union 並集, intersect 交集, union all 並集+交集, minus差集)
SQL>SELECT ename, sal, job FROM emp WHERE sal>2500 UNION(INTERSECT/UNION ALL/MINUS) SELECT ename, sal, job FROM emp WHERE job='MANAGER';
合並查詢的執行效率遠高於and,or等邏輯查詢。
5.10 使用子查詢插入數據
SQL>CREATE TABLE myEmp(empID number(4), name varchar2(20), sal number(6), job varchar2(10), dept number(2)); 先建一張空表;
SQL>INSERT INTO myEmp(empID, name, sal, job, dept) SELECT empno, ename, sal, job, deptno FROM emp WHERE deptno=10; 再將emp表中部門號為10的數據插入到新表myEmp中,實現數據的批量查詢。
5.11 使用了查詢更新表中的數據
SQL>UPDATE emp SET(job, sal, comm)=(SELECT job, sal, comm FROM emp where ename='SMITH') WHERE ename='SCOTT';
簡介
SQL語言1974年由Boyce和Chamberlin提出,並首先在IBM公司研製的關系資料庫系統SystemR上實現。由於它具有功能豐富、使用方便靈活、語言簡潔易學等突出的優點,深受計算機工業界和計算機用戶的歡迎。1980年10月,經美國國家標准局(ANSI)的資料庫委員會X3H2批准,將SQL作為關系資料庫語言的美國標准,同年公布了標准SQL,此後不久,國際標准化組織(ISO)也作出了同樣的決定。
SQL從功能上可以分為3部分:數據定義、數據操縱和數據控制。
SQL的核心部分相當於關系代數,但又具有關系代數所沒有的許多特點,如聚集、資料庫更新等。它是一個綜合的、通用的、功能極強的關系資料庫語言。其特點是:
1、數據描述、操縱、控制等功能一體化。
2、兩種使用方式,統一的語法結構。SQL有兩種使用方式。一是聯機交互使用,這種方式下的SQL實際上是作為自含型語言使用的。另一種方式是嵌入到某種高級程序設計語言(如C語言等)中去使用。前一種方式適合於非計算機專業人員使用,後一種方式適合於專業計算機人員使用。盡管使用方式不向,但所用語言的語法結構基本上是一致的。
3、高度非過程化。SQL是一種第四代語言(4GL),用戶只需要提出「干什麼」,無須具體指明「怎麼干」,像存取路徑選擇和具體處理操作等均由系統自動完成。
4、語言簡潔,易學易用。盡管SQL的'功能很強,但語言十分簡潔,核心功能只用了9個動詞。SQL的語法接近英語口語,所以,用戶很容易學習和使用。
功能
SQL具有數據定義、數據操縱、和數據控制的功能。
1、SQL數據定義功能:能夠定義資料庫的三級模式結構,即外模式、全局模式和內模式結構。在SQL中,外模式又叫做視圖(View),全局模式簡稱模式(Schema),內模式由系統根據資料庫模式自動實現,一般無需用戶過問。
2、SQL數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。
3、SQL的數據控制功能:主要是對用戶的訪問許可權加以控制,以保證系統的安全性。
語句結構
結構化查詢語言包含6個部分:
1、數據查詢語言(DQL: Data Query Language):其語句,也稱為「數據檢索語句」,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其它類型的SQL語句一起使用。
2、數據操作語言(DML:Data Manipulation Language):其語句包括動詞INSERT、UPDATE和DELETE。它們分別用於添加、修改和刪除。
3、事務控制語言(TCL):它的語句能確保被DML語句影響的表的所有行及時得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存點)命令、ROLLBACK(回滾)命令。
4、數據控制語言(DCL):它的語句通過GRANT或REVOKE實現許可權控制,確定單個用戶和用戶組對資料庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。
5、數據定義語言(DDL):其語句包括動詞CREATE,ALTER和DROP。在資料庫中創建新表或修改、刪除表(CREATE TABLE 或 DROP TABLE);為表加入索引等。
6、指針控制語言(CCL):它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作。
語言特點
SQL風格統一
SQL可以獨立完成資料庫生命周期中的全部活動,包括定義關系模式、錄入數據、建立資料庫、査詢、更新、維護、資料庫重構、資料庫安全性控制等一系列操作,這就為資料庫應用系統開發提供了良好的環境,在資料庫投入運行後,還可根據需要隨時逐步修改模式,且不影響資料庫的運行,從而使系統具有良好的可擴充性。
高度非過程化
非關系數據模型的數據操縱語言是面向過程的語言,用其完成用戶請求時,必須指定存取路徑。而用SQL進行數據操作,用戶只需提出「做什麼」,而不必指明「怎麼做」,因此用戶無須了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統自動完成。這不但大大減輕了用戶負擔,而且有利於提高數據獨立性。
面向集合的操作方式
SQL採用集合操作方式,不僅查找結果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合。
以同一種語法結構提供兩種使用方式
SQL既是自含式語言,又是嵌入式語言。作為自含式語言,它能夠獨立地用於聯機交互的使用方式,用戶可以在終端鍵盤上直接輸入SQL命令對資料庫進行操作。作為嵌入式語言,SQL語句能夠嵌入到高級語言(如C、C#、JAVA)程序中,供程序員設計程序時使用。而在兩種不同的使用方式下,SQL的語法結構基本上是一致的。這種以統一的語法結構提供兩種不同的操作方式,為用戶提供了極大的靈活性與方便性。
語言簡潔,易學易用
SQL功能極強,但由於設計巧妙,語言十分簡潔,完成數據定義、數據操縱、數據控制的核心功能只用了9個動詞:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL語言語法簡單,接近英語口語,因此容易學習,也容易使用。
;⑶ SQL 資料庫常用命令及語法舉例
下面是一些常用的SQL語句,雖然很基礎,可是卻很值得收藏,對於初學者非常實用
⑷ Select查詢命令的作用是什麼
查詢是SQL語言的核心,用於表達SQL查詢的select查詢命令是功能最強也是最為復雜的SQL語句,它的作用就是從資料庫中檢索數據,並將查詢結果返回給用戶。 Select語句由select子句(查詢內容)、from子句(查詢對象)、where子旬(查詢條件)、order by子句(排序方式)、group by子句(分組方式)等組成。
結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。
結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的介面。結構化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。
1986年10月,美國國家標准協會對SQL進行規范後,以此作為關系式資料庫管理系統的標准語言(ANSI X3. 135-1986),1987年得到國際標准組織的支持下成為國際標准。不過各種通行的資料庫系統在其實踐過程中都對SQL規范作了某些編改和擴充。所以,實際上不同資料庫系統之間的SQL不能完全相互通用。
⑸ SQL查詢指令運用
請試一試:
selecta.[商品ID],a.a+isnull(b.bQty,0)-isnull(c.cQty)as[數量],
b.bAll/b.bqtyas[進價],
c.cAll/c.bqtyas[售價]
from
(select[商品ID],sum(庫存數量)asafrom[庫存表]groupby[商品ID])a
leftjoin
(select[商品ID],sum(進貨數量)asbQty,
sum(進貨數量*進價)asbAll
from[進貨表]groupby[商品ID])b
ona.[商品ID]=b.[商品ID]
(select[商品ID],sum(銷售數量)ascQty,
sum(銷售數量*售價)ascAll
from[銷售表]groupby[商品ID])c
ona.[商品ID]=c.[商品ID]
如有疑問,及時溝通!
⑹ 第四十五章 SQL命令 FROM(一)
一個SELECT子句,指定要查詢的一個或多個表。
FROM 子句指定在 SELECT 語句中查詢數據的一個或多個表(或視圖或子查詢)。
如果沒有查詢表數據,則 FROM 子句是可選的,如下所述。
多個表被指定為逗號分隔的列表,或者由其他 JOIN 語法分隔的列表。
可以為每個表名提供一個別名。
在 SELECT 語句中為多個表指定欄位名時使用表名別名。
如果 FROM 子句中指定了兩個(或更多)表,可以通過指定 tablename 來指明需要哪個表的欄位。
SELECT SELECT -item 子句中每個欄位的欄位名。
由於表名通常是長名稱,因此短表名別名在此上下文中很有用( t-alias.fieldname )。
下面的示例展示了表名別名的使用:
AS關鍵字可以省略。
它是為了兼容性和清晰度而提供的。
table-ref 名稱可以是限定的( schema.tablename )或非限定的( tablename )。
非限定表名(或視圖名)的模式名使用模式搜索路徑或系統范圍的默認模式名提供:
當在 FROM 子句中指定多個表名時, SQL將對這些表執行連接操作。
執行的連接類型由每對表名之間的連接關鍵字短語或符號指定。
當兩個表名用逗號分隔時,將執行交叉連接。
執行連接的順序是由SQL查詢優化器自動確定的,而不是基於查詢中列出的表的順序。
如果需要,可以通過指定查詢優化選項來控制執行連接的順序。
以下三個 SELECT 語句顯示了兩個單獨表的行數,以及指定兩個表的 SELECT 的行數。後者產生一個更大的表,即笛卡爾乘積,其中第一個表中的每一行都與第二個表中的每一行相匹配,這一操作稱為交叉聯接( Cross Join )。
從 Sample.Company、Sample.Vendor 中選擇計數( * )
在大多數情況下,交叉連接的大量數據復制是不可取的,而某些其他類型的連接更可取。
如果在 SELECT 語句中指定 WHERE 子句,則執行交叉聯接,然後 WHERE 子句謂詞確定結果集。這等效於使用 ON 子句執行內聯接。因此,以下兩個示例返回相同的結果:
默認情況下, SQL查詢優化器使用復雜而靈活的演算法來優化涉及聯接操作和/或多個索引的復雜查詢的性能。在大多數情況下,這些默認值可提供最佳性能。但是,在極少數情況下,可能希望向查詢優化器提供「提示」,指定查詢優化的一個或多個方面。因此, SQL在 FROM 子句中提供了 OPTIMIZE-OPTION 關鍵字。可以按任意順序指定多個優化關鍵字,並以空格分隔。
可以在簡單的 SELECT 語句、 CREATE VIEW DEFINITION SELECT 語句或 FROM 子句的子查詢 SELECT 語句中使用 OPTIMIZE-OPTION FROM 子句關鍵字。
此可選關鍵字指定提供任何好處的所有索引都用於查詢聯接順序中的第一個表。只有在定義了多個索引時才應使用此關鍵字。優化器的默認設置是只使用優化器認為最有益的那些索引。默認情況下,這包括所有有效的相等索引和其他類型的選定索引。 %ALLINDEX 使用所有類型的所有可能有益的索引。測試所有索引的開銷較大,但在某些情況下,它可能會提供比默認優化更好的性能。當使用多個范圍條件索引和低效相等條件索引時,此選項特別有用。在這些情況下,查詢優化器可能無法獲得准確的索引選擇性。 %ALLINDEX 可以與 %IGNOREINDEX 一起使用,以包括/排除特定索引。通常, %ALLINDEX 不應與 TOP 子句查詢一起使用。
可以將 %STARTTABLE 與 %ALLINDEX 配合使用,以指定 %ALLINDEX 應用於哪個表。
可以使用 %NOINDEX 條件級別提示為特定條件的 %ALLINDEX 指定異常。
%NOINDEX 提示放置在不應該使用索引的每個查詢選擇條件的前面。
例如, WHERE %NOINDEX hiredate < ? 。
這在絕大多數數據沒有被排除的情況下最常用。
對於小於( < )或大於( > )條件,使用%NOINDEX條件級別提示通常是有益的。
對於相等條件,使用 %NOINDEX 條件級提示沒有任何好處。
對於連接條件, ON 子句連接支持 %NOINDEX 。
此可選關鍵字指定查詢優化器應開始使用指定的表名執行聯接。 tablename 為稍後在聯接序列中指定的表命名。其餘表的聯接順序留給查詢優化器。此提示在功能上與 %STARTTABLE 相同,但為提供了以任意順序指定聯接表序列的靈活性。
tablename 必須是簡單標識符,可以是表別名,也可以是非限定表名。不能使用限定表名( schema.table )。如果查詢指定了表別名,則必須將該表別名用作表名。例如:
%FIRSTTABLE 和 %STARTTABLE 都允許指定用於聯接操作的初始表。 %INORDER 允許指定用於聯接操作的所有表的順序。這三個關鍵詞是相互排斥的;只指定一個和一個。如果不使用這些關鍵字,查詢優化器將按照其認為最佳的順序對表執行聯接,而不管這些表的列出順序如何。
不能使用 %FIRSTTABLE 或 %STARTTABLE 從左外部聯接的右側(或右外部聯接的左側)開始聯接順序。嘗試這樣做會導致 SQLCODE-34 錯誤:「優化器無法找到可用的聯接順序」。
此可選關鍵字指定編譯器優化器檢查所有可選聯接序列以最大化訪問性能。例如,在創建存儲過程時,增加的編譯時間可能值得提供更優化的訪問。默認優化是,當 FROM 子句中有許多表時,不檢查不太可能的連接序列。 %FULL 將覆蓋此默認行為。
當 FROM 子句包含使用箭頭語法訪問的表時,可以同時指定 %INORDER 和 %FULL 關鍵字,這些表的順序不受約束。
此可選關鍵字指定查詢優化器忽略指定的索引或索引列表。(為了向後兼容,支持不推薦使用的同義詞 %IGNOREINDICES 。)
在此關鍵字後面指定一個或多個索引名。多個索引名必須用逗號分隔。可以使用以下格式之一指定索引名:
方案名和表名是可選的。如果省略,則使用當前默認架構和指定為 from table-ref 的表名。星號( * )通配符指定指定表的所有索引名。可以按任意順序指定索引名稱。 SQL不會驗證指定的索引名(或它們的模式名和表名);不存在或重復的索引名將被忽略。
通過使用此優化約束,可以使查詢優化器不使用對特定查詢不是最佳的索引。通過指定除一個索引名之外的所有索引名,實際上可以強制查詢優化器使用剩餘的索引。
還可以通過在條件前面加上 %noindex 關鍵字來忽略特定條件表達式的特定索引。
此可選關鍵字指定查詢優化器按照表在 FROM 子句中列出的順序執行聯接。這最大限度地減少了編譯時間。子查詢的扁平化和索引使用不受影響。
%INORDER 不能與交叉聯接或右外部聯接一起使用。如果指定的表順序與外部聯接的要求不一致,則會生成 SQLCODE-34 錯誤:「Optimizer找不到可用的聯接順序。」為避免這種情況,建議在與外部聯接一起使用 %INORDER 時,僅與ANSI樣式的左外部聯接或完全外部聯接一起使用。
視圖和表子查詢按照它們在 FROM 子句中指定的順序進行處理。
將此關鍵字與 %FIRSTTABLE 和 %STARTTABLE 進行比較,這兩個關鍵字都只指定初始連接表,而不指定完整的連接順序。
不能同時使用 %INORDER 和 %PARALLEL 優化;如果同時指定了這兩個優化,則忽略 %PARALLEL 。
此可選關鍵字在量化的子查詢(返回布爾值的子查詢)的 FROM 子句中指定。它指定編譯器優化器應抑制子查詢展平。此優化選項禁用「扁平化」(默認),它通過將子查詢有效地集成子查詢到查詢中來優化包含量化的子查詢的查詢:將子查詢的表添加到查詢的 FROM 子句中,並將子查詢中的條件轉換為查詢的 WHERE 子句中的聯接或限制。
以下是使用 %NOFLATTEN 的量化子查詢的示例:
%INORDER 和 %STARTTABLE 優化隱式指定 %NOFLATTEN 。
此可選關鍵字在子查詢的 FROM 子句中指定。它指定編譯器優化器應該禁止子查詢到視圖的轉換。此優化選項通過將子查詢作為內聯視圖添加到查詢的 FROM 子句來禁用對包含子查詢的查詢的優化;子查詢與查詢欄位的比較將作為聯接移動到查詢的 WHERE 子句。
此可選關鍵字在流式子查詢的 FROM 子句中指定-返回行的結果集的子查詢,即封閉查詢的 FROM 子句中的子查詢。它指定編譯器優化器應該禁止將子查詢(或視圖)合並到包含查詢中。
在下面的示例中,查詢優化器通常會通過對子查詢執行 Sample.Person 的笛卡爾乘積聯接來「減少」該查詢。 %NOREDUCE 優化選項可防止出現這種情況。 IRIS改為在 GNAME 上構建臨時索引,並在此臨時索引上執行聯接:
此可選關鍵字在量化的子查詢(返回布爾值的子查詢)的 FROM 子句中指定。它指定編譯器優化器應禁止集值子查詢優化( SVSO )。
在大多數情況下,集值子查詢優化可以提高 [NOT] EXISTS 和 [NOT] In 子查詢的性能,特別是對於只有一個可分離關聯條件的子查詢。
它通過用滿足條件的數據值填充臨時索引來實現這一點。
IRIS不是重復執行子查詢,而是在臨時索引中查找這些值。
例如, SVSO 優化了 NOT EXISTS (SELECT P.num FROM Procts P WHERE S.num=P.num AND P.color='Pink') ,創建臨時索引。
SVSO 優化了 ALL 或 ANY 關鍵字與相對操作符( > , >= , < ,或 <= )和子查詢的子查詢,如 … WHERE S.num > ALL (SELECT P.num…)
它通過將子查詢表達式 sqbExpr (在本例中為 P.num )替換為 MIN(sqbExpr) 或 MAX(sqbExpr) 來實現這一點。
當 sqbExpr 上有索引時,它支持快速計算。
%INORDER 和 %STARTTABLE 優化不禁止集值子查詢優化。
當使用帶有 ORDER BY 子句的 TOP 子句時指定此可選關鍵字。
默認情況下, TOP 和 ORDER By 優化到第一行的最快時間。
相反,指定 %NOTOPOPT (沒有 TOP 優化)將優化查詢,以最快地檢索完整的結果集。
此可選關鍵字在查詢或子查詢的 FROM 子句中指定。
它禁用為多個 OR 條件和針對 UNION 查詢表達式的子查詢提供的自動優化。
這些自動優化將多個 OR 條件轉換為 UNION 子查詢,或將 UNION 子查詢轉換為 OR 條件。
這些 UNION/OR 轉換允許 EXISTS 和其他低級謂詞遷移到頂級條件,以便IRIS查詢優化器索引使用它們。
這些默認轉換在大多數情況下都是可取的。
然而,在某些情況下,這些 UNION/OR 轉換會帶來很大的開銷負擔。
%NOUNIONOROPT 對與此 FROM 子句關聯的 WHERE 子句中的所有條件禁用這些自動 UNION/OR 轉換。
因此,在一個復雜的查詢中,可以對一個子查詢禁用這些自動UNION/OR優化,同時在其他子查詢中允許它們。
UNION %PARALLEL 關鍵字禁用自動 UNION-to- or 優化。
%INORDER 和 %STARTTABLE 優化抑制了 OR-to-UNION 優化。
%INORDER 和 %STARTTABLE 優化不抑制 UNION-to-OR 優化。
⑺ 一般來說,用SQL進行查詢時,命令里要包含哪些內容
select,from,where,orderby,等等
你可以使用 WHERE 語句來包含任何條件。
你可以使用 LIMIT 屬性來設定返回的記錄數。
你可以通過OFFSET指定SELECT語句開始查詢的數據偏移量。默認情況下偏移量為0
具體信息:
⑻ 用sql命令查詢數據
select * frm spec
⑼ 簡單明了,大學生都應該知道的SQL
SQL(結構化查詢語言)是用於訪問和操作資料庫中的數據的標准資料庫編程語言。
SQL是關系資料庫系統的標准語言。所有關系資料庫管理系統(RDMS),如MySQL、MS Access、Oracle、Sybase、Informix、Postgres和SQL Server都使用SQL作為它們的標准資料庫語言。
為了處理資料庫和資料庫相關的編程,程序員需要有一些介質,或者可以說介面來詳細說明一組命令或代碼來處理資料庫或訪問資料庫的數據。在本章中,將簡要介紹在學習SQL的過程中您將學習的術語。
SQL為結構化查詢語言提供了獨特的學習和資料庫處理技術,並將幫助您更好地控制SQL查詢並有效處理這些代碼。由於SQL幫助您包括資料庫創建,資料庫或表刪除,獲取行數據和修改這些數據等,並行SQL使得事情自動和平滑,最終用戶可以輕松訪問和處理該應用程序的數據。
雖然 SQL 是一門 ANSI(American National Standards Institute 美國國家標准化組織)標準的計算機語言,但是仍然存在著多種不同版本的 SQL 語言。
然而,為了與 ANSI 標准相兼容,它們必須以相似的方式共同地來支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。
要創建一個顯示資料庫中數據的網站,您需要:
RDBMS 指關系型資料庫管理系統,全稱 Relational Database Management System。
RDBMS 是 SQL 的基礎,同樣也是所有現代資料庫系統的基礎,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
RDBMS 中的數據存儲在被稱為表的資料庫對象中。
表是相關的數據項的集合,它由列和行組成。
代碼示例:
每個表都被分解成稱為欄位的更小的實體。Customers表中的欄位由CustomerID,CustomerName,ContactName,Address,City,PostalCode和Country組成。欄位是表中的一列,用於維護表中每條記錄的特定信息。
記錄(也稱為行)是表中存在的每個單獨條目。例如,在上面的Customers表中有91條記錄。記錄是表中的橫向實體。
列是表中的垂直實體,其包含與表中的特定欄位相關聯的所有信息。
當您對任何RDBMS執行SQL命令時,系統將確定執行請求的最佳方式,並由SQL引擎確定如何解釋該任務。
在此過程中包含了各種組件。
典型的查詢引擎處理所有非SQL查詢,但SQL查詢引擎不會處理邏輯文件。
與關系資料庫交互的標准SQL命令是創建、選擇、插入、更新、刪除和刪除,簡單分為以下幾組:
數據定義語言用於改變資料庫結構,包括創建、更改和刪除資料庫對象。用於操縱表結構的數據定義語言命令有:
數據操縱語言用於檢索、插入和修改數據,數據操縱語言是最常見的SQL命令。
數據操縱語言命令包括:
數據控制語言為用戶提供許可權控制命令。
用於許可權控制的命令有:
使用SQL格式化工具可以比較直觀地看到您想要的操作
⑽ SQL中怎樣用查詢命令,
在查詢分析器select * from 表名(table) where 姓名="(某人姓名)"