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(+);