單表的查詢語句
一、查詢表的全部數據 select * from 表名;*表明全部
select * from emp;
二、查詢表中指定字段的值 select 字段名1,字段名2,...from表名
select empno,ename from emp;
三、給查詢結果中的字段使用別名
在字段名後使用關鍵字 字段名 as "別名"
做用:方便查看查詢結果
注意:as關鍵字能夠省略不寫,別名中沒有特殊字符雙引號也能夠省略不寫。
select empno 員工編號,ename"員工 姓名",job as 工做,mgr as "領導編號" from emp;
四、鏈接符:select 字段名||'字符'||字段名||..... from 表名
||爲sql語句的字符連接符,使用在select和from之間
字符連接格式爲 字段名||'字符'||字段名
注意:一個拼接好的鏈接在結果集中是做爲一個新的字段顯示,可使用別名優化字段顯示。
select empno||'的姓名是'||ename as "信息",job||'哈哈'||mgr from emp;
五、去除重複 select distinct 字段名,字段名,...from 表名
注意:去除重複的規則是按照行進行去除的,多行數據徹底相同取其一
select distinct job ,mgr from emp;
六、排序
1)單字段排序
select * from 表名 order by 字段名 asc 升序排序 asc能夠省略不寫
select * from 表名 order by 字段名 desc 降序排序
2)多字段排序
select * from emp order by 字段名1,字段名2...
先按照字段1排序,若是字段1的值相同,則按照字段2排序,....
select * from emp order by empno desc--單字段排序 降序
select empno,ename,job from emp order by ename asc--單字段排序 升序
select * from emp order by empno,ename--多字段排序
七、字段的邏輯運算
select關鍵字和from關鍵字之間的字段能夠直接進行四則運算
字段與字段之間也能夠直接進行運算
注意:字段值爲數值類型
select empno,ename,job,sal*2+1000,sal+comm from emp
八、使用where子句查詢篩選
select 字段名,字段名,...from表名 where 篩選條件
1)單篩選條件
使用運算符進行篩選 =,>,>=,<,<=,<> 單個條件中
注意:若是條件中的值爲字符,必須使用單引號括起來
查詢全部的員工的工資信息
select empno,ename,sal+comm as 薪資 from emp
查詢SMITH的我的信息
select * from emp where ename='SMITH'
查詢SMITH的薪資信息,邏輯運算符=
select empno,ename,sal,sal+comm from emp where ename='SMITH'
查詢工資大於1000的員工信息,邏輯符>
select * from emp where sal>'2000'
查詢工資不等於3000的員工信息
select * from emp where sal<>3000 order by sal
2)多條件篩選(where子句關鍵字:and,or,like,is null,is not null, in ,between and)
查詢工資在2000-3000之間的員工信息
--使用and關鍵字,多條件同時成立的篩選使用and關鍵字進行條件鏈接
select * from emp where sal>=2000 and sal<3000
--使用between and 關鍵字進行條件鏈接,包含兩頭的數據
select * from emp where sal between 2000 and 3000
查詢工做爲SALESMAN,ANALYST,MANAGER的員工信息
--使用or關鍵字,進行或條件的篩選。
select * from emp where job='SALESMAN' or job='ANALYST' or job='MANAGER' order by job
--使用in關鍵字,也能夠進行或篩選,可是in中的內容只能爲一個字段的值。
select * from emp where job in('SALESMAN','ANALYST','MANAGER')
查詢姓名中包含s的,以s開頭的,以s結尾的,第二個字符爲A的。(模糊查詢)
--%號表任意多個的任意字符
select * from 表名 where 字段名 like '%字符%' 查詢包含指定字符的數據
select * from emp where ename like '%S%' --包含S的
select * from 表名 where 字段名 like '字符%' 查詢以指定字符開頭的數據
select * from emp where ename like 'S%'--以S開頭
select * from 表名 where 字段名 like '%字符' 查詢以指定字符結尾的數據
select * from emp where ename like '%S'--以S結尾的
select * from 表名 where 字段名 like '_字符%' 查詢指定位置爲指定字符的數據
--_表示一個任意字符
select * from emp where ename like '_A%'--第二個字符爲A的
--select * from 表名 where 字段名 like '%字符2字符1%' escape'字符2'
escape將指定的字符變爲轉義字符:轉義字符能夠將特殊字符轉爲普通字符
select * from emp where ename like '%/_%' escape '/'
查詢有津貼的員工信息
select * from 表名 where 字段名 is null 字段值爲null
select * from 表名 where 字段名 is not null 字段值不爲null
多個條件使用and關鍵進行鏈接,篩選的是符合全部條件的數據
select * from 表名 where 篩選條件1 and 條件2 and ....
select * from emp where comm is not null and comm>0 sql
Oracle函數(單行函數,多行函數,轉換函數,其餘函數)
單行函數(字符函數,數值函數,日期函數)
特色1:不改變真實數據,只是對數據作了進一步修飾或者處理顯示。
特色2:能夠和字段混合使用數據庫
- 字符函數:
查詢全部的員工信息,員工姓名小寫顯示。
select empno,ename,lower(ename),job,mgr, sal,lower('HH') from emp
查詢全部的員工信息,員工姓名首字母大寫。
select empno,INITCAP(ename) 首字母大寫的姓名,lower(ename),job from emporacle
- 數值函數:對數值類型的數據進行運算
僞表:真實存在的表,是爲了方便進行數據的驗證而臨時存在的表。表名爲:dual
select abs(-1),ceil(2.2),floor(3.3),power(2,3),mod(5,2),round(4.55),trunc(10/3,2) from dual函數
- 日期函數:
select months_between('01-1月-2018','24-6月-2017') from dual --返回兩個日期間的月份數
select add_months('01-4月-2018',-4) from dual --返回指定月數後的日期
select next_day('16-4月-2018','星期二') from dual--查詢最近的星期的日期
select last_day('16-4月-2018') from dual--返回當月的最後一天的日期
select round(to_date('19-4月-2018'),'DAY') from dual--按照星期進行四捨五入學習
多行函數(max,min,avg,sum,count)很重要
做用:對查詢的數據進行統計
使用:select 多行函數名(字段名),多行函數名(字段名)..from 表名
注意:多行函數不能和普通字段以及單行函數混用,除非分組
max(字段名) 返回該字段的最大值
min(字段名) 返回該字段的最小值
sum(字段名) 返回該字段的和
avg(字段名) 返回該字段的平均值
count
count(*) 返回表的記錄數
count(字段名) 返回非空值的數量
count(distinct 字段名) 去除重複後的字段值的數量
查看員工的最高工資
select max(sal) from emp --多行函數不能和字段直接混用,除非分組。
select lower(ename),max(sal) from emp --多行函數 不能和單行函數混用,除非分組
查看員工的最低工資
select min(sal) from emp
查看員工的平均工資
select avg(sal) from emp
查看全部的員工工資之和
select sum(sal) from emp
查詢公司有多少員工
select count(*) from emp--查詢表的記錄數
查詢有津貼的員工人數
select count(comm) from emp --查詢字段的值的數量,null會自動過濾
查詢公司有多少工做種類
select distinct job from emp
select count(distinct job) from emp
select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp
優化
轉換函數
to_char(數值或者是日期):將數值或者日期轉換爲字符
to_date(日期格式的字符):將字符轉換爲日期
----------------數值和字符的互轉-----------------------
1)字符轉換爲數字char---->number
select to_number('123')+2 from dual
2)數字轉換字符number--->char
指定顯示格式:
9表示位置佔位,例如999,999,999會將數字按照三個一組使用逗號隔開。
L表示人民幣符號,$表示美圓符號
0能夠進行佔位分組,可是若是真實數據位數不足,會使用0進行補位。
select to_char(12345,'$999,999,999') from dual --$12,345
select to_char(12345,'L999,999,999') from dual --¥12,345
select to_char(12345678,'000,000,000,000.000') from dual --000,012,345,678.000
查詢工資大於2000的員工信息
數值和字符之間的轉換能夠隱式轉換。to_number能夠省略不寫.
select * from emp where sal>'2000';
select * from emp where sal>to_number('2000');
---------------日期和字符的互轉---------------------------
通常使用方式:新增數據使用to_date(),查詢數據使用to_char()
1)字符轉換爲日期 char--->date
使用to_date('要轉換的字符',日期格式)函數將字符轉換爲日期
注意1:字符必須符合日期格式
注意2:oralce默認的轉換格式爲日月年,例如'01-1月-2018' oracle認爲是一個日期
經常使用日期格式:
yyyy-mm-dd
yyyy/mm/dd
查詢員工入職日期在82年後的信息
select * from emp where hiredate >to_date('1982-01-01','yyyy-mm-dd')
select * from emp where hiredate >to_date('1982/01/01','yyyy/mm/dd')
select * from emp where to_char(hiredate,'yyyy-mm-dd') >'1982-01-01'
2)日期轉換爲字符 date--->char
使用to_char('要轉換的日期',轉換格式)
注意:若是不指名轉換格式,則使用默認格式,日月年例如:'01-1月-81'
經常使用轉換格式:
yyyy-mm-dd
yyyy/mm/dd
'yyyy"年"mm"月"dd"日"'
select to_char(hiredate) from emp --使用默認格式將日期轉換爲字符
select to_char(hiredate,'yyyy-mm-dd') from emp --使用指定格式 yyyy-mm-dd
select to_char(hiredate,'yyyy/mm/dd') from emp --使用指定格式 yyyy/mmm/dd
select to_char(hiredate,'yyyy"年"mm"月"dd"日"') from emp --使用指定格式 'yyyy"年"mm"月"dd"日"'
其餘函數:
1)nvl():nvl(字段名,新的值)若是字段值不爲null,則返回該字段的值。若是爲null則返回新的值
2)nvl2():nvl2(字段名,處理1,處理2)
若是字段值不爲null,則執行處理1,爲null執行處理2
3)decode():decode(字段名,值1,處理1,值2,處理2,值3,處理3,...,公共處理)
若是字段的值和decode中的條件值相同則執行對象的處理。若是都沒有則執行公共處理
查詢員工的工資信息
select ename,job,sal from emp
查詢員工的薪水信息
select ename,job,sal+nvl(comm,0),sal+comm,sal from emp
select ename,job,nvl2(comm,sal+comm,sal) from emp
顯示員工的職稱
select ename,job,decode(job,'MANAGER','經理','PRESIDENT','董事長','SALESMAN','銷售','普通員工') from emp
分組查詢&篩選學習
關鍵字:group by 分組字段名,分組字段名....注意1:使用了分組後,在select語句中只容許出現分組字段和多行函數。
注意2:若是是多字段分組,則先按照第一字段分組,而後每一個小組繼續按照第二個字段繼續分組,以此類推。
注意3:在where子句中不容許出現多行函數。
分組篩選
關鍵字:having
做用:針對分組進行分組後的數據篩選,容許使用多行函數。
注意:having關鍵必須和分組結合使用。不容許單獨使用。
where和having的比較:
where子句不容許出現多行函數,having容許出現多行函數
where子句和having均可以使用普通字段直接進行篩選,可是where的效率高於having
where執行順序: from--->where--->group by-->select-->order by
having執行順序:from--->group by-->select--->having--->order by
結論:在分組語句中,使用where進行字段級別的篩選,使用having進行多行函數的篩選。
查詢最高工資和員工數
select max(sal),count(*) from emp
查詢不一樣部門的最高工資
select deptno,max(sal) from emp group by deptno
查詢不一樣工做崗位的員工數
select job, count(*) from emp group by job
查詢不一樣部門的不一樣工做崗位的人數
select deptno ,lower(job),count(*) from emp group by deptno,job order by deptno
查詢不一樣部門的不一樣工做崗位的而且人數大於1的信息
select deptno ,lower(job),count(*) from emp group by deptno,job having count(*)>1 order by deptno
查詢部門號大於10的不一樣部門的不一樣工做崗位的人數
使用having關鍵字
select deptno ,lower(job),count(*) from emp group by deptno,job having deptno>10 order by deptno
使用where關鍵字
select deptno,job,count(*) from emp where deptno>10 group by deptno,job order by deptno
數據庫的增刪改&數據備份
注意:增長刪除修改的數據SQL語句執行完畢後,不會立馬進行數據的寫入。還須要手動對數據進行提交,若是數據有問題還能夠回滾
主鍵:非空惟一的字段能夠設置爲主鍵。
在一張表中,某個字段的值是非空惟一的,將此字段設置爲主鍵。
主鍵的做用:惟一的標識一條數據。
增長數據
insert into 表名(字段名,字段名,...)values(值1,值2,值3....);注意1:主鍵必須給值,容許爲空的字段能夠不給值。
注意2:插入語句表名後跟的字段名爲要賦值的字段,值和字段數量和順序必須是一一對應的。
注意3:若是是全字段插入,能夠省略字段名部分 insert into 表名 values(值1,值2,.....)
在部門中新增一個新的部門信息,信息內容爲 編號:50,名稱:a學院,地址:北京
insert into dept(deptno,dname,loc)values(50,'a學院','北京');
insert into dept(deptno,dname,loc)values(60,'a學院','北京');
insert into dept values(60,'a學院','北京');
在部門中新增一條數據,只有部門編號和名稱,沒有地址。
insert into dept(deptno,dname)values(70,'a學院');
刪除數據
delete from 表名 刪除表中的全部記錄truncate table 表名 刪除表中的全部記錄,可是效率高於delete
delete from 表名 where 條件 --刪除指定的數據,只要符合條件就會刪除
delete from dept where deptno=50 --刪除指定的數據
delete from dept --清空表數據
truncate table dept--清空表中數據
更新數據
update 表名 set 字段名=新的值,字段名=新的值...(會將字段的值所有改成新的值)update 表名 set 字段名=新的值,字段名=新的值... where 條件(將符合條件的數據的字段改成新的值)
update dept set dname='a學院',loc='上海'
update dept set dname='a學院',loc='上海' where deptno=50