【oracle】sql查詢2

sql操作符

1. LIKE:檢查列值是否匹配指定的模式;模式字符串中可以使用普通字符以及兩個通配符: _和%。_ 代表任意單個字符;% 代表任意長度(長度可以爲0)的字符串。

因爲_和%在模式字符串中具有特殊含義,因此如果要匹配這兩個字符,可使用escape選項來標識這些字符。
 

-- 檢索promotions表中, name列的值包含%字符的行
select * from promotions t where name like '%\%%' escape '\ '

注: NOT LIKE表示不匹配指定的模式。當列值爲空時,永遠返回false。

2. 確定取值的集合:IN (…,…,…) 圓括號中是用逗號分隔的一組取值。等同於 = any()
NOT IN (…,…,…) 和IN操作結果相反。等同於 != all()
注意:如果值列表中含有null,則not in的運算結果永遠爲false,那麼一條記錄也不會被檢索出來。

select product_id,name,product_type_id
from products
where  product_type_id not in(1,2,null);

3. BETWEEN … AND …
NOT BETWEEN … AND …
用於確定取值範圍(閉區間)。

4. IS NULL 涉及空值的查詢
“IS NULL” 不能用 “= NULL” 代替
IS NOT NULL

多重條件查詢
運算符優先級
比較運算符 > NOT > AND > OR
對查詢結果排序
使用ORDER BY子句:

--對查詢結果排序
--控制空值位置
select * 
from employees
order by salary desc nulls last,employee_id asc;

注:當排序列含空值時,ASC:排序列爲空值的元組最後顯示;DESC:排序列爲空值的元組最先顯示。可以使用nulls last或nulls first改變空值顯示順序。
多表連接查詢
1. 用來連接兩個表的條件稱爲連接條件,連接條件中的連接字段類型必須是可比的,但不必是相同的;連接條件可分爲兩類:等連接和不等連接。
 

--查詢編號爲3的產品的名稱和它的類型名稱
select prd.name, tps.name from products prd, product_types tps
where product_id = 3 and prd.product_type_id != tps.product_type_id;

2. 笛卡爾積
如果在多表查詢中不指定連接條件,就會導致將一個表中的所有行都連接到另一個表中的所有行,這種情況稱爲笛卡爾積。返回的結果記錄總數是兩個表中記錄數的乘積。
3. 左外連接:將左表中多餘的項目也添加到結果記錄集中。

--左外連接
--查詢產品名和類型名,某些產品暫時還沒有類型,也要求輸出產品名。
select prd.name,tps.name
from products prd,product_types tps
where prd.product_type_id=tps.product_type_id(+);


右外連接:將右表中多餘的項目也添加到結果記錄集中。

--右外連接
--查詢產品名和類型名,某些產品類型暫時還沒有對應的產品,也要求輸出類型名。
select prd.name,tps.name
from products prd,product_types tps
where prd.product_type_id(+)=tps.product_type_id;


自連接:同一個表連接到自身。

--自連接
--檢索員工的姓名和他的上司的姓名。
select emp1.first_name||' '||emp1.last_name emp_name,
       emp2.first_name||' '||emp2.last_name mag_name
from employees emp1,employees emp2
where emp1.manager_id=emp2.employee_id(+);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章