sql語句的基本用法總結


一、sql語法

1 select */列名1,列名2... from 表名[連接查詢  內連接/左連接 on條件]   必選的
2 
3 where  條件 子查詢/in/exists/between ... and ..  可選的
4 
5 group by 分組列1,分組列2...  可選的
6 
7 having 字句 可以對分組結果進行篩選  可選的
8 
9 order by 排序列1,排序列2... 可選的

各個關鍵字的數據必須要保證

二、寫sql語句的步驟

1、要先確定從哪個表中查詢數據,是要從一個表查詢,還是要從多個表查詢,如果是多個表必須用連接查詢。

2、確定是否需要分組查詢

3、寫where條件

4、寫需要返回的列

三、連接查詢

連接查詢分兩類,交叉連接和普通連接查詢

1、交叉連接

交叉連接可以用逗號分隔多個表,也可以用關鍵字cross join ,交叉連接返回兩個表數據的笛卡爾集。

2、連接查詢

連接查詢分內連接和外連接,外連接有分為左外連接,右外連接,全連接

最常用的是內連接和左外連接

內連接返回所有滿足連接條件的記錄

select * from 表1 [inner] join  表2 on 表1. 外鍵=表2.主鍵

1 --查詢所有有部門的員工的信息
2 select * from emp e inner join dept d on e.deptno=d.deptno;

左外連接返回左表的所有數據+右表匹配到的數據,如果左表匹配不到右表的數據,顯示為空

1 --查詢所有員工信息,如果員工有部門信息,顯示出來,否則不顯示
2 select * from emp e left join dept d on e.deptno=d.deptno;

右外連接同左外連接

全連接返回左表的所有數據+ 右表的所有數據,如果匹配不到對方的數據,則顯示為空

1 --查詢所有員工和部門信息,如果匹配不到顯示為空
2 select * from emp e full join dept d on e.deptno=d.deptno;

三、in

iin用在連接條件中,表示某個字段的值在in提供的列表之中。

1 select * fromwhere 列名 in (值1,值2...);

in后還可以是一個子查詢,子查詢一般會返回多個結果。

1 舉例:查詢部門編號在10,20,30之中的用戶的信息
2 select * from emp where deptno in (10,20,30);

in 和=的區別,in后面可以跟多個值,=后面只能有一個值

1 舉例:查詢部門名稱為BOSTON或者CHICAGO的員工的信息
2 select e.* from emp e inner join dept d on e.deptno=d.deptno where d.loc ='BOSTON' or d.loc='CHICAGO'
3 使用in:
4 select * from emp where deptno in (select deptno from dept where loc in ('BOSTON','CHICAGO'));

四、between ... and ...

一般也用在條件中,between開始值and結束值,開始值和結束值一般是數字,也可以是其他類型(字符串,日期)

字符串比較和字符串的長度無關,會從第一個字符開始向后比較,如果相同再比較下一個。

1 舉例:查詢基本工資在1500到2000之間的員工的信息
2 select * from emp where sal between 1500 and 2000;
1 查詢 1981年到1998年之間雇佣的員工的信息
2 --把字符串轉換為日期之后再比select * from emp e where e.hiredate between
3 to_date('1981-01-01','yyyy-mm-dd') and to_date('1998-12-31','yyyy-mm-dd');
4 --把日期轉換為字符串之后再比select * from emp e where to_char(e.hiredate,'yyyy-mm-dd') between
5 '1981-01-01' and '1998-12-31';

五、group by

group by 分組查詢

select 結果列  from 表 where 條件 group  by  列1,列2...

注意:結果列只能是兩種形式:

1、要么是分組的列

2、如果要返回其他列,需要對其他列使用聚合函數

1 舉例:統計各部門不同職位的人有多少個
2 select deptno,job,count(empno) from emp group by deptno,job
3 select dname,job,count(empno) from emp e inner join dept d on e.deptno=d.deptno
4 group by e.deptno,dname,job;

having 子句可以對分組查詢的結果進行過濾

舉例:統計各部門不同職位的人有多少個,只顯示部門人數大於2的信息 
1 select dname,job,count(empno) c from emp e inner join dept d on e.deptno=d.deptno
2 group by e.deptno,dname,job
3 having count(empno) >2
4 ;

六、order by

order by 排序,可以對多列排序order by 列1 升序/降序,列2 升序/降序 默認是升序asc.

例子:查詢員工信息 按基本工資從大小排列 
1 --先按員工基本工資倒序,再按獎金倒select * from emp order by sal desc,comm desc;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM