當前位置:首頁 » 編程語言 » sql子檢索

sql子檢索

發布時間: 2023-06-16 17:45:25

『壹』 sql查詢語句中,什麼叫子查詢

嵌套SELECT語句也叫子查詢,一個
SELECT
語句的查詢結果能夠作為另一個語句的輸入值。子查詢不但能夠出現在Where子句中,也能夠出現在from子句中,作為一個臨時表使用,也能夠出現在select
list中,作為一個欄位值來返回。
1、單行子查詢
:單行子查詢是指子查詢的返回結果只有一行數據。當主查詢語句的條件語句中引用子查詢結果時可用單行比較符號(=,
>,
<,
>=,
<=,
<>)來進行比較。
例:
select
ename,deptno,sal
from
emp
where
deptno=(select
deptno
from
dept
where
loc='NEW
YORK');
2、多行子查詢:多行子查詢即是子查詢的返回結果是多行數據。當主查詢語句的條件語句中引用子查詢結果時必須用多行比較符號(IN,ALL,ANY)來進行比較。其中,IN的含義是匹配子查詢結果中的任一個值即可("IN"
操作符,能夠測試某個值是否在一個列表中),ALL則必須要符合子查詢的所有值才可,ANY要符合子查詢結果的任何一個值即可。而且須注意ALL
和ANY
操作符不能單獨使用,而只能與單行比較符(=、>、<
、>=
、<=
、<>)結合使用。
例:
1).多行子查詢使用IN操作符號例子:查詢選修了老師名叫Rona(假設唯一)的學生名字
sql>
select
stName

『貳』 sql子查詢和連接查詢的區別是什麼呢

1、子查詢就如遞歸函數一樣,有時侯使用起來能達到事半功倍之效,只是其執行效率同樣較低,有時用自身連接可代替某些子查詢,另外,某些相關子查詢也可改寫成非相關子查詢。


2、表連接都可以用子查詢,但不是所有子查詢都能用表連接替換,子查詢比較靈活,方便,形式多樣緩困,適合用於作為查詢的篩選條件,而表連接更適合與查看多表的數據。

3、子查詢是一種常用計算機語言SELECT-SQL語言中嵌套查詢下層的程序模塊。當一個查詢是另一個查詢的條件時,稱之為子查詢。

4、子查詢是本質上就是一個完整 的SELECT 語句,它可以使一個 SELECT、SELECT...INTO 語句、INSERT...INTO 語句、DELETE 語句、或 UPDATE 語句或嵌套在另一子查詢中。子查詢的輸出可以包括一個單獨的值(單行子查詢)、幾行值(多行子查詢)、或者多列數據(多列腔哪旅子查詢)。

5、連接查詢是關系資料庫中最主要的查詢,主要包括內伍凳連接、外連接和交叉連接等。通過連接運算符可以實現多個表查詢。連接是關系資料庫模型的主要特點,也是它區別於其它類型資料庫管理系統的一個標志。

『叄』 sql數據檢索問題

我是來混分的
我的意見是
創建索引, 移除歷史數據到備份表中
下面的內容來自別人總結的, 呵呵
1、1、調整數據結構的設計。這一部分在開發信息系統之前完成,程序員需要考慮是否使用ORACLE資料庫的分區功能,對於經常訪問的資料庫表是否需要建立索引等。

2、2、調整應用程序結構設計。這一部分也是在開發信息系統之前完成,程序員在這一步需要考慮應用程序使用什麼樣的體系結構,是使用傳統的Client/Server兩層體系結構,還是使用Browser/Web/Database的三層體系結構。不同的應用程序體系結構要求的資料庫資源是不同的。

3、3、調整資料庫SQL語句。應用程序的執行最終將歸結為資料庫中的SQL語句執行,因此SQL語句的執行效率最終決定了ORACLE資料庫的性能。ORACLE公司推薦使用ORACLE語句優化器(Oracle Optimizer)和行鎖管理器(row-level manager)來調整優化SQL語句。

4、4、調整伺服器內存分配。內存分配是在信息系統運行過程中優化配置的,資料庫管理員可以根據資料庫運行狀況調整資料庫系統全局區(SGA區)的數據緩沖區、日誌緩沖區和共享池的大小;還可以調整程序全局區(PGA區)的大小。需要注意的是,SGA區不是越大越好,SGA區過大會佔用操作系統使用的內存而引起虛擬內存的頁面交換,這樣反而會降低系統。

5、5、調整硬碟I/O,這一步是在信息系統開發之前完成的。資料庫管理員可以將組成同一個表空間的數據文件放在不同的硬碟上,做到硬碟之間I/O負載均衡。

6、6、調整操作系統參數,例如:運行在UNIX操作系統上的ORACLE資料庫,可以調整UNIX數據緩沖池的大小,每個進程所能使用的內存大小等參數。

實際上,上述資料庫優化措施之間是相互聯系的。ORACLE資料庫性能惡化表現基本上都是用戶響應時間比較長,需要用戶長時間的等待。但性能惡化的原因卻是多種多樣的,有時是多個因素共同造成了性能惡化的結果,這就需要資料庫管理員有比較全面的計算機知識,能夠敏感地察覺到影響資料庫性能的主要原因所在。另外,良好的資料庫管理工具對於優化資料庫性能也是很重要的。

ORACLE資料庫性能優化工具

常用的資料庫性能優化工具有:

1、1、ORACLE資料庫在線數據字典,ORACLE在線數據字典能夠反映出ORACLE動態運行情況,對於調整資料庫性能是很有幫助的。

2、2、操作系統工具,例如UNIX操作系統的vmstat,iostat等命令可以查看到系統系統級內存和硬碟I/O的使用情況,這些工具對於管理員弄清出系統瓶頸出現在什麼地方有時候很有用。

3、3、SQL語言跟蹤工具(SQL TRACE FACILITY),SQL語言跟蹤工具可以記錄SQL語句的執行情況,管理員可以使用虛擬表來調整實例,使用SQL語句跟蹤文件調整應用程序性能。SQL語言跟蹤工具將結果輸出成一個操作系統的文件,管理員可以使用TKPROF工具查看這些文件。

4、4、ORACLE Enterprise Manager(OEM),這是一個圖形的用戶管理界面,用戶可以使用它方便地進行資料庫管理而不必記住復雜的ORACLE資料庫管理的命令。

5、5、EXPLAIN PLAN——SQL語言優化命令,使用這個命令可以幫助程序員寫出高效的SQL語言。

ORACLE資料庫的系統性能評估

信息系統的類型不同,需要關注的資料庫參數也是不同的。資料庫管理員需要根據自己的信息系統的類型著重考慮不同的資料庫參數。

1、1、在線事務處理信息系統(OLTP),這種類型的信息系統一般需要有大量的Insert、Update操作,典型的系統包括民航機票發售系統、銀行儲蓄系統等。OLTP系統需要保證資料庫的並發性、可靠性和最終用戶的速度,這類系統使用的ORACLE資料庫需要主要考慮下述參數:

l l 資料庫回滾段是否足夠?

l l 是否需要建立ORACLE資料庫索引、聚集、散列?

l l 系統全局區(SGA)大小是否足夠?

l l SQL語句是否高效?

2、2、數據倉庫系統(Data Warehousing),這種信息系統的主要任務是從ORACLE的海量數據中進行查詢,得到數據之間的某些規律。資料庫管理員需要為這種類型的ORACLE資料庫著重考慮下述參數:

l l 是否採用B*-索引或者bitmap索引?

l l 是否採用並行SQL查詢以提高查詢效率?

l l 是否採用PL/SQL函數編寫存儲過程?

l l 有必要的話,需要建立並行資料庫提高資料庫的查詢效率

SQL語句的調整原則

SQL語言是一種靈活的語言,相同的功能可以使用不同的語句來實現,但是語句的執行效率是很不相同的。程序員可以使用EXPLAIN PLAN語句來比較各種實現方案,並選出最優的實現方案。總得來講,程序員寫SQL語句需要滿足考慮如下規則:

1、1、盡量使用索引。試比較下面兩條SQL語句:

語句A:SELECT dname, deptno FROM dept WHERE deptno NOT IN

(SELECT deptno FROM emp);

語句B:SELECT dname, deptno FROM dept WHERE NOT EXISTS

(SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);

這兩條查詢語句實現的結果是相同的,但是執行語句A的時候,ORACLE會對整個emp表進行掃描,沒有使用建立在emp表上的deptno索引,執行語句B的時候,由於在子查詢中使用了聯合查詢,ORACLE只是對emp表進行的部分數據掃描,並利用了deptno列的索引,所以語句B的效率要比語句A的效率高一些。

2、2、選擇聯合查詢的聯合次序。考慮下面的例子:

SELECT stuff FROM taba a, tabb b, tabc c

WHERE a.acol between :alow and :ahigh

AND b.bcol between :blow and :bhigh

AND c.ccol between :clow and :chigh

AND a.key1 = b.key1

AMD a.key2 = c.key2;

這個SQL例子中,程序員首先需要選擇要查詢的主表,因為主表要進行整個表數據的掃描,所以主表應該數據量最小,所以例子中表A的acol列的范圍應該比表B和表C相應列的范圍小。

3、3、在子查詢中慎重使用IN或者NOT IN語句,使用where (NOT) exists的效果要好的多。

4、4、慎重使用視圖的聯合查詢,尤其是比較復雜的視圖之間的聯合查詢。一般對視圖的查詢最好都分解為對數據表的直接查詢效果要好一些。

5、5、可以在參數文件中設置SHARED_POOL_RESERVED_SIZE參數,這個參數在SGA共享池中保留一個連續的內存空間,連續的內存空間有益於存放大的SQL程序包。

6、6、ORACLE公司提供的DBMS_SHARED_POOL程序可以幫助程序員將某些經常使用的存儲過程「釘」在SQL區中而不被換出內存,程序員對於經常使用並且佔用內存很多的存儲過程「釘」到內存中有利於提高最終用戶的響應時間。

CPU參數的調整

CPU是伺服器的一項重要資源,伺服器良好的工作狀態是在工作高峰時CPU的使用率在90%以上。如果空閑時間CPU使用率就在90%以上,說明伺服器缺乏CPU資源,如果工作高峰時CPU使用率仍然很低,說明伺服器CPU資源還比較富餘。

使用操作相同命令可以看到CPU的使用情況,一般UNIX操作系統的伺服器,可以使用sar –u命令查看CPU的使用率,NT操作系統的伺服器,可以使用NT的性能管理器來查看CPU的使用率。

資料庫管理員可以通過查看v$sysstat數據字典中「CPU used by this session」統計項得知ORACLE資料庫使用的CPU時間,查看「OS User level CPU time」統計項得知操作系統用戶態下的CPU時間,查看「OS System call CPU time」統計項得知操作系統系統態下的CPU時間,操作系統總的CPU時間就是用戶態和系統態時間之和,如果ORACLE資料庫使用的CPU時間占操作系統總的CPU時間90%以上,說明伺服器CPU基本上被ORACLE資料庫使用著,這是合理,反之,說明伺服器CPU被其它程序佔用過多,ORACLE資料庫無法得到更多的CPU時間。

資料庫管理員還可以通過查看v$sesstat數據字典來獲得當前連接ORACLE資料庫各個會話佔用的CPU時間,從而得知什麼會話耗用伺服器CPU比較多。

出現CPU資源不足的情況是很多的:SQL語句的重解析、低效率的SQL語句、鎖沖突都會引起CPU資源不足。

1、資料庫管理員可以執行下述語句來查看SQL語句的解析情況:

SELECT * FROM V$SYSSTAT

WHERE NAME IN

('parse time cpu', 'parse time elapsed', 'parse count (hard)');

這里parse time cpu是系統服務時間,parse time elapsed是響應時間,用戶等待時間

waite time = parse time elapsed – parse time cpu

由此可以得到用戶SQL語句平均解析等待時間=waite time / parse count。這個平均等待時間應該接近於0,如果平均解析等待時間過長,資料庫管理員可以通過下述語句

SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA

ORDER BY PARSE_CALLS;

來發現是什麼SQL語句解析效率比較低。程序員可以優化這些語句,或者增加ORACLE參數SESSION_CACHED_CURSORS的值。

2、資料庫管理員還可以通過下述語句:

SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA;

查看低效率的SQL語句,優化這些語句也有助於提高CPU的利用率。

3、3、資料庫管理員可以通過v$system_event數據字典中的「latch free」統計項查看ORACLE資料庫的沖突情況,如果沒有沖突的話,latch free查詢出來沒有結果。如果沖突太大的話,資料庫管理員可以降低spin_count參數值,來消除高的CPU使用率。

內存參數的調整

內存參數的調整主要是指ORACLE資料庫的系統全局區(SGA)的調整。SGA主要由三部分構成:共享池、數據緩沖區、日誌緩沖區。

1、 1、 共享池由兩部分構成:共享SQL區和數據字典緩沖區,共享SQL區是存放用戶SQL命令的區域,數據字典緩沖區存放資料庫運行的動態信息。資料庫管理員通過執行下述語句:

select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache;

來查看共享SQL區的使用率。這個使用率應該在90%以上,否則需要增加共享池的大小。資料庫管理員還可以執行下述語句:

select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from v$rowcache;

查看數據字典緩沖區的使用率,這個使用率也應該在90%以上,否則需要增加共享池的大小。

2、 2、 數據緩沖區。資料庫管理員可以通過下述語句:

SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent gets','physical reads');

來查看資料庫數據緩沖區的使用情況。查詢出來的結果可以計算出來數據緩沖區的使用命中率=1 - ( physical reads / (db block gets + consistent gets) )。

這個命中率應該在90%以上,否則需要增加數據緩沖區的大小。

3、 3、 日誌緩沖區。資料庫管理員可以通過執行下述語句:

select name,value from v$sysstat where name in ('redo entries','redo log space requests');查看日誌緩沖區的使用情況。查詢出的結果可以計算出日誌緩沖區的申請失敗率:

申請失敗率=requests/entries,申請失敗率應該接近於0,否則說明日誌緩沖區開設太小,需要增加ORACLE資料庫的日誌緩沖區。

『肆』 sql語言中,實現數據檢索的語句是

一、檢索單個列

命令:

SELECT 列名 FROM 表名;

注意:語句將返回表中所有行,數據沒有過濾(過濾將得出結果集的一個子集),也沒有排序。

二、檢索多個列

命令:

SELECT 列名1,列名2,…… FROM 表名;

注意:在選擇多個列時,一定要在列名之間加上逗號,但是最後一個列名後不加。

三、檢索所有列

命令(也可以按照檢索多個列的方法把所有列名列出,等價於用 * 符號)

SELECT * FROM 表名;

(4)sql子檢索擴展閱讀:

注意事項

基本查詢語句

select 列名1,列名2 from 表名;

查看錶的所有信息:select * from 表名;

書寫標准:

1、不區分大小寫

2、可以換行

3、關鍵詞不可以跨行或者分割書寫

4、通常一個句子一行(排版可以增加可讀性)

5、「;」代表結尾,結尾必須使用

『伍』 SQL多表鏈接查詢、嵌入SELECT語句的子查詢技術

高級查詢技術主要是涉及多個表的鏈接查詢技術 嵌入SELECT語句的子查詢技術 把多個查詢聯合起來的聯合技術等

連接查詢

需要同時從兩個或者連個以上的表中檢索數據 鏈接就是允許同時從兩個表或者兩個以上的表中檢索數據 指定這些表中的某個或者某些列作為連接條件 在SQL Server中 可以使用兩種連接語法的形式 一種是ANSI鏈接語法形式 這是連接條件出現在FROM子句中;另外一種SQL Server鏈接語法形式 這是連接條件出現在WHERE條件中

ANSI鏈接

鏈接錯做可以同時查詢兩個或者多個表中的數據 所生成的結果集包含多個表中的欄位 需要使用連個表 *** 同擁有的欄位以連接多個表

進行連接操作時 SQL一行一行地比較所指定的欄位 然後把比較後的結果和滿足條件的數據合並 並生成新的記錄

有三種連接方吵差式 內連接 外連接和交叉連接 在一個SELECT語句中 可以連接多個表;鏈接通過擴展SELECT語句的FROM字句 增加了兩個關鍵字 JOIN和ON

JOIN 指定要了鏈接的表

ON 指定這些表共同擁有的欄位

在表的主鍵和外部鍵的基礎上 指定連接條件

ANSI鏈接語法形式如下所示

SELECT table_name column_name table_name column_name ……

FROM { table_name[ join_type] JOIN table_name ON search_conditions}

WHERE[ search_conditions]

其中[ join_type ]可以為如下三個關鍵字形式

INNER(內連接) 鏈接查詢結果集中僅包含滿足條件的行 內連接是SQL Server預設的連接方式 可以把INNER JOIN簡寫成 JOIN;

OUTER(外連接) 鏈接查詢結果集中既包含哪些滿足條件的行 還包含其中某個表的全部行 有三種形式的外連接 左外連接 右外連接 全外連接

例如 已經選修了 號課程的同學信息的示例 該示例涉及到此枯了學生表和選修課

SELECT 學生表

FROM 學生表 JOIN 選課表 ON 學生表 學號 選課表 學號

WHERE 選課表 課程號=

SQL Server鏈接

多表連接 可以在FROM子句後直接指定多個表 語義上表示從這幾個表的笛卡爾積中檢索數據 可以用WHERE子句設定過濾條件

SQL Server鏈接語法形式如下

SELECT table_name column_name table_name column_name ……

FROM { table_name table_name ……}

WHERE table_name column_name join_operator table_name column_name

在此種語法形式中 FROM子句列出了連接時所使用到的全部表名 WHERE子句指定哪些行應該出現在結果集中 即用WHERE子句設定過濾條件 在WHERE子句中 在兩個連接的列中使用鏈接運算符

例如 檢索出至少已經有一門課程及格的同學的信息示例

SELECT DISTINCT 學生表 *

FROM 學生表 選課表

WHERE 學生表 學號=選課表 學號 AND 選課表 成績=

子查詢

子查詢是一系列SELECT語句 SELECT語句可以嵌套在其他許多語句中 例如SELECT INSERT UPDATE DELETE等 這些嵌套的SELECT語句就稱為子查詢 子查詢可以把一個復雜的查詢分解成一系列的邏輯步驟 這樣就可以用一個單個的語句解決一個復雜的查詢問題 當一個查詢依賴於另一個查詢的結果時 子查詢會很有用

升扒皮使用子查詢時 應注意

子查詢要用括弧起來

只需要一個值或一系列的值 就可以用子查詢代替一個表達式

子查詢中不能查詢包含數據類型是text或image的欄位

子查詢中也可以再包含子查詢 嵌套可以多至 層

把子查詢用作派生的表

可以用子查詢產生一個派生的表 用於代替FROM子句中的表 派生表示FROM子句中子查詢的一個特殊用法 用一個別名或用戶自定義的名字來引用這個派生表 FROM子句中的子查詢將返回一個結果集 這個結果集所形成的表將被外層SELECT語句使用

例如 內層查詢用子查詢產生了一個派生的表 外層查詢將使用內層查詢的結果集 在功能上 派生表本身就等同於一個完整的查詢

SLECT A *

FROM select 學號 姓名 年齡 from 學生表

Where 班級=『GZ 計 』 as a

把子查詢用作表達式

在T SQL中 所有使用表達式的地方 都可以用子查詢來代替 此時子查詢必須返回單個的值或某一個欄位的值 子查詢可以返回一系列的值來代替出現在WHERE子句中的IN關鍵字的表達式

例如 查詢GZ 計 班同學的平均年齡以及每個同學年齡與平均年齡的差

SELECT avg(年齡) FROM 學生表 as 平均年齡

其計算結果作為選擇列表中的一個輸出列 並作為算術表達式的一部分輸出

年齡 (SELECT avg(年齡) FROM 學生表) as 年齡差

相關子查詢

相關子查詢可被用作動態表達式 這個表達式的值相對於外層查詢的每一行而變化 查詢處理器為外層查詢的每一個記錄計運算元查詢的值 一次一行 而這個子查詢每次都會被作為一個表達式而被計算並返回給外層查詢 相關子查詢是動態執行的子查詢和外層查詢間的一個非常有效的聯合

使用相關子查詢時 內層子查詢被反復執行 外層查詢有多少記錄 內層查詢就被齒形多少次

例如 查詢已選修課程號的 且成績在 分以上的同學的學號及姓名

SELECT 學號 姓名

FROM 學生表

WHERE <=( SELECT 成績

FROM 選課表

WHERE 學生表 學號=選課表 學號 AND 課程號= )

使用EXISTS和NOT EXISTS操作符

在相關子查詢中可以使用EXISTS和NOT EXISTS操作符判斷某個值是否在一系列的值中 SQL Server處理帶有EXISTS和NOT EXISTS操作符的子查詢時

外層查詢測試子查詢返回的記錄是否存在

基於查詢所指定的條件 子查詢返回TRUE或FALSE

子查詢不產生任何數據

例如 同時選修了 號課程和 號課程的同學的信息

SELECT 學號 姓名 班級

FROM 學生表

WHERE EXISTS(SELECT * FROM 選課表

WHERE 學號=學生表 學號 AND 課程號= )

AND EXISTS(SELECT * FROM 選課表

WHERE 學號=學生表 學號 AND 課程號= )

① 找外層表「學生表」的第 行 根據其「學號」值處理內層查詢

② 用外層的「學號」與內層表「選課表」的「學號」比較 由此決定外層條件的真 假 如果為真 則此記錄為符合條件的結果 反之 則不輸出

③ 順序處理外層表「學生表」中的第 行

檢索出每一門選修課都幾個的同學信息

SELECT * FROM 學生表 WHERE

NOT EXISTS( SELECT * FROM 選課表

WHERE 學生表 學號=選課表 學號 AND 成績< )

AND EXISTS( SELECT * FROM 選課表

WHERE 學生表 學號=選課表 學號)

使用TOP限制結果集

在使用SELECT語句進行查詢時 有時我們希望列出前幾個結果 而不是全部結果 例如 競賽時 可能只取成績最高的前三名 這時就需要使用TOP關鍵字來選取輸出的結果

使用TOP的格式為

SELECT TOP n[ percent] [with ties] 查詢列表

其中

n 為非負整數

TOP n 表示取查詢結果的前n行

TOP n percent 表示取查詢結果的前n%行

With ties 表示包括並列的結果

例如 檢索出總分在前 位的同學的學號及其總分

SELECT TOP WITH TIES 學號 SUM(成績) AS 總分

FROM 選課表

GROUP BY 學號

ORDER BY 總分 DESC

使用TOP時 注意最好與ORDER BY子句一起使用 因為這樣的前幾名才有意義 但當使用WITH TIES時 要求必須使用ORDER BY子句

合並多個結果集

可以將兩個或多個查詢的結果組合為一個結果集 這就是合並多個屆國際的含義 使用UNION可以實現合並多個查詢結果集的目的 作用UNION的格式為

SELECT 語句

UNION

SELECT 語句

UNION [ALL]

……

SELECT 語句n

使用UNION 應注意幾點

在默認情況下 UNION運算符刪除全部空餘 如果使用ALL選項 那麼空餘行不刪除

所有查詢語句中的列數和列的順序必須相同

所有查詢語句中的對應列的數據類型必須兼容

如果在UNION語句中 包含一個ORDER BY子句 那麼整個結果集都要排序

在結果集中 列名來自第 個SELECT子句

例如 對GZ 計 班和GZ 計 班學生的查詢結果合並為一個結果集

SELECT * FROM 學生表 WHERE 班級=『GZ 計 』

UNION

lishixin/Article/program/MySQL/201311/29530

熱點內容
改裝車載中控什麼配置 發布:2025-02-12 15:10:00 瀏覽:860
資料庫體系結構 發布:2025-02-12 15:09:48 瀏覽:691
小米賬號為什麼設置不了密碼 發布:2025-02-12 15:03:57 瀏覽:263
android訪問網路許可權 發布:2025-02-12 14:55:20 瀏覽:88
原神文件夾 發布:2025-02-12 14:50:15 瀏覽:800
c語言數字翻譯 發布:2025-02-12 14:45:54 瀏覽:497
暗區突圍為什麼顯示伺服器維修 發布:2025-02-12 14:45:53 瀏覽:247
翻譯分為匯編和編譯 發布:2025-02-12 14:29:12 瀏覽:233
什麼是新聞編譯 發布:2025-02-12 14:23:12 瀏覽:853
如何查看手機存儲 發布:2025-02-12 14:21:15 瀏覽:50