当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2012-06-27 04:57:00  来源:本站整理

MSSQL 基本语法及实例操作语句[MSSQL防范]

赞助商链接



  本文“MSSQL 基本语法及实例操作语句[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
MS SQL基本语法及实例操作

一:建表并初始化
============================
create database mf2011 --成立数据库

use mf2011 --利用数据库

create table dept --成立"部门"表
( www.110hack.com
deptno int primary key, --部门编号(主键)
dname nvarchar(30), --部门名称
loc nvarchar(30) --部门所在的地址
)
-----

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) --成立一个外键指向部门表(描写该员工属于哪个部门)
)

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

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values
(7369,'michael','clerk',7902,'2010-1-12',675.23,300,20)

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values
(7499,'allen','salesman',7698,'2009-1-23',1675.23,322.50,30)

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values
(7521,'ward','salesman',7698,'2008-1-3',12675.99,399.50,30)

insert into emp (empno,ename,job,mgr,hiredate,comm,deptno) values
(7566,'jones','manager',7839,'2000-1-1',8675.99,20)

insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values
(7654,'martin','salesman',7698,'2007-12-31',1275.99,999.00,30)

insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(7782,'blake','manager',7839,'2007-12-20',1275.99,30)

insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(7788,'sccot','analyst',7566,'2003-1-22',1275.99,10)

insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(7781,'miller','opreator',7566,'2005-10-12',1275.99,40)
www.110hack.com
insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(7744,'adamc','opreator',7566,'2006-10-30',1244.0,40)

insert into emp (empno,ename,job,hiredate,sal,deptno) values
(7839,'king','president','2000-1-1',100244.0,10)

insert into emp (empno,ename,job,mgr,hiredate,sal,deptno) values
(1999,'lxliog','opreator',7566,'2006-10-30',1244.0,40)
-----
select * from dept
select * from emp

--主键:唯一,非空
--外键:只能指向主键,与指向的主键数据范例必须一致

二:操练
============================
1,查询emp表全部列
select * from emp --刘君正

2,查询指定列(比方:姓名,工资两列)
select ename,sal from emp --郑朝阳

3,撤消反复行(从emp表中查询部门号)
select distinct(deptno) from emp --徐绍峰,郝艳芳,刘辉,马东勤

4,从emp表中查询名字为lxliog员工的薪水,工作,所作部门
select sal,job,deptno from emp where 'lxliog'=ename --侯耀文,谭雪玲,黎小龙

5,统计总共有都少个部门(两种方法:从emp或从dept)
select count(deptno) from dept --诺布才仁
select count(distinct(deptno)) as 部门总数 from emp --诺布才仁

use mf2011
select * from dept;
select * from emp;
--6,显示每个雇员的年工资
select isnull(sal,0)*12+isnull(comm,0) as 年薪 from emp --扎西多杰

7,若何显示工资高于3000的员工信息
select * from emp where sal>3000 --邓文文
www.110hack.com
8,若何查找1982.1.1后入职的员工
select * from emp where hiredate>'1982-1-1'

9,若何显示工资在2000到2500之间的员工情形
select * from emp where sal between 1244 and 100244
select * from emp where sal>=2000 and sal<=250000

10,若何显示首字母为S的员工姓名和工资(模糊查询)
select ename ,sal from emp where ename like 's%'

11,若何显示第三个字母为‘O'的全部员工的姓名和工资(模糊查询)
select ename 姓名,sal as 月薪 from emp where ename like '__R%';

12,若何显示empno为123,345,800...的员工情形(在where条件中利用in)
select * from emp where empno in(123,345,800,1999,7400,7744);

13,若何显示没有上级的雇员的情形(利用is null 的操作符)
select * from emp where mgr is null;

14,查询工资高于1000或是岗亭为manager的雇员,
同时还要满意他们的姓名首字母为j(利用逻辑操作符)
select * from emp where (sal>1000 or job='manager')
and ename like 'j%';

16,若何按工资的从低到高的次序显示雇员的信息
(利用order by字句asc, desc)
select * from emp order by sal desc;

17,若何按入职的先后次序显示雇员的信息(利用order by字句asc, desc)
select * from emp order by hiredate desc;

18,按部门号升序而雇员的工资降序布列显示雇员信息
(利用order by字句asc,desc)
select * from emp order by deptno asc,sal desc;

19,统计每个人的年薪,并按从低到高的次序排序(利用列的别名排序)
select isnull(sal,0)*12+isnull(comm,0) 年薪 from emp order by 年薪;

20,若何显示员工中最高工资和最低工资
select max(sal) as "max(sal)",min(sal) from emp;

21,若何显示最低工资的员工信息
select * from emp where sal = (select min(sal) from emp);
www.110hack.com
22,显示全部员工的平均工资和工资总和
select avg(sal) as "avg(sal)" , sum(sal) as "sum(sal)" from emp;

23,把高于平均工资的雇员的名字和他的工资显示出来
select ename,sal from emp where sal>(select avg(sal) from emp);

24,计算共有多少名员工
select count(ename) from emp;

25,若何显示每个部门的平均工资和最高工资
select avg(sal) as "avg",max(sal) as "max",deptno
from emp group by deptno

26,若何显示每个部门的高于总平均工资的平均工资和最高工资
select avg(sal) as "avg",max(sal) as "max",deptno
from emp where sal>(select avg(sal) from emp) group by deptno

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

28,显示平均工资低于2000的部门号和它的平均工资
(having常常和group by结合利用,可以对分组查询后果举行挑选)
select avg(sal),deptno from emp group by deptno having avg(sal)<2000

29,利用企业管理器来操作数据库的别离与附加
见操作步骤

30,利用企业管理器来操作数据库的备份与恢复操作
见操作步骤

31,利用查询解析器器来操作数据库的备份与恢复操作
(1)备份数据库
backup database mf2011 to disk='f:/lxliog.bak';
(2)删除数据库
drop database mf2011;
(3)恢复数据库
restore database mf2011 from disk='f:/lxliog.bak';

复杂查询(多表查询)
32,显示sales部门的位置和其员工的姓名
select d.loc,e.ename from emp e,dept d where d.dname='sales' and d.deptno=e.deptno

33,显示雇员名字,雇员工资及所在部门的名字(当字段有歧义的时刻要用别名)
select e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno
www.110hack.com
34,显示部门号为10的部门名称,及该部门的员工名字和工资
select d.dname, e.ename, e.sal from emp e,dept d where d.deptno=10 and d.deptno=e.deptno

35,显示雇员名字,雇员工资及所在部门的名字,并按部门名称排序
select e.ename, e.sal, d.dname from emp e,dept d where e.deptno=d.deptno order by d.dname

自衔接:在同一张表的衔接查询
36,显示某个员工的上级带领的姓名(比方:smith)
(1)select mgr from emp where ename='adamc'
(2)select ename from emp where empno=(select mgr from emp where ename='adamc')

37,显示公司每个员工和他上级的名字
select worker.ename, boss.ename from emp worker, emp boss where worker.mgr=boss.empno

子查询:嵌入在别的sql语句中的select语句,也叫嵌套查询.
单行子查询:只返回一行数据的子查询语句.
38,显示与jones同一部门的全部员工
(1)select deptno from emp where ename='jones'
(2)select * from emp where deptno=(select deptno from emp where ename='jones')

多行子查询:返回多行数据的子查询.
39,查询和部门号为10的工作相同的雇员的名字、岗亭、工资、部门号.(注意要利用in,不能用=)
(1)select distinct job from emp where deptno=20
(2)select ename,job,sal,deptno from emp where job in (select distinct job from emp where deptno=20);

40,在上面查询后果的底子上解除20部门的员工
select ename,job,sal,deptno from emp where job in (select distinct job from emp where deptno=20) and
deptno not in (20);
或select ename,job,sal,deptno from emp where job in (select distinct job from emp where deptno=20) and deptno <>20;

在from字句中利用子查询
41 ,显示各个部门高于本部门平均工资的员工的信息
(1)先查出各个部门的平均工资 www.110hack.com
select avg(sal),deptno from emp group by deptno
(2)把上面的表当作一个暂时表来对待
select e.ename,e.sal,tem.myavg,e.deptno
from emp e,(select avg(sal) myavg,deptno from emp group by deptno) tem
where e.deptno=tem.deptno and e.sal>tem.myavg

注意:(1)当在from字句中利用子查询时,该子查询会被当作一个暂时表来对待,
(2)当在from字句中利用子查询时,必须给子查询指定一个体名

分页查询:按雇员的hiredate属性升序取出第5条到第10条记录
42,显示第5条到第10条记录
(1)显示第1到第4条记录
select top 4 empno from emp order by hiredate
(2)显示后6条记录(第5条到第10条记录)
select top 6 * from emp where empno
not in(select top 4 empno from emp order by hiredate)
order by hiredate;

43,显示第11个到第13个入职的人的信息(写法同上)

44,显示第5到9的人的信息,按薪水的降序布列(写法近似)
select top 5 * from emp where empno not in
(select top 4 empno from emp order by sal desc)
order by sal desc;
45,同一张表中的数据复制
(1)成立一张暂时表:identity(1,1)表示该testId字段自增,从1开始每次+1
create table test(
testId int primary key identity(1,1),
testName varchar(30),
testPass varchar(30)
)
(2)插入一条数据
insert into test(testName, testPass) values('zhangsan','123456');
(3)复制数据
insert into test(testName, testPass) (select testName,testPass from test);

46,查询testId为第10000-10009的数据,看看性能.
select top 10 * from test where testId not in
(select top 9999 testId from test order by testId)
order by testId

用查询后果成立一张新表(一种快速的建表办法)
47,语法:select *(这里可以挑选字段) into 另一张表面 from 表
select testName,testPass into mytest from test where testId<8
表mytest在上述语句中已经成立好了,并且初始化好了数据
并且把testId设置为主键:ALTER TABLE test01 ADD primary key(testId)
www.110hack.com
48,删除一张表中的反复数据
(1)create table cat(
catId int,
catName varchar(40)
)
(2)insert into cat values(1,'aa'); //反复履行几次
insert into cat values(2,'bb'); //反复履行几次
(3)select distinct * into #temp from cat;//把cat的记录distinct后的后果,插入到暂时表#temp中
delete from cat;//把cat表的记录清空
insert into cat select * from #temp;//把#temp表的数据(没有反复的数据)插入到cat表中
drop table #temp;//删除表#temp3

左外衔接和右外衔接
左外衔接:左边表的查询数据全部显示,右边的表中假如没有匹配的数据则用null填充
右外衔接:右边表的查询数据全部显示,左边的表中假如没有匹配的数据则用null填充
49,显示emp表中全部雇员的及其上级的名字(看看辨别)
(1)左外衔接:select e.ename 雇员名字,b.ename 上级名字
from emp e left join emp b on e.mgr=b.empno;
(2)右外衔接:select e.ename 雇员名字,b.ename 上级名字
from emp e right join emp b on e.mgr=b.empno;

常见约束:
(1)not null, 非空
(2)unique, 唯一,答应呈现一个null
(3)primary key, 主键,唯一,非空
(4)foreign key, 外键,定义主表和从表的关联关系
(5)check,查抄,强迫数据必须满意定义的条件,比方:sal int check(sal>=2000 and sal<=3000)
(6)default, 默许值,用于数据的完好性,比方:birthday datetime default getdate(),

50,复合主键只能用表级定义
比方:create table cat(
catId int,
catName varchar(40),
catAge int,
primary key(catId, catName)
)
www.110hack.com
51,商品售货系统表计划案例:现有一个商店数据库,记录客户及其购物情形,由下面三个表构成:商品(goods),客户(customer),购置(purchase)
商品goods(商品号goodsId, 商品名称goodsName, 单价unitPrice, 商品类别category, 供应商provider);
客户customer(客户号customerId, 姓名name, 住址address, 电邮email, 性别sex, 身份证cardId);
购置purchase(客户号customerId, 商品号 goodsId, 购置数目nums);
(1)建表,在定义中要求申明:
ü 每个表的主键和外键;
ü 客户的姓名不能为空;
ü 单价必须大于0,购置数目必须在1到10之间
ü 电邮不可以反复
ü 客户的性别必须是:男或女,默许是男
ü 商品的类别是:食物,日用品

----goods表
Create table goods(
goodsid nvarchar(50) primary key,
goodsnamd nvarchar(80) not null,
unitPrice numeric(10,2) check (unitPrice>0)
category nvarchar(3) check (category in (‘食物','日用品')),
provider nvarchar(50)
)
----customer
Create table customer(
Customerid nvarchar(50) primary key,
Cusname nvarchar(50) not null,
Address nvarchar(100),
Email nvarchar(50) unique,
Sex nchar(1) check(sex in(‘男','女')) default ‘男',
Cardid nvarchar(18)
) www.110hack.com
----purchase
Create table purchase(
Customerid nvarchar(50) foreign key references customer(Customerid),
goodsid nvarchar(50) foreign key references goods(goodsid),
nums int check(nums>0 and nums<10),
primary key(customerid, goodsid)
)

作者 qq395740774
  以上是“MSSQL 基本语法及实例操作语句[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • MSSQL安全设置的具体步骤和办法小结
  • MSSQL 基本语法及实例操作语句
  • Debian Ubuntu下php连MSSQL
  • 常用的MSSQL日期函数
  • 怎样在Windows2003下设置MSSQL
  • <b>怎样复原MSSQL数据库</b>
  • 怎样导入本地数据到MSSQL远程数据库
  • 怎样更改IXWebHosting中MSSQL Quota的办法
  • MSSQL读取文件号令
  • Mssql反弹注射实录汇集
  • 对MSSQL数据库的判断与其特点
  • 查抄MSSQL存储历程
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .