數據庫基本操做

1、基本查詢
1.基本語法格式
        
語法格式
      
做用
  
   
select  字段或表達式
  
展現結果集

   
from  表、視圖或結果集等
  
指定數據源

   
where  檢索條件
  
指定檢索條件

   
group  by 字段
  
指定按某字段分組

   
having  檢索條件
  
用在group by以後,指定檢索條件

   
order  by 字段
  
指定按某字段進行排序,默認增序asc,降序desc

   
limit  初始索引, 長度
  
限制結果,索引從0開始,若爲0,則可省略僅寫長度
2.常見查詢
2.1 select 指定展現結果集
1.  #導入了3個sql文件,老師給的!
2.  #1.查詢emp表中全部的員工信息
3.  select * from emp;
4.  #2.在emp表中查詢全部員工的姓名和職位信息
5.  select ename, job from emp;
2.2 where指定檢索條件:關係運算符、邏輯運算符、in關鍵詞、是否空值、範圍查詢between and
1.  #3.在emp表中查詢全部的20號部門的員工信息
2.  select * from emp where deptno=20;
3.  #4.在emp表中查詢工做大於2000的員工的姓名和工資
4.  select ename, sal from emp where sal > 2000;
5.  #5.在emp表中查詢工做在1000到2000之間的員工信息(範圍查詢)
6.  select * from emp where sal > 1000 and sal < 2000;
7.  select * from emp where sal between 1000 and 2000;
8.  #6.在emp表中查詢員工編號爲7788,7369,7521的員工信息
9.  select * from emp where empno = 7788 or empno = 7369 or empno = 7521;
10.         select * from emp where empno in (7788,7369,7521);
11.         #9.在emp表中查詢全部沒有獎金的員工信息。(comm值爲空)
12.         select * from emp where comm is null;
13.         select * from emp where comm is not null;
2.3 去重distinct 關鍵字
1.  #7.在emp表中查詢全部的職位信息(去重)
2.  select distinct job from emp;
2.4 取別名
1.  #8.在emp中查詢工資提高5%後的員工姓名及工資(別名:字段、表達式、表、結果集等)
2.  # 別名格式:[as] 別名
3.  select ename,sal * 1.05 nsal from emp;
4.  select emp.ename,emp.sal from emp;
5.  select e.ename,e.sal from emp e;
2.5 排序 order by 和限制結果查詢 limit
1.  #10.在emp中查詢工資最高的員工信息
2.  #方法一:使用SQL提供的函數
3.  #方法二:倒序排序取第一個
4.  #排序:order by 排序的字段(默認升序,asc 升序,desc 降序)
5.  #先按照工資降序排序,若是工資同樣,則按照編號降序排序
6.  select * from emp order by sal desc, empnodesc;
7.  #限制結果查詢(格式:limit 開始索引, 長度,其中索引從0開始,若是是從0開始,則索引能夠不
8.  #寫,直接寫 limit 5,表示去前5條),限制結果查詢功能僅適用於mysql。
9.  select * from emp order by sal desc limit 1;
2.6 模糊查詢
關鍵字和通配符:
·      模糊查詢:like
·      %:表明0到多個字符
·      _:表明1位字符
示例代碼:
1.  #11.查詢名稱中包含s的員工信息(模糊查詢:like %:表明0到多個字符 _:表明1位字符)
2.  select * from emp where ename like '%s%';
3.  select * from emp where ename like 's%';
4.  select * from emp where ename like '%s';
5.  #查詢名稱第3個字符是L的員工信息
6.  select * from emp where ename like '__L%';
2、高級查詢
1.關聯查詢(也稱爲鏈接查詢)
1.1 定義:查詢多張表或結果集
1.2 分類:內鏈接和外鏈接
1.3 內鏈接
語法格式:
1.  #在emp查詢全部的員工及其所在部門信息
2.  #語法一:
3.  #where的條件至關於從笛卡爾積中進行檢索
4.  select * from emp,dept where emp.deptno = dept.deptno;
5.  #語法二:inner join … on
6.  select * from emp inner join dept on emp.deptno = dept.deptno;
7.  #語法三:存在通用列,因此能夠這樣寫
8.  select * from emp inner join dept  using(deptno);
特色總結:
·      多張關聯表共有的記錄才能出如今結果集中。
·      內鏈接的結果與鏈接順序無關。
1.4 外鏈接
語法格式:
·      左外鏈接:left [outer] join … on …
·      右外鏈接:right [outer] join … on …
示例代碼:
1.  #查詢全部的部門及其部門下的員工信息(內鏈接就解決不了了)
2.  select * from dept left join emp on emp.deptno = dept.deptno;
3.  select * from dept left join emp on dept.deptno = emp.deptno;
4.   
5.  #天然鏈接(天然鏈接都是等值鏈接,等值鏈接不必定是天然鏈接)
6.  select * from emp natural join dept;
7.   
8.  #查詢20號部門全部員工及其所在部門信息
9.  select * from emp , dept where emp.deptno = dept.deptno and emp.deptno=20;
10.         select * from (select * from emp where deptno = 20) e,dept wheree.deptno=dept.deptno;
11.         
12.         #查詢全部員工及其上級領導(mgr)的名稱(自鏈接)
13.         select e1.ename '姓名', e2.ename '領導' from emp e1 left join emp e2 on e1.mgr=e2.empno;
特色總結:
·      外鏈接結果與鏈接順序有關。
·      有主從表之分,依次遍歷主表每條記錄並與關聯表進行匹配,若匹配成功則關聯展現到結果集,若匹配失敗則以null填充。
2.子查詢
1.1 定義
將一個查詢結果做爲另外一個查詢的條件或組成繼續進行檢索。
2.2 分類
單行子查詢:子查詢返回的結果是一條記錄
多行子查詢:子查詢返回的結果是多條記錄
2.3 單行子查詢
示例代碼:
1.  #查詢編號爲7788的員工所在部門的信息
2.  #方法一:關聯查詢實現
3.  select dept.* from (select * from emp where empno = 7788) e, dept where e.deptno=dept.deptno;
4.  #方法二:子查詢(或嵌套查詢)實現
5.  #查詢7788員工的部門編號,將條件和結果放到一張表中(查找通用列)
6.  select * from dept where deptno = (select deptno from emp where empno = 7788);
7.   
8.  #查詢工資>20號部門平均工資的員工信息
9.  select * from emp where sal > (select avg(sal) from emp where deptno = 20);
10.         #查詢工資>20號部門平均工資而且不在20號部門的員工信息
11.         select * from emp where sal > (select avg(sal) from emp where deptno = 20) and deptno<>20;
2.4 多行子查詢
2.4.1 關鍵詞: any 與all
1.  # 關鍵詞:any / all:
2.  # =any:至關於in >any:大於最小值 <any:小於最大值
3.  # >all:大於最大值 <all:小於最小值
4.   
5.  #查詢工資大於2000的員工所在部門信息
6.  select * from dept where deptno in (select distinct deptno from emp where sal > 2000);
7.   
8.  #查詢工資大於所在部門的平均工資的員工信息
9.  #關聯查詢實現
10.         select emp.* from emp , (select deptno , avg(sal) avg from emp group by deptno) e where
11.         emp.deptno = e.deptno and sal > e.avg;
12.         #子查詢實現
13.         #步驟:
14.         #1.主查詢將deptno傳給子查詢
15.         #2.子查詢根據主查詢的deptno查詢指定部門的平均工資
16.         #3.子查詢將該部門平均工資返回給主查詢
17.         #4.主查詢根據返回結果進行最後檢索。
18.         select * from emp e1 where sal > (
19.             select avg(sal) from emp e2 where e2.deptno = e1.deptno
20.         );
2.4.2 關鍵詞:exists
示例代碼:
1.  #查詢工資>2000的員工所在的部門信息
2.  #exists:
3.  #1.將主查詢的記錄一次次交給子查詢
4.  #2.在子查詢中匹配記錄,若是可以找到匹配的記錄,返回true,此時將展現主查詢該條記錄;如
5.  #果不匹配則返回false,主查詢該條記錄不展現
6.  select * from dept where exists (
7.      select * from emp where sal > 2000 and emp.deptno =dept.deptno
8.  );
in和exsits的區別:
·      in先執行子查詢,exists先執行主查詢
·      in須要關注子查詢返回值的字段信息;exists不須要關心返回字段
·      exists將主查詢的記錄依次在子查詢中匹配,若是匹配返回true展現。
2.5  總結
何時使用關聯查詢?何時使用子查詢?
·      當查詢結果存在多張表,使用關聯查詢;當查詢結果存在於一張表,用子查詢。
·      關聯查詢資源消耗高,子查詢資源消耗低但可能存在屢次查詢。
3.聯合查詢:合併結果集
3.1 條件
多個結果集的字段必須保持一致,才能進行聯合查詢
3.2 關鍵詞
union:聯合結果集並去重
union all:聯合結果集但不去重
3.3 爲何使用聯合查詢?
理論上能夠用or關鍵詞代替聯合查詢,但or關鍵詞會致使索引失效故此使用聯合查詢。
3.4 示例代碼
1.  #查詢20號部門以及工資>2000的員工信息
2.  select * from emp where deptno = 20 or sal > 2000;
3.  select * from emp where deptno = 20 union select * from emp where sal > 2000;
4.  select * from emp where deptno = 20 union all select * from emp where sal > 2000;
相關文章
相關標籤/搜索