欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL語句學習

 更新時間:2014年06月25日 14:33:23   投稿:mdxy-dxy  
丁丁現(xiàn)在在做數(shù)據(jù)庫,可是上學時沒有好好的學習SQL的語句,現(xiàn)在每天晚上還要問我,可是我又有好多自己的事情要做,不能天天給她講(^_^其實我的水品也很一般了),所以先把我以前學習sql語句所記錄的一些東東留在這里

(高手就不要笑話了^_^)。

好了,其他的不說現(xiàn)在就開始:

select 子句主要決定了從表中取出的列名,列數(shù)以及列的顯示順序等信息,"*"表示查詢所有的列,有關select的用法應該結合其它子句的用法。

1.from 子句:

①from子句用于指定被查詢的表,試圖或快照。
②如果指定多個實體,用逗號講它們分割。為了查詢方便,特別是進行自連接查詢時,可以給表起別名。(這里我要說很多剛開始使用sql的朋友開始的時候總覺得這個很簡單,沒有什么可學的,可是到后來在做一些復雜的sql的時候總是想不起來這一點導致其實不難的sql語句無從下手)。
③如果被查詢的實體不在當前的模式中,則必須用模式名來限定該對象。
select *from admin.emp
④若查詢遠程數(shù)據(jù)庫中的實體,必須使用數(shù)據(jù)庫鏈路,如果查詢分區(qū)表中某個分區(qū)的數(shù)據(jù),則必須使用關鍵字Partition來指定分區(qū)名。
select *from emp@cbf107
select *from emp partition(A_hiredate)

2.where 子句

where 子句用于限定處理的行數(shù),選擇滿足條件的行,where 子句中的任何邏輯條件都使用比較運算符,滿足where子句中邏輯條件的數(shù)據(jù)被返回或者被處理,在where子句中可以使用列名或表達式。

select ename from emp where deptno=10

①如果列類型為字符型,where ename='smith';(單引號內字符串大小寫有區(qū)別)
②列類型為數(shù)字型deptno=20;
③如果列值取其他列值,可用如下形式表示
where emp.depno=dept.deptno
④in 與 not in 擇列的值與值列表中某一個值相符的相關行信息(如果進行"或操作")

查詢表EMP中有那些雇員和分析員
select name,job from emp where job in ('clerk','analyst');
查詢表EMP中有那些人不是雇員和分析員
select name,job from emp where job not in ('clerk','analyst');

有那些雇員的工資在/不在2000~3000之間
select ename,job,sal from emp where sal between 2000 and 3000;
select ename,job,sal from emp where sal not between 2000 and 3000

select ename,oeptno from emp where ename like 's%';
"%" 匹配0個或n個長度的字符串,而"_"僅匹配一個字符。假如查詢條件中本身含有"_"或"%",為了與模式匹配符"_"和"%"區(qū)分,必須在like運算符中加ESCAPE"%子句.
查詢雇員名以A_開始的行
select *from emp where ename like 'a\_%' ESCAPE '\';

is null 和 is not null
空值(null)不等同于0,0是一個數(shù)字,而空值表示未知的,不存在的或不可用的數(shù)據(jù).它不能像0那樣進行算術運算,null用于查詢列值為空值或非空的信息。
在Oracle的RDBMS中,null(空值)不占空間,判斷某一列值是否為空,不能用"="或"!="運算符號,而要用is null或is not null。

選擇沒有獎金的雇員信息
select ename,job from emp where comm is null

3.order by

在關系型模式中,行是沒有順序可言的。order by 子句確定的行信息顯示時的先后順序,當按多列進行排序時,首先由第一個列名確定順序,其次由第二個列名確定順序。

先按工資的降序排列,在工資相同的情況下,按姓名的字母順序排列

select
ename employee,
sal salary
from
emp
where
deptno=30
order by
sal desc employee;

假如在select子句中使用distinct關鍵字,在order by 子句中只能使用select 子句中列出來的列名,不能使用列的別名。

在查詢語句中不僅可以使用列名或列的別名進行排序,也可以使用在select 子句中列的位置進行排序。(select 子句中有一個很長的表達式,并且要用此表達式的結果進行排序時用列的位置是很有用的)。對于涉及集合操作:union,minus的查詢,不能使用列名,在這種情況下,必須提供列的位置。

select
'name:'||ename "employee",
sal "salary",
from
emp
where
deptno=30
order by
2,1;

4.group by

在select 語句中可以使用group by 子句將行劃分成較小的組,然后,使用聚組函數(shù)返回每一個組的匯總信息,另外,可以使用having子句限制返回的結果集。group by 子句可以將查詢結果分組,并返回行的匯總信息Oracle 按照group by 子句中指定的表達式的值分組查詢結果。

在帶有group by 子句的查詢語句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚組函數(shù)

select max(sal),job emp group by job;
(注意max(sal),job的job并非一定要出現(xiàn),但有意義)

查詢語句的select 和group by ,having 子句是聚組函數(shù)唯一出現(xiàn)的地方,在where 子句中不能使用聚組函數(shù)。

select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;

當在gropu by 子句中使用having 子句時,查詢結果中只返回滿足having條件的組。在一個sql語句中可以有where子句和having子句。having 與where 子句類似,均用于設置限定條件

where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數(shù)據(jù),條件中不能包含聚組函數(shù),使用where條件顯示特定的行。
having 子句的作用是篩選滿足條件的組,即在分組之后過濾數(shù)據(jù),條件中經常包含聚組函數(shù),使用having 條件顯示特定的組,也可以使用多個分組標準進行分組。

查詢每個部門的每種職位的雇員數(shù)
select deptno,job,count(*) from emp group by deptno,job;

5.多表連接

笛卡爾連接就是指從多張表中取數(shù)據(jù)時,在where子句中沒有指定多張表的公共關系(即一張表中取出每條記錄與另一張表中的每條記錄作連接)。假如第一張表中有M條記錄,而第二張表中用N條記錄,結果是M*N條記錄。要盡量避免產生笛卡爾連接。所以一般有N張表連接,至少有N-1個連接條件。

select
D.dname,D.Loc,E.ename,e.sal
from
delpt D,emp E
where
D.deptno=E.deptno;

一但定義了表的別名,在本條select語句中就不能用表名去限制列名,應該用表的別名去限制別名。

哪些雇員的工資屬于第三級別?

select
empno,ename,sal
from
emp,salgrade
where
grade=3
and
sal between losal and hisal;

找出emp表中的每一雇員屬于哪一等級。

select
empno,ename,sal,grade
from
emp,sal,grade
where
emp.sal between lowsal and hisal.

5.外連接與內連接

有時候,即使在連接的表中沒有相應的行,用戶可能想從一張表中看數(shù)據(jù),Oracle提供了外連接實現(xiàn)該功能。
內連接是指連接查詢只顯示完全滿足連接條件的記錄,即等值連接,外連接的查詢結果是內連接查詢結果的擴展。外連接不僅返回滿足連接條件的所有記錄而且也返回了一個表中那些在另一個表中沒有匹配行的記錄。外連接的操作符是“+”?!?”號放在連接條件中信息不完全的那一邊(即沒有相應行的那一邊)。運算符“+”影響NULL行的建立。建一行或多行NULL來匹配連接的表中信息完全的行。

外連接運算符“+”只能出現(xiàn)在where子句中表達式的一邊。

假如在多張表之間有多個連接條件,外連接運算符不能使用or,in邏輯運算符與其它條件組合。


假如emp表中deptno=10的ename為空值,dept表中deptno=20的loc為空值:

1.

select
ename,dept.deptno,loc
from
emp,dept
where
emp.depno(+)=dept.deptno;

如果在dept.deptno中有的數(shù)值在emp.deptno中沒有值,則在做外連接時,
結果中ename會產生一個空值。(emp.deptno=10)

2.

select
ename,dept.deptno,loc
from
emp,dept
where
emp.depno=dept.deptno(+);

如果在emp.deptno中有的數(shù)值在dept.deptno中沒有值,則在做外連接時,
結果中l(wèi)oc會產生一個空值。。(dept.deptno=20)


5.自連接

自連接是指同一張表的不同行間的連接。該連接不受其他表的影響。用自連接可以比較同一張表中不同行的某一列的值。因為自連接查詢僅涉及到某一張表與其自身的連接。所以在from子句中該表名出現(xiàn)兩次,分別用兩個不同的別名表示,兩個別名當作兩張不同的表進行處理,與其它的表連接一樣,別名之間也使用一個或多個相關的列連接。為了區(qū)分同一張表的不同行的列,在名前永別名加以限制。

select
worker.ename,
manager.ename manager
from
emp worker,
emp manager
where
work.mgr=manager.empno;

7.集合運算

基合運算符可以用于從多張表中選擇數(shù)據(jù)。

①UNION運算
用于求兩個結果集合的并集(兩個結果集合的所有記錄),并自動去掉重復行。

select ename,sal from account where sal>2000
union
select ename,sal from research where sal>2000
union
select ename,sal from sales where sal>2000;

注:ename,sal 是必須一致的。

②UNION ALL運算
用于求兩個結果集合的并集(兩個結果集中的所有記錄)源碼天空,并且不去掉重復行。

select ename,sal from account where sal>2000
union
select ename,sal from research where sal>2000
union
select ename,sal from sales where sal>2000;

③INTERSECT運算
intersect運算返回查詢結果中相同的部分。

各部門中有哪些相同的職位?

select Job from account
intersect
select Job from research
intersect
select Job from sales;


④MINUS運算
minus返回兩個結果集的差集。(在第一個結果集中存在的,而在第二個結果集中不存在的行。)

有那些職位是財務部中有,而在銷售部門中沒有?

select Job from account
minus
select Job from sales;

相關文章

  • MySQL與Oracle 差異比較之六觸發(fā)器

    MySQL與Oracle 差異比較之六觸發(fā)器

    這篇文章主要介紹了MySQL與Oracle 差異比較之六觸發(fā)器,需要的朋友可以參考下
    2017-04-04
  • 詳細聊聊關于sql注入的一些零散知識點

    詳細聊聊關于sql注入的一些零散知識點

    SQL注入攻擊是通過將惡意的SQL查詢或添加語句插入到應用的輸入?yún)?shù)中,再在后臺SQL服務器上解析執(zhí)行進行的攻擊,它目前是黑客對數(shù)據(jù)庫進行攻擊的最常用的手段之一,這篇文章主要給大家介紹了關于sql注入的一些零散知識點,需要的朋友可以參考下
    2021-10-10
  • 經常使用的JDBC連接數(shù)據(jù)庫方式

    經常使用的JDBC連接數(shù)據(jù)庫方式

    在我們開發(fā)中,幾乎脫離不了連接數(shù)據(jù)庫。并且無論是使用框架還是硬編碼連接數(shù)據(jù)庫,都避免不了寫驅動類以及連接url。為了方便我們的開發(fā),我們收藏常用的jdbc連接數(shù)據(jù)庫方式。
    2013-04-04
  • 數(shù)據(jù)庫命名規(guī)范小結

    數(shù)據(jù)庫命名規(guī)范小結

    數(shù)據(jù)庫命名規(guī)范,在實際的數(shù)據(jù)庫開發(fā)中,需要注意。
    2009-03-03
  • IntellJ Idea 2020版添加sqlite數(shù)據(jù)庫的方法

    IntellJ Idea 2020版添加sqlite數(shù)據(jù)庫的方法

    這篇文章主要介紹了IntellJ Idea 2020版添加sqlite數(shù)據(jù)庫的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • mysql與MongoDB性能對比,哪個更適合自己

    mysql與MongoDB性能對比,哪個更適合自己

    經常看到有人討論,mongodb性能不如MySQL,MySQL能不能代替之類的說法?,其實作為技術人,很不喜歡哪個比哪個好這種說法,基本就是挑事,我們今天一起
    2023-06-06
  • SQL嵌套查詢總結

    SQL嵌套查詢總結

    這是我寫的一個結合UINON的嵌套查詢. 將五個方面的報表放到一個臨時表里,再從臨時表里,將所要的數(shù)據(jù)查詢出來.
    2008-10-10
  • Navicat Premium15安裝及破解教程詳解親測有效(附破解失敗解決方案)

    Navicat Premium15安裝及破解教程詳解親測有效(附破解失敗解決方案)

    這篇文章主要介紹了Navicat Premium15安裝及破解教程詳解親測有效,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 一款高顏值且免費的 SQL 開發(fā)工具之Beekeeper Studio詳解

    一款高顏值且免費的 SQL 開發(fā)工具之Beekeeper Studio詳解

    今天給大家推薦一款適用于Windows,Linux和Mac的跨平臺免費的開源SQL編輯器和數(shù)據(jù)庫管理應用程序 —— beekeeper-studio。對Beekeeper Studio 安裝使用教程感興趣的朋友一起看看吧
    2021-09-09
  • Access轉SqlServer的注意事項

    Access轉SqlServer的注意事項

    Access轉SqlServer的注意事項,需要的朋友可以參考下。
    2007-02-02

最新評論