sql數據庫html
5. select 查看結果集中的哪一個列,或列的計算結果 1. from 須要從哪一個數據表檢索數據 2. where 過濾表中數據的條件 3. group by 如何將上面過濾的數據分組 4. having 對已分組的數據進行過濾的條件 6. order by 按照不一樣排序方式返回數據
did | dname | dmgr |
---|---|---|
1 | 銷售部 | 1001 |
2 | 研發部 | 1005 |
3 | 服務部 | 1008 |
id | name | gender | age | salary | dno | mgrid |
---|---|---|---|---|---|---|
1001 | 趙偉 | 男 | 38 | 6000 | 1 | |
1002 | 李萍蘭 | 女 | 26 | 3000 | 1 | 1001 |
1003 | 秦曉 | 女 | 30 | 4000 | 1 | 1001 |
1004 | 趙曉輝 | 男 | 32 | 4200 | 1001 | |
1005 | 張嵐 | 男 | 40 | 8000 | 2 | |
1006 | 李秋平 | 女 | 24 | 4000 | 2 | 1002 |
1007 | 顧世剛 | 男 | 30 | 6000 | 2 | 1002 |
1008 | 段大宇 | 男 | 36 | 5000 | 3 |
select column_list from table_name1,table_name2 #表之間經過逗號隔開 where codition #表之間的鏈接條件
select column_list from table_name1 [inner] join table_name2 #表之間的鏈接經過 join實現 on condition; #表之間的鏈接條件 [...n]
外鏈接: 指錶鏈接時除了返回符合鏈接條件的數據外,同時返回不符合鏈接條件的數據git
全外鏈接:github
語法:web
select column_list from table_name1 [left|right|full] [outer] join table_name2 #表之間的鏈接條件經過 xx join 實現 on condition #表之間的鏈接條件 [...n]
指對同一個表的鏈接,要執行一個內鏈接,必須使用不一樣的別名來區分sql
select e1.name 員工姓名,e2.name 上級主管 from emp e1,emp e2 where e1.mgrid=e2.id
在多表查詢時,若是沒有鏈接條件,則一個表的全部行將會和另外一個表的全部行都會進行鏈接,鏈接的結果稱爲笛卡爾積數據庫
select column_list from table_name1,table_name2[...n]
select column_list from table_name1 cross join table_name2[...n]
在前面使用的查詢語句都是隻包含一條select語句,而有些狀況下依靠單條select語句沒法完成查詢要求canvas
這時候須要在select語句中內部嵌入另外的select語句,這條嵌入的select語句稱爲子查詢ruby
子查詢除了能夠應用到select語句中,也能夠應用到insert、update、delete語句中markdown
單行子查詢不向外部的SQL語句返回結果,或者只返回一行app
單行子查詢可應用於select語句的where字句、having字句中
- 查詢年齡最小的員工信息 select * from emp where age=(select min(age) from emp) 結果:查詢到一條 - 查詢大於最小年齡的員工信息 select * from emp where age>(select min(age) from emp) 結果:查詢到多條信息
- 查詢部門員工平均年齡小於全部員工平均年齡的部門和該部門員工平均年齡 select dno 部門編號,avg(age) 平均年齡 from emp group by dno having avg(age)<(select avg(age) from emp)
多行子查詢一般返回一條或多條記錄,多行子查詢結果用於where語句時
判斷可使用in、any、all操做符
-查詢負責管理其餘員工的員工信息 --in select * from emp where id in (select mgrid from emp where mgrid is not null) - 查詢年齡大於全部部門最大年齡的員工信息 --all select * from emp where age > all(select max(age) from emp group by dno) - 查詢年齡大於任意部門最大年齡的員工信息 --any select * from emp where age > any(select max(age) from emp group by dno)
子查詢中引用父查詢信息,稱爲關聯子查詢
關聯子查詢對於外部查詢中的每一行都會運行一次
-查詢每一個部門年齡最小員工 select * from emp o where age=(select min(age) from emp i where i.dno=o.dno) -查詢負責管理其餘員工的員工信息 select * from emp e1 where exists (select 1 from emp e2 where e2.mgrid=e1.id) -查詢不負責管理其餘員工的員工信息 select * from emp e1 where not exists (select 1 from emp e2 where e2.mgrid=e1.id)
操做符 | 說明 |
---|---|
union all | 並運算。返回各個查詢檢索出的全部行,包括重複行 |
union | 並運算。返回各個查詢檢索出的全部行,不包括重複行 |
intersect | 交運算。返回兩個查詢檢索的共有行 |
except | 差運算。從左查詢中返回右查詢沒有找到的全部的全部非重複值 |
union all 操做只合並結果集,不去除重複數據
- 查詢全部產品 select * from prod1 union all select * from prod2 結果可能含有重複行
union操做合併結果集後去除重複數據
-查詢全部產品 select * from prod1 union select * from prod2 結果:無重複行
intersect操做返回結果集間的交集,也就是共有部分
-查詢兩個產品表的共有產品 select * from prod1 intersect select * from prod3 結果:返回兩表共有行