查詢語句差不多的

創(chuàng)新互聯(lián)是專業(yè)的金林網(wǎng)站建設(shè)公司,金林接單;提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行金林網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
select?*?from?表名--最基礎(chǔ)的查詢與SQL?Server一樣
(ORACLE) ?SELECT a.*, b.* from a(+) = b就是一個右連接,等同于select a.*, b.* from a right join b ?(ORACLE與SQL Server)
(ORACLE) ?SELECT a.*, b.* from a = b(+)就是一個左連接,等同于select a.*, b.* from a left join b (Oracle 與SQL Server)
記得加條件
1.create user username identified by password;//建用戶名和密碼oracle ,oracle
2.grant connect,resource,dba to username;//授權(quán) grant connect,resource,dba,sysdba to username;
3.connect username/password//進(jìn)入。
4.select table_name,column_name from user_tab_columns where table_name='TABLE_NAME';//查詢表中的表名,字段名等等。 最后的table_name要大寫。
5. 如何執(zhí)行腳本SQL文件? SQL@PATH/filename.sql;
7.查詢用戶下的所有表 select distinct table_name from user_tab_columns; ===僅顯示一列表名。
8.如何搜索出前N條記錄?
select * from tablename where rownumn;--足矣。(--是注釋用的標(biāo)記)
9.查找用戶下的所有表:select * from tab; --查詢該用戶下的所有表及視圖(顯示表名tname, 類型tabname和clusterid)
2、顯示當(dāng)前連接用戶
SQL show user –不能用在sql窗口 只能用在command命令窗口。
3、查看系統(tǒng)擁有哪些用戶
SQL select * from all_users;
4、新建用戶并授權(quán)
SQL create user a identified by a;(默認(rèn)建在SYSTEM表空間下)
SQL grant connect,resource to a;
5、連接到新用戶
SQL conn a/a –或者是connect a/a
6、查詢當(dāng)前用戶下所有對象
SQL select * from tab; --table或是view
7、建立第一個表
SQL create table a(a number);
8、查詢表結(jié)構(gòu)
SQL desc a
9、插入新記錄
SQL insert into a values(1);
10、查詢記錄
SQL select * from a;
11、更改記錄
SQL update a set a=2;
12、刪除記錄
SQL delete from a;
13、回滾
SQL roll;
SQL rollback;
14、提交
SQL commit;
select * from
(select t.*,dense_rank() over (order by cardkind) rank from cardkind t)
where rank = 2;
46. 如何在字符串里加回車?
select 'Welcome to visit'||chr(10)||'' from dual ; --‘||chr(10)||’作為換行符
53. 如何使select語句使查詢結(jié)果自動生成序號?
select rownum COL from table; --主要就是oracle中引入了rownum
54. 如何知道數(shù)據(jù)褲中某個表所在的tablespace?
select tablespace_name from user_tables where table_name='TEST'; --table_name名稱要大寫。
select * from user_tables中有個字段TABLESPACE_NAME,(oracle);
select * from dba_segments where …;
55. 怎么可以快速做一個和原表一樣的備份表?
create table new_table as (select * from old_table);
59. 請問如何修改一張表的主鍵?
alter table aaa drop constraint aaa_key ;
alter table aaa add constraint aaa_key primary key(a1,b1) ;
60. 改變數(shù)據(jù)文件的大小?
用 ALTER DATABASE .... DATAFILE .... ;
手工改變數(shù)據(jù)文件的大小,對于原來的 數(shù)據(jù)文件有沒有損害。
61. 怎樣查看ORACLE中有哪些程序在運行之中?
查看v$session表
62. 怎么可以看到數(shù)據(jù)庫有多少個tablespace?
select * from dba_tablespaces;
數(shù)據(jù)查詢 是數(shù)據(jù)庫操作中最主要的功能之一;有時候數(shù)據(jù)庫查詢性能的好壞 直接關(guān)系到數(shù)據(jù)庫的運行效率 關(guān)系到數(shù)據(jù)庫的選型 下面筆者不談大道理 只是對其中對一些平時大家容易忽略的查詢小技巧做一些總結(jié) 或許大家可能正在為此犯愁呢?
第一個技巧 利用連接符連接多個字段
如在員工基本信息表中 有員工姓名 員工職位 出身日期等等 如果現(xiàn)在視圖中這三個字段顯示在同一個字段中 并且中間有分割符 如我現(xiàn)在想顯示的結(jié)果為 經(jīng)理Victor出身于 年 月 日 這該如何處理呢?其實 這是比較簡單的 我們可以在Select查詢語句中 利用連接符把這些字段連接起來
如可以這么寫查詢語句
SELECT員工職位 || ||員工姓名|| 出身于 ||出身日期 as 員工出身信息 FROM 員工基本信息表;
通過這條語句就可以實現(xiàn)如上的需求 也就是說 我們在平時查詢中 可以利用||連接符把一些相關(guān)的字段連接起來 這在報表視圖中非常的有用 如筆者以前在設(shè)計圖書館管理系統(tǒng)的時候 在書的基本信息處有圖書的出版社 出版序列號等等內(nèi)容 但是 有時會在打印報表的時候 需要把這些字段合并成一個字段打印 為此 就需要利用這個連接符把這些字段連接起來 而且 利用連接符還可以在字段中間加入一些說明性的文字 以方便大家閱讀 如上面我在員工職位與員工姓名之間加入了空格;并且在員工姓名與出身日期之間加入了出身于幾個注釋性的文字 這些功能看起來比較小 但是卻可以大大的提高內(nèi)容的可讀性 這也是我們在數(shù)據(jù)庫設(shè)計過程中需要關(guān)注的一個內(nèi)容
總之 令后采用連接符 可以提高我們報表的可讀性于靈活性
第二個技巧 取消重復(fù)的行
如在人事管理系統(tǒng)中 有員工基本信息基本表 在這張表中 可能會有部門 職位 員工姓名 身份證件號碼等字段 若查詢這些內(nèi)容 可能不會有重復(fù)的行 但是 我若想知道 在公司內(nèi)部設(shè)置了哪些部門與職位的時候 并且這些部門與職位配置了相關(guān)人員 此時 又該如何查詢呢?
若我現(xiàn)在直接查詢部門表 其可以知道系統(tǒng)中具體設(shè)置了哪些部門與職位 但是 很有可能這些部門或者職位由于人事變動的關(guān)系 現(xiàn)在已經(jīng)沒有人了 所以 這里查詢出來的是所有的部門與職位信息 而不能夠保證這個部門或者職位一定有職員存在 也就是說 這不能夠滿足于我們上面的要求
若我現(xiàn)在直接從員工信息表中查詢 雖然可以保證所查詢出來的部門與職位信息 一定有員工信息的存在 但是 此時查詢出來的部門與職位信息會有重復(fù)的行 如采購部門分工合作 可能會有采購采購小組長 此時 在查詢出來的部門與職位的信息中 就會有三條重復(fù)的記錄
所以 以上兩種處理方式 都不能夠百分之百的滿足企業(yè)用戶的需求 此時 我們其實可以利用一個DISTINCT函數(shù) 來消除其中查詢出來的重復(fù)行
如我們可以利用SELECT DISTINCT 部門信息 職位信息 FROM 員工基本信息表 通過這條加了DISTINCT約束的查詢語句 不但可以查詢出所有有員工的職位與部門信息 而且 會把重復(fù)的記錄過濾掉 從而提高可閱讀性
所以 在數(shù)據(jù)庫設(shè)計過程中 特別是在查詢語句的使用中 這個函數(shù)特別有用
第三個技巧 勤用WHERE語句
我們都知道 數(shù)據(jù)庫查詢效率高不高 是我們評價數(shù)據(jù)庫設(shè)計好壞的一個重要標(biāo)準(zhǔn) 毋庸置疑 在數(shù)據(jù)庫查詢中勤用Where條件語句 是提高數(shù)據(jù)庫查詢性能的一個很重要的手段之一 特別是在設(shè)計到比較大的表中查詢符合條件的記錄過程中 利用WHERE條件語句加以限制 可以大幅度的提高查詢的響應(yīng)速度
如在圖書館管理系統(tǒng)中 現(xiàn)在有人想查詢 注冊會計師 輔導(dǎo)用書的時候 雖然不在書的類別或者名稱中輸入 注冊會計師 先查詢出全部的紀(jì)錄 然后再一條條的看是否有相關(guān)的書籍信息 也是可行的 但是 這么處理的話 一方面系統(tǒng)響應(yīng)的速度會非常的慢 因為里面記錄很多 另一方面 查詢的結(jié)果看起來也會非常的頭疼
其實 我們只需要在查詢中加入一些查詢的參數(shù) 利用Where條件語句加以限制 則即可以提高數(shù)據(jù)庫響應(yīng)的速度 也可以找出最符合用戶需求的數(shù)據(jù)
另外 我也接觸過一些在Oracle數(shù)據(jù)庫上設(shè)計的平臺型管理軟件 他們可以自定義相關(guān)的報表 在報表設(shè)計中 只要用戶在前臺設(shè)計平臺中 選中 大表查詢 的話 則這個平臺會在生成報表的時候 自動應(yīng)用Where條件語句 以提高前臺系統(tǒng)從數(shù)據(jù)庫查詢數(shù)據(jù)的效率
所以 筆者認(rèn)為在Oracle數(shù)據(jù)庫系統(tǒng)設(shè)計中 要勤于使用Where語句 利用Where語句來提高數(shù)據(jù)庫查詢的效率
第四個技巧 靈活使用COUNT函數(shù)
在查詢處理的時候 COUNT函數(shù)可以說是我們應(yīng)用的比較多的函數(shù)之一 如我們有時候需要統(tǒng)計員工的人數(shù) 統(tǒng)計圖書的種類數(shù)的時候 都需要使用到這個函數(shù) 不過 這個函數(shù)很多人可能會用 但是到靈活應(yīng)用的地步 還是有一點差距
下面筆者就COUNT函數(shù)的一些應(yīng)用技巧談?wù)勛约旱男牡?/p>
一是要靈活放置COUNT函數(shù)的位置 因為利用COUNT函數(shù)統(tǒng)計記錄數(shù)的時候 是會考慮空行的記錄的 如在數(shù)據(jù)表中一般有序列字段與其它的有意義字段兩類 有時候可能序列字段中有內(nèi)容而其它字段中沒有內(nèi)容 則在利用COUNT函數(shù)統(tǒng)計記錄數(shù)量的時候 會把這個空記錄也考慮進(jìn)去 很明顯 則就會發(fā)生統(tǒng)計的錯誤 所以 這個COUNT函數(shù)該放在哪個位置上 還是比較講究的 一般的話 筆者試建議不要放在序列號字段上 而要放在一些關(guān)鍵的實體字段中 如統(tǒng)計員工人數(shù)的時候 則就可以放在員工姓名或者編號上等等
二是靈活跟其它函數(shù)搭配使用 如在上面的例子中 筆者談到有時候用戶需要知道現(xiàn)在有員工編制的部門與職位有哪一些 我們可以利用DISTINCT函數(shù)來找出具體的部門 但是 我現(xiàn)在只想知道有編制的部門與職位具體有多少 此時 我們也可以利用COUNT 與DISTINCT函數(shù)結(jié)合應(yīng)用 找出我們所需要的數(shù)據(jù) 在COUNT函數(shù)中 可以指定ALL與DISTINCT選項 默認(rèn)的情況下 是ALL選項 表示統(tǒng)計所有的行 其中也包括重復(fù)的行 而DISTINCT就表示只統(tǒng)計不重復(fù)的行 可見 COUNT函數(shù)跟其它函數(shù)搭配使用的話 可以簡化我們的查詢語句 提高查詢效率
第五個技巧 只查詢時必須的字段
有時候 用戶不同的查詢需求都要用到同一張表 如在員工信息表中包含了很多內(nèi)容 有時候用戶想要知道正式員工有多少;管理層員工有多少;生產(chǎn)線員工又有哪些;或者想知道合同即將到期的員工有哪些 為此 就遇到一個問題 因為這些內(nèi)容基本上都是在同一張表中 那是在同一個視圖中實現(xiàn) 而是根據(jù)需求不同 設(shè)計不同的視圖呢?
若單從技術(shù)上考慮 兩這都是可以實現(xiàn)的 不會有多大的難度 但是 若是從數(shù)據(jù)庫性能上考慮在 則還是采用不同的視圖來實現(xiàn)不同的需求為好
一方面 若從安全方面講 則可以根據(jù)不同的視圖來控制相關(guān)的訪問權(quán)限 可見 把視圖細(xì)化 在權(quán)限控制上則會更加的靈活
lishixinzhi/Article/program/Oracle/201311/17049
查詢是數(shù)據(jù)的一個重要操作。用戶發(fā)送查詢請求,經(jīng)編譯軟件變異成二進(jìn)制文件供服務(wù)器查詢,后返回查詢結(jié)果集給用戶,查詢會產(chǎn)生一個虛擬表,看到的是表形式顯示的結(jié)果,但結(jié)果并不真正的存儲,每次執(zhí)行查詢只是從數(shù)據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來。
SELECT 列名
FGROM 表名
[WHERE 查詢條件表達(dá)式]
[GROUP BY 分組表達(dá)式]
[HAVING 分組查詢表達(dá)式]
[ORDER BY 排序的列名 [ASC或DESC]]
group by 用于對查詢的結(jié)果分組統(tǒng)計,通過對group by后面的名字進(jìn)行分組后輸出結(jié)果。
group by后面還可以跟多列表示 多列分組 ,在多列分組時放前面的優(yōu)先分組。
group by 列名,列名
having 子句用于限制分組顯示結(jié)果,其只能和group by一起連用。在where中沒有辦法直接使用聚合函數(shù),即sum avg等無法使用,所以引用了having,在having中可以使用這些函數(shù)。
order by 表示排序,后跟列名和排序方式。如果什么都不加默認(rèn)為升序。ASC表示升序,DESC表示降序。
在Oracle中還可以設(shè)置多列排序
order by 列名1 升降,列名2 升降;
前面的為主要排序,后面的為次一級排序。
注:碰到自己與自己比較的情況下,不能用having,可以創(chuàng)建一個新列。
注:如果select語句同時包含group by,having,order by,按group by,having,order by排序
分組和聚合一起使用,目的是為了統(tǒng)計信息。
where是為了from服務(wù)的,只能跟 真實的字段 ,用來篩選from子句中指定的操作所產(chǎn)生的行
group by 用來分組where子句的輸出
having 用來從分組的結(jié)果中篩選行
order by用來對篩選的結(jié)果進(jìn)行排序
(1)分組函數(shù):max min?avg sum count
max表示該列的最大值,min表示該列的最小值,avg表示該列的平均值,sum表示該列的和,count表示該列的行數(shù)。
注:分組函數(shù)(max、min、avg、count、sum)只能出現(xiàn)在選擇列表中having子句、order by子句、不能出現(xiàn)在where子句和group by子句中。
(2)多表查詢
多表查詢是指兩個和兩個以上的表或者是視圖的查詢,在實際應(yīng)用中,當(dāng)查詢單個表不能滿足需求時,一般使用多表查詢。如:顯示sales部門位置和其員工的姓名,這種情況下需要使用到(dept表和emp表)。
多表查詢的連接一般可以分為:內(nèi)連接、左外連接、右外連接、全連接。
注:在使用多表查詢的時候每個表可以設(shè)置別名,如果表指定了別名,那么語句中所有語句必須使用別名,而不能再使用實際表名。且在寫屬性的時候如果屬性為其中一個表特有的屬性則不需要寫別名,如果是兩個表都有則必須指定是哪一個表的哪個屬性格式為:表名.屬性名。
select 列名 from 表1 別名,表2 別名...
注:e是emp的別名,d是dept的別名。
但如果對表進(jìn)行了操作則需要設(shè)置別名,如:查詢每個部門中工資高于該部門平均工資的員工人數(shù)。在其中有一個avg表,這個表必須設(shè)置別名(提醒:如果僅有一個被修改的表,則可以不設(shè)置別名,但如果有多個表則必須設(shè)置別名)。
內(nèi)連接
內(nèi)連接通過使用比較運算符來使每個表的通用列中的值匹配來組成一個新表,即:把兩個表中間共有的那些行拿出來進(jìn)行連接,如果某些行不是兩個表共有的,則不進(jìn)行連接。
select
from 表1
inner join 表2
on 匹配條件
或
select
from 表1 表2
where匹配條件
左外連接
左外連接與內(nèi)連接的區(qū)別是:設(shè)置左外連接的時候設(shè)置了主表和附表,主表在前,附表在后。內(nèi)連接是將兩個表匹配的地方輸出出來,而左外連接則是主表全寫,附表一一對應(yīng),附表有則加上,沒有不寫。
select
from 表1
left join 表2
on 匹配條件
右外連接
右外連接和左外連接基本相同只是右外連接的主表寫在后邊。
select
from 表1
right join 表2
on 匹配條件
全連接
全連接是在等值連接的基礎(chǔ)上將左表和右表的未匹配數(shù)據(jù)都加上,使用的關(guān)鍵字為full outer join或者full join。
select
from 表1
full join 表2
on 匹配條件
自連接
還有一種特殊情況即自連接,在Oracle中一個表無法與自己進(jìn)行比較,所以當(dāng)需要自己表的兩個信息做比較的時候也需要使用連接來連接,即同一張表的連結(jié)查詢。
(3)子查詢
子查詢是指嵌套在其他sql語句中的select語句,也叫嵌套查詢。sql語句執(zhí)行順序為從右到左執(zhí)行,所以在執(zhí)行查詢時會先執(zhí)行左側(cè)的子查詢后進(jìn)行主查詢。
子查詢分為單行子查詢和多行子查詢,單行子查詢是指返回一行數(shù)據(jù)的子查詢語句,多行子查詢是指返回多行數(shù)據(jù)的查詢語句。子查詢還可以分為多列子查詢、多行子查詢、多列多行子查詢。
在進(jìn)行子查詢時如果內(nèi)部查詢不返回任何記錄,則外部條件中字段DEPTNO與NULL比較永遠(yuǎn)為假,也就是說外部查詢不返回任何結(jié)果。
總結(jié)為:
單行子查詢是指子查詢只返回單列、單行數(shù)據(jù)
多行子查詢是指返回單列多行數(shù)據(jù),都是針對單列而言的
多列子查詢則是指查詢返回多個列數(shù)據(jù)的子查詢語句
單行子查詢
where deptno = (單行數(shù)值)
多行子查詢
where deptno in ( 多行數(shù)值 )
多列子查詢:
where (job,deptno)=(select job,deptno from emp where ename='KING')
多列多行子查詢
where (job,deptno) in (select job,deptno from emp where ename='KING')
單行子查詢
在單行子查詢的外部查詢中可以使用=、、、=、=、等比較運算符。
內(nèi)部查詢返回的結(jié)果必須與外部查詢條件中字段(DEPTNO)相匹配。
多行子查詢
在WHERE子句中使用多行子查詢時,可以使用多行比較運算符(IN,ALL,ANY)。
IN:等于任何一個。
ALL:和子查詢返回的所有值比較。例如:salALL(1,2,3)等價于sal3,即大于所有。
ANY:和子查詢返回的任意一個值比較。例如:salANY(1,2,3)等價于sal1,即大于任意一個就可以。
注:ANY運算符必須與單行比較運算符結(jié)合使用,并且返回行只要匹配子查詢的任何一個結(jié)果即可。
多列子查詢
多列子查詢和多行子查詢相同,只是使用多列子查詢的時候會有多列進(jìn)行匹配。
(4)集合運算
為了合并多個select語句的結(jié)果,可以使用集合操作符號union,union all,intersect,minus。
union:該操作符用于取得兩個結(jié)果集的并集。當(dāng)使用該操作符時,會自動去掉結(jié)果集中重復(fù)行
union all:該操作與union相似,但是它不會取消重復(fù)行,而且不會排序
intersect:使用該操作符用于取得兩個結(jié)果集的交集
minus:使用該操作符用于取得兩個結(jié)果集的差集,它只會顯示存在第一個集合中,而不存在第二個集合中的數(shù)據(jù)
總結(jié)為集合運算就是將兩個或者多個結(jié)果集組合成一個結(jié)果集。
intersect ?交集 返回兩個查詢共有的記錄
union all ?并集 返回各個查詢的所有記錄,包括重復(fù)的記錄
union ? ? ?交集 返回各個查詢的所有記錄,不包括重復(fù)的記錄
MINUS ? 補集 返回第一個查詢檢查出的記錄減去第二個查詢檢索出來的記錄之后剩余的記錄
注意:當(dāng)使用集合操作的時候,查詢所返回的列數(shù)以及列的類型必須匹配,列名可以不同。
(1)Distinct關(guān)鍵字
在Oracle中,可能出現(xiàn)若干相同的情況,那么可以用Distinct消除重復(fù)行
(2)多表查詢與單行子查詢可以實現(xiàn)相同的功能
查詢出銷售部(sales)下面的員工姓名,工作,工資
(3)顯示高于自己部門平均工資的員工信息
分析:
1.找到所有部門的平均工資
select deptno,avg(sal) from emp group by deptno;
2.找到所有人的工資信息
select ename,sal,deptno from emp;
3.把兩個結(jié)果集使用多表連接組合組合起來
select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno;
4.去掉低于平均工資的那些數(shù)據(jù)即可:
select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno and salavgsal;
(4)emp表介紹
字段? ? ? ? ? ? ? 類型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 描述
empno ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示雇員編號,是唯一編號
ename ? ? ? ? ?VAECHAR2(10) ? ? ? ? ? 表示雇員姓名
job ? ? ? ? ? ? ? ?VARCHAR2(9) ? ? ? ? ? ? 表示工作職位
mgr ? ? ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示一個雇員的領(lǐng)導(dǎo)編號
hiredate ? ? ? DATE ? ? ? ? ? ? ? ? ? ? ? ? ? ?表示雇傭日期
sal ? ? ? ? ? ? ? NUMBER(7,2) ? ? ? ? ? ? ? 表示月薪,工資
comm ? ? ? ? ?NUMBER(7,2) ? ? ? ? ? ? ? 表示獎金,或者稱為傭金
deptno ? ? ? ? NUMBER(2) ? ? ? ? ? ? ? ? 部門編號
當(dāng)前題目:oracle如何寫查詢 oracle在哪里寫sql
網(wǎng)址分享:http://chinadenli.net/article26/hppdcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、定制網(wǎng)站、域名注冊、網(wǎng)站維護(hù)、移動網(wǎng)站建設(shè)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)