基本查詢: 實例表 1 示例表 2 --部門表 3 4 create table dept( 5 6 deptno int primary key,--部門編號 7 8 dname nvarchar(30),--部門名 9 10 loc nvarchar(30)--地址 11 12 ); 13 14 ...
基本查詢:
實例表
1 示例表 2 --部門表 3 4 create table dept( 5 6 deptno int primary key,--部門編號 7 8 dname nvarchar(30),--部門名 9 10 loc nvarchar(30)--地址 11 12 ); 13 14 15 16 --雇員表 17 18 create table emp( 19 20 empno int primary key,--雇員號 21 22 ename nvarchar(30),--員工姓名 23 24 job nvarchar(30),--雇員工作 25 26 mrg int,--雇員上級 27 28 hiredate datetime,--入職時間 29 30 sal numeric(10,2),--薪水 31 32 comm numeric(10,2),--獎金 33 34 deptno int foreign key references dept(deptno)--設置外鍵 35 36 ); 37 38 39 40 insert into dept values (10,'ACCOUNTING','NEW YORK'); 41 42 insert into dept values (20,'RESEARCH','DALLAS'); 43 44 insert into dept values (30 ,'SALES','CHICAGO'); 45 46 insert into dept values (40, 'OPERATIONS','BOSTON'); 47 48 49 50 insert into emp values (7369,'SMITH','CLERK',7902,'1980-12-17',800.00,null,20); 51 52 insert into emp values(7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600.00,300.00,30); 53 54 insert into emp values(7521,'WARD','SALESMAN',7698,'1981-2-22',1250.00,500.00,30); 55 56 insert into emp values(7566,'JONES','MANAGER',7839,'1981-4-2',2975.00,null,20); 57 58 insert into emp values(7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250.00,1400.00,30); 59 60 insert into emp values(7698,'BLAKE','MANAGER',7839,'1981-5-1',2850.00,null,30); 61 62 insert into emp values(7782,'CLARK','MANAGER',7839,'1981-6-9',2450.00,null,10); 63 64 insert into emp values(7788,'SCOTT','ANALYST',7566,'1987-4-19',3000.00,null,20); 65 66 insert into emp values(7839,'KING','PRESIDENT',null,'1981-11-17',5000.00,null,10); 67 68 insert into emp values(7844,'TURNER','SALESMAN',7698,'1981-9-8',1500.00,0.00,30); 69 70 insert into emp values(7876,'ADAMS','CLERK',7788,'1987-5-23',1100.00,null,20); 71 72 insert into emp values(7900,'JAMES','CLERK',7698,'1981-12-3',950.00,null,30); 73 74 insert into emp values(7902,'FORD','ANALYST',7566,'1981-12-3',3000.00,null,20); 75 76 insert into emp values(7934,'MILLER','CLERK',7782,'1982-1-23',1300.00,null,10);View Code
1 select 2 基本select語句 3 4 select [distinct] *|{列名1, 列名2,列名3...} 5 6 from 表名 [where (條件)]; 7 8 9 10 說明: 11 12 select 指定查詢哪些列的數據。 13 14 *號代表查詢所有列。 15 16 from指定查詢哪張表。 17 18 where 表示條件。 19 20 distinct可選,指顯示結果時,是否剔除重覆數據 21 22 23 24 簡單的查詢語句 25 26 27 28 ■ 查詢所有列 29 30 select * from 表名; 31 32 ■ 查詢指定列 33 34 select 列1,列2… from 表名; 35 36 select ename,sal from emp; 37 38 ■ 如何取消重覆行 39 40 select distinct deptno ,job from emp; 41 42 ?查詢SMITH 的薪水,工作,所在部門 43 44 select sal,job,deptno from emp where ename='SMITH'; 45 46 特別說明:SQLServer 的sql 不區分大小寫,內容也不區分大小寫 47 48 49 50 ■ 使用算數表達式 51 52 ?顯示每個雇員的年工資(獎金為null的用0代替) 53 54 select ename,sal*12+isnull(comm,0)*12 as '年薪' from emp; 55 56 說明:isnull函數是 SQLserver提供的,用於處理數據 null 的問題 57 58 59 60 ■ 使用列的別名 61 62 select ename '姓名',sal*12 as '年收入' from emp; 63 64 65 66 使用別名時,as 可省略,別名可用單引號,雙引號或者不加 67 68 69 70 查詢工資在 2000 到 5000 的員工情況 71 72 ①, select * from emp where sal>=2000 and sal<=3000; 73 74 ②, select * from emp where sal between 2000 and 3000;
where
使用where子句 如何顯示工資高於的員工 select ename from emp where sal>3000; 如何顯示工資在到的員工情況 select * from emp where sal>=2000 and sal<=250; select * from emp where sal between 2000 and 2500;(閉區間)
distinct
distinct可選,指顯示結果時,是否剔除重覆數據 select [distinct] * from emp;
like 查詢
%: 表示任意0到多個字元 _: 表示任意單個字元 不區分大小寫 如何顯示首字元為S的員工姓名和工資 select ename,sal from emp where ename like 'S%'; 如何顯示第三個字元為O的所有員工的姓名和工資 select ename,sal from emp where ename like '__O%'; 查詢首字母不是 S 的雇員信息 select ename,job from emp where ename not like 'S%';
in
如何顯示empno為123,345,800...的雇員情況 ①,select * from emp where empno=123 or empno=345 or empno=800; ②,select * from emp where empno in (123,456,800); 一般我們使用 in 這個關鍵字,這樣效率更高
is null
如何顯示沒有上級的雇員的情況 select * from emp where mgr is null;
group by 和having(重點)
1 group by用於對查詢的結果分組統計,預設升序 2 3 having子句用於限制分組顯示結果. 4 5 6 7 使用order by字句 8 9 如何按照工資的從低到高的順序顯示雇員的信息 10 11 select ename,sal from emp order by sal asc; 12 13 按照部門號升序而雇員的工資降序排列 14 15 select * from emp order by deptno asc,sal desc; 16 17 按照入職先後順序排序 18 19 select ename,hiredate from emp order by hiredate asc; 20 21 ■使用列的別名排序 22 23 select ename,sal*12 '年薪' from emp order by '年薪' asc; 24 25 別名需要使用''號圈中,也可以不在''號圈中。 26 27 28 29 如何顯示每個部門的平均工資和最高工資 30 31 select avg(sal),max(sal),deptno from emp group by deptno; 32 33 34 35 顯示每個部門的每種崗位的平均工資和最低工資 36 37 select avg(sal),max(sal),deptno,job from emp group by deptno,job order by deptno; 38 39 40 41 顯示部門平均工資低於2000的部門號和它的平均工資 42 43 思路: 44 45 1,查詢出各個部門的平均工資 46 47 select avg(sal),deptno from emp group by deptno; 48 49 50 51 2,挑選出低於的 52 53 select avg(sal),deptno from emp group by deptno having avg(sal)<2000; 54 55 56 57 58 59 對數據分組的總結 60 61 1 分組函數只能出現在選擇列表、having、order by子句種 62 63 2 如果在select 語句種同時包含有group by ,having , 64 65 order by 那麼他們的順序是group by , having , order by 66 67 3 在選擇列中,如果有列、表達式、和分組函數,那麼這些列和 68 69 表達式必須有一個出現在group by 子句中,否則就會出錯 70 71 select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000; 72 73 這裡deptno就一定要出現在 group by 中
order by
1 order by 子句用於排序結果集。 2 3 asc表示升序 4 5 desc表示降序 6 7 8 9 如何按照工資的從低到高的順序顯示雇員的信息 10 11 select * from emp order by sal [asc]; 12 13 14 15 查詢學生信息,按照學號升序排列 16 17 select * from student order by sno; 18 19 查詢學生信息,按照年齡降序排列 20 21 select * from student order by sage desc; 22 23 查詢學生信息,按照年齡降序排列,如果年齡相等再按照學號升序排列 24 25 select * from student order by sage desc,sno asc;
使用別名
1 1) select ename,sal '薪水' from emp; 2 3 2) select ename,sal "薪水" from emp; 4 5 3) select ename,sal 薪水from emp; 6 7 4) select ename,sal as '薪水' from emp; 8 9 5) select ename,sal as "薪水" from emp; 10 11 6) select ename,sal as 薪水from emp; 12 13 14 15 ■使用列的別名排序 16 17 select ename,sal*12 '年薪' from emp order by '年薪' asc;