查詢時,select語句不區分大小寫,但是查詢的內容區分大小寫。
set timing on; //顯示操作的時間
select count(*) from 表名; //顯示查的這張表有多少行
insert into 表名(字段名,字段名,....) select * from 表名; //自我複製記錄,這樣的話就可以瘋狂複製了。
select distinct 字段名,字段名,....from 表名; // 查詢時,把重複的記錄過濾掉
select sal*12 from emp; //查一年的工資
select sal*12 '年工資', ename from emp; //給字段名起別名
如何查找1982.1.1後入職的員工?
如何顯示工資在2000到3000之間的員工情況
如何使用 like 操作符:
%:表示任意0到多個字符 _:表示任意單個字符
?如何顯示首字符爲 S 的員工姓名和工資
如何顯示第三個字符爲 O 的所有員工姓名和工資
在where條件中使用 in
如何顯示empno 爲7844,345,234的僱員情況
使用 is null 的操作符
如何顯示沒有上級的僱員情況,也就是要查MGR爲空的那個人。
不要這樣寫,統統不行:
select * from emp where mgr = null;
select * from emp where mgr = ' ';
使用邏輯操作符號
查詢工資高於 500或是崗位爲MANAGER的僱員,同時還要滿足他們的姓名的首寫字母爲大寫 J
使用 order by 子句,order by 就是按照什麼什麼來排序,默認從低到高 。
如何按照工資從低到高的順序顯示僱員的信息
select * from emp order by sal; = select * from emp order sal asc;
如果想從高到低來排序,則這樣寫: select * from emp order by sal desc;
按照部門號升序而僱員的工資降序排列:
select * from emp order by deptno , sal desc;
使用列的別名來排序
別名需要用雙引號來圈中。
在實際應用中經常需要執行復雜的數據統計,經常需要顯示多張表的數據
數據分組:max , min , avg , sum , count ;
顯示所有員工中最高工資和最低工資:
把最高工資的那個人,並把他的工資顯示出來:
顯示工資高於平均工資的員工信息,也就是要用到子查詢咯:
group by 和 having 子句
group by 用於對查詢的結果分組統計
having 子句用於限制分組顯示結果
顯示每個部門的平均工資和最高工資
顯示每個部門的每種崗位的最高工資和平均工資
顯示平均工資高於2000的部門號和它的平均工資:
對數組分組的總結:
1、分組函數只能出現在選擇列表,having,order by中。
2、如果 在select語句中同時出現包含有 group by,having,order by ,那麼他們的順序是 group by,having,order by 。
3、在選擇列中如果有列,表達式和分組函數 ,那麼這些列和表達式必須有一個出現在group by 子句中,否則就會出錯。
例如: select max(sal) , avg(sal) , deptno from emp group by deptno having avg(sal)<2000;這裏deptno就一定要出現在 group by 中!
多表查詢
說明
多表查詢是指基於兩個和兩個以上的表或是視圖的查詢。在實際應用中,查詢單個表可能不能滿足你的需求,(如顯示sales部門位置和其員工的姓名),這種情況下需要使用到(dept表和emp表)
問題:顯示僱員名,僱員工資及所在部門的名字【笛卡爾集】?
規定:多表查詢的條件是至少不能少於表的個數-1 才能排除笛卡爾集 ,例如這裏
下圖的deptno 就是這兩張表的一個條件。
顯示各個員工的姓名,工資,及其工資的級別:
自連接
自連接指的是在同一張表的連接查詢
什麼是子查詢?
子查詢是指嵌套在其他sql語句中的select語句,也叫嵌套查詢。