sql数据库学习笔记


starting...
1.数据库概念2.安装和卸载3.数据类型4.基本查询5.复杂查询6.约束、备份和恢复

(1).表名和列的命名规则:必须以字母开头、长度不能超过128字符、不要使用sql server的保留字、只能使用如下字符A-Z,a-z,0-9,$,_等...

注意:
    unicode编码:用两个字节表示一个字符(可以是英文字母,可以是汉字)-》对汉字支持比较好,非unicode编码:用一个字节表示一个字母,用两个字节表示一个汉字。

表的基本查询:

--创建数据库
create database xushouwei
--创建dept表
create table dept
(
deptno int primary key,
dname nvarchar(30),
loc nvarchar(30)
)

--创建emp表
create table emp
(
empno int primary key,
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)--因为deptno我们根据需要做成外键
)
--针对外键请注意:外键只能指向主键、外键和主键的数据类型要一致

insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7369,'smith','clerk',7902,'1980-12-17',800.00,20)
insert into emp values(7499,'allen','salesman',7698,'1981-2-20',1600.00,300.00,30)
insert into emp values(7521,'ward','salesman',7698,'1981-2-22',1250.00,500.00,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7566,'jones','manager',7839,'1981-4-2',2975.00,20)
insert into emp values(7654,'martin','salesman',7698,'1981-9-28',1250.00,1400.00,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7698,'blake','manager',7839,'1981-5-1',2850.00,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7782,'clerk','manager',7839,'1981-6-9',2450.00,10)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7788,'scott','analyst',7566,'1987-4-19',3000.00,20)
insert into emp(empno,ename,job,hiredate,sal,deptno) values(7839,'king','president','1981-11-17',5000.00,10)
insert into emp values(7844,'turner','salesman',7698,'1981-9-8',1500.00,0.00,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7876,'adahs','clerk',7788,'1987-5-23',1100.00,20)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7900,'janes','clerk',7698,'1981-12-3',950.00,30)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7902,'ford','clerk',7566,'1981-12-3',3000.00,20)
insert into emp(empno,ename,job,mgr,hiredate,sal,deptno) values(7934,'miller','clerk',7782,'1982-1-23',1300.00,10)

insert into dept values(10,'accounting','new york')
insert into dept values(20,'research','dallas')
insert into dept values(30,'sales','chicago')
insert into dept values(40,'operations','boston')

select * from emp
select * from dept

查询所有列:select * from 表明 where 条件
查询制定列:select 字段1,字段2 from 表明 where 条件
如何取消重复行(distinct只能消除完全一样的行,保留一行   ):select distinct 字段 from 表名 where 条件

--查询smith的薪水,工作,所在部门
select sal,job,deptno from emp where ename='smith'
select deptno from emp
select distinct deptno from emp

--显示每个员工的年薪(年工资就是别名+奖金)
select ename,sal*13+isnull (comm,0)*13年工资 from emp  

--如何显示工资高于3000的员工
select * from emp where sal>3000
select ename from emp where sal>3000

--如何查找1982.1.1后入职的员工
select * from emp where hiredate>'1982-1-1'

--如何显示工资在2000-2500之间的员工情况
select * from emp where sal>2000 and sal<2500
select * from emp where sal between 2000 and 2500

--如何显示首字母为s的员工姓名和工资
--%代表0-多个字符,_表示单个字符
select ename,sal from emp where ename like 's%'

--如何显示第三个字符为大写O的所有员工的姓名和工资
select ename,sal from emp where ename like '__O%'

--如何显示empno为123,345,800...的雇员情况(一般使用in关键字)
select * from emp where empno=123 or empno=345 or empno=800
select * from emp where empno in(123,345,800)

--显示没有上级雇员的情况
select * from emp where mgr is null

--查询工资高于500或是岗位为manager的雇员,同时还要满足他们的姓名手写字母为j
select * from emp where (sal>500 or job='manager') and ename like 'j%'

--如何按照工资的从低到高的顺序显示雇员的信息(注意:order by 默认是升序排列)
select * from emp order by sal asc

--如何按照工资的从高到低的顺序显示雇员的信息
select * from emp order by sal desc

--如何按照雇员入职先后顺序排列
select * from emp order by hiredate asc

--如何按照部门号升序而雇员的工资降序排列
select * from emp order by deptno asc , sal desc

--统计每个人的年薪,并按照从低到高的顺序排序
select ename,sal*13+isnull(comm,0)*13年薪 from emp  order by 年薪 asc
select ename,sal*13+isnull(comm,0)*13年薪 from emp  order by sal*13+isnull(comm,0)*13 asc
select ename,(sal+isnull(comm,0))*13年薪 from emp  order by sal*13+isnull(comm,0)*13 asc


复杂查询:

--如果结果要是很多的话就必须用到分页查询
--如何显示所有员工中工资最高和工资最低
--如何显示最低工资和该雇员的名字
select ename,sal from emp where sal=(select min(sal) from emp)

--显示所有员工的平均工资和工资总和
--把高于平均工资的雇员名字和他的工资显示,并显示平均工资
select avg(sal)平均工资,sum(sal)总工资 from emp
select ename,sal,(select avg(sal) from emp)平均工资 from emp where sal>(select avg(sal) from emp)

--计算共有多少员工
select count(*)员工数 from emp
 
--显示工资最高的员工的名字,工作岗位
select ename,job from emp where sal=(select max(sal) from emp)

--显示工资高于平均工资的员工信息
select * from emp where sal>(select avg(sal) from emp)

--group by用于对查询的结果分组统计;having子句用于限制分组显示结果
--如何显示每个部门的平均工资和最高工资,并显示部门名称
select avg(sal)平均工资,max(sal)最高工资,deptno from emp group by deptno


--显示每个部门的每种岗位的平均工资和最低工资
select avg(sal)平均工资,min(sal)最低工资,deptno,job from emp group by deptno,job order by deptno


--显示平均工资高于2000的部门号和它的平均工资,并按照从低到高顺序
select deptno,avg(sal)平均工资 from emp group by deptno having avg(sal)>2000 order by avg(sal) asc

原文地址:https://www.cnblogs.com/Jasxu/p/sql.html