sql语句-sql学习笔记3

1、有两张表(主键和外键)

员工表emp:empno, ename, job, mgr(上级), hiredate, sal, comm(奖金), deptno

部门表dept:deptno, dname, loc

理论上先建dept表:

--创建dept表

create table dept(deptno int primary key,dname nvarchar(30),loc nvarchar(30))

insert into dept values(10,'accounting','new york')

--创建emp表

create table emp(empno int primary,ename nvarchar(30),job nvarchar(30),mgr int,hiredate datetime,sal numeric(10,2),comm numeric(10,2),deptno int foreign key references dept(deptno))

insert into emp values(1000,'lili','clerk','8878','1990-1-1'.1374.21,80)

*****对于外键,请注意:

(a)外键只能指向主键

(b)外键和主键的数据类型要一致

2、表的基本查询-简单的查询语句

(a)查询所有列

select * from emp where 条件(*能不用就不用,浪费资源

(b)查询指定列

select 字段1,字段2 form emp where 条件

(c)如何取消重复行(distinct只能消除搜索结果完全相同的行保留一行)

select distinct 字段1,字段2  from 表名 where 条件

**例1:查询smith的薪水,工作,所在部门

select sal,job,deptno form emp where ename='smith'

**例2:统计共有多少个部门编号

select distinct deptno form emp 

(d)使用算数表达式

**例3:显示每个雇员的年工资

select ename 姓名,sal*13 "年工资" from emp

**select ename,sal*13+comm*13 "年工资" from emp

后面这句可能有问题,因为comm有的值为空(NULL),空与任何值运算的结果都是空(NULL),可以通过一个函数转换

**select ename,sal*13+isnull(comm,0)*13 "年工资" from emp

**例4:如何查找1982.1.1以后入职的员工

select * form emp where hiredate>'1982-1-1'

(e)使用like操作符(模糊查询)

%:表示0到多个字符 _:表示单个字符

**例5:如何显示首字母为S的员工的姓名和工资

select ename,sal from emp where ename like"S%"

(f)在where中使用in

**例6:如何显示empno为123,111,212雇员的情况

select * from emp where empno=123 or empno=111 or empno=212

而一般我们使用in来完成

select * form emp where empno in(123,111,212)

**例7:如何显示没有上级的员工

select ename from emp where mgr is null

(g)使用逻辑操作符号

就是or and 的使用

(h)使用order by(默认是升序排列asc,降序排列用desc)

**例8:如何按照工资的从低到高的顺序显示雇员信息

select * form emp order by sal asc

**例9:按照部门号升序而工资降序

select * form emp order by deptno ,sal desc(执行结果:先排deptno,然后sal,比如把部门号10的sal降序,再把部门号20的sal降序)

**例10:统计每个人的年薪并按照从低到高的顺序排列

select ename,(sal*13+isnull(comm,0)*13) "nianxin" from emp order by nianxin asc

(i)分页查询(很常用)






你可能感兴趣的:(sql,sql语句,sql学习笔记,sql语句使用)