sql server
sql server查询语句:
--SQL语句 --创建数据库 --create database liangshangTest use liangshanTest--使用某个数据库 --创建表 create table hero ( id int,--id号 name varchar(10),--名字 sex varchar(2),--性别 salary int --薪水 ) --使用sql语句添加数据 insert into hero values(1,'宋江','男',3000)--注意字符要用单引号 insert into hero values(2,'林冲','男',1000) insert into hero values(3,'吴用','男',2400) --1.查询所有数据 select * from hero --2.条件查询 select *from hero where salary>=3000 --更新:将薪资少于2000的工资提高10% --格式:update 表名 set 字段名=。。。 where 条件 update hero set salary=salary*1.1 where salary<2000 --查询 select * from hero --删除一张表(把表的数据和结构一起删除) --drop table hero --删除:删除薪资大于2500的 --格式:delete from 表名 where 条件 delete from hero where salary>2500 select * from hero
表--支持的数据类型
1、字符类型:
char : 字长 最大8000字符(非unicode编码) char(10) 限定长度,若输入长度不够,用空格补全
varchar : 变长 最大8000字符(非unicode编码) varchar(10) 10为最大长度,若填入的不到最大长度,则按照填入的长度分配空间
既然varchar这样节省空间,为什么还要用char呢?
虽然varchar节省空间,但是在这种情况下应该使用char,在长度确定的情况下(比如有个数据库用于存放学生的学号,存放的是固定长度的学号,)这时候使用char在查询起来就很方便了。
使用char类型,在查询时,根据字长匹配比较;而varchar则需要一个字节一个字节地去匹配,相比于char更耗时。
当字符超过8000个时,char类型也不能满足我们的时候,使用text或者ntext
ntext : 可变长度Unicode数据的最大长度为2的30次方-(1073,741,823)个字符
text : 可变长度,非Unicode编码,最大长度为2的31次方-(2,147,483,647)个字符
ntext与text区别:ntext是多字节格式存储的unicode,可以存储各种文字。text是字节格式存储的英文,也可以存储中文但是有时候会显示成乱码
nchar : 定长,最大字符4000,(unicode编码) nchar(10)不足用空格补全
nvarchar : 可变长,最大字符4000(unicode编码) (unicode编码)按填入的字符大小分配空间
注意:
1)、一般带有汉字段的使用nvarchar,全英文或者符号使用varchar,因为,nvarchar为unicode字符集,该类型无论是当字母还是当汉字都占两个字节,而varchar非unicode编码,字母占一个字节,汉字占两个字节,nvarchar处理汉字或者其他字符集的速度都比varchar字段快
2)、如果有一些特殊字符在nvarchar中没有的,如日文的某些名片,那当然只能选合适的varchar了,而且这些特有的字符转换到nvarchar会失效
2、数字型
bit : 范围0-1
bigint : -2的63次方—2的63次方 , 存储大小为8个字节
int : -2 的31次方—2 的31次方,存储大小为4个字节
smallint :-2的15次方—2的15次方,存储大小为2个字节
tinyint:0-225的整型数据。存储大小为1字节
3、浮点
float:不建议使用,因为小数后面可能会出错,可指定保留的位数 float(10,2)表示10位,小数点后保留两位
4、图片和视频
image保存图片,但是很少用,一般用路径保存图片,在软件公司往往使用图片服务器和图床技术
binary字段可以存放视频,但是我们往往将视频文件放在文件服务器上,sql server中只保存文件路径,存放效率高
4、时期类型
datetime(表示日期)
timestamp(时间戳)
时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。
--创建一个职员表 create table clerk ( clerkId int primary key,--主键不能重复出现,也不能为NULL clerkName nvarchar , clerkAge int ) --添加数据 insert into clerk values(1,'小米',19) insert into clerk values(2,'huh',19) insert into clerk(clerkId,clerkName) values(3,'敌人') --查询数据 select * from clerk
SQL server复杂查询语句
1 --创建一个数据库 2 3 4 --创建职员表,和部门表 5 6 --部门表 7 8 create table department 9 ( 10 depId int primary key,--主键 11 dName nvarchar(30) 12 ) 13 14 --职员表 15 create table emp 16 ( 17 empId int primary key, 18 eName varchar(50), 19 job varchar(50), 20 hireDate datetime, 21 sal numeric, 22 depId int foreign key references department(depId)--根据需要做成外键 23 --外键注意事项,1.外键只能指向主键 2.主键和外键的数据类型相同 24 ) 25 26 insert into department(depId,dName) values(10,'财务部') 27 insert into department(depId,dName) values(20,'技术部') 28 insert into department(depId,dName) values(30,'销售部') 29 30 insert into emp(empId,eName,job,hireDate,sal,depId) 31 values (101,'nick','经理','1992-2-2',10000,10) 32 insert into emp(empId,eName,job,hireDate,sal,depId) 33 values (102,'马克','职员','1998-2-2',5000,10) 34 insert into emp(empId,eName,job,hireDate,sal,depId) 35 values (103,'索亚','职员','2000-2-4',1000,10) 36 insert into emp(empId,eName,job,hireDate,sal,depId) 37 values (104,'灵儿','职员','2004-2-2',1200,10) 38 insert into emp(empId,eName,job,hireDate,sal,depId) 39 values (105,'小猪','职员','2008-2-2',10000,10) 40 insert into emp(empId,eName,job,hireDate,sal,depId) 41 values (106,'佩奇','经理','2010-2-2',5000,20) 42 insert into emp(empId,eName,job,hireDate,sal,depId) 43 values (107,'海伦','职员','1992-2-2',1600,20) 44 insert into emp(empId,eName,job,hireDate,sal,depId) 45 values (108,'洛奇','职员','2003-2-2',10000,20) 46 insert into emp(empId,eName,job,hireDate,sal,depId) 47 values (109,'乔治','经理','2012-2-2',40000,30) 48 insert into emp(empId,eName,job,hireDate,sal,depId) 49 values (110,'乔洋','职员','2000-2-2',8000,30) 50 insert into emp(empId,eName,job,hireDate,sal,depId) 51 values (111,'成成','职员','2013-2-2',8000,30) 52 insert into emp(empId,eName,job,hireDate,sal,depId) 53 values (112,'华夏','职员','2012-2-2',7000,30) 54 55 select * from department 56 select * from emp 57 58 --查询佩奇的资料信息 59 select empId,eName,job,hireDate,sal,depId from emp e where ename='佩奇' 60 61 --查询指定列的信息 62 select eName,job,depId from emp 63 64 --取消重复行(distinct只能消除完全一样的行,并保留一行) 65 --select distinct 字段 from 表名 where 66 select distinct depId from emp 67 68 --显示没有员工的年工资,其中别名,年工资可以有单引号,双引号,也可以不用 69 select eName ,sal*13 '年工资' from emp 70 71 --查找2000年后入职的员工 72 select * from emp where hireDate>'2000-1-1' 73 74 --显示工资在8000-10000的员工工资 75 --有两种写法: 76 --写法一: 77 select eName,sal from emp where sal>=8000 and sal<=10000 78 --写法二 79 select eName,sal from emp where sal between 8000 and 10000 80 81 --显示首字符为乔的员工,使用like,% 82 select eName ,sal from emp where ename like '乔%' 83 84 --显示第二个字符为奇的员工,_代表一个字符 85 select eName ,sal from emp where ename like '_奇%' 86 87 --显示某个Id号的员工的信息 88 select * from emp where empId in(101,110) 89 90 --查找·同时满足多条信息的员工 91 select * from emp where (sal>=10000 or job ='经理') and ename like '乔' 92 93 --按照工资的从高到低显示员工工资 94 --order by 默认是升序排列 asc 95 --order by desc 降序 96 select * from emp order by hiredate desc 97 98 --按照部门升序二雇员工资降序排列 99 --order by可以根据不同的字段排序 100 select * from emp order by depId,sal desc 101 102 --显示所有员工的最低工资 103 select min(sal) from emp 104 --显示所有员工的最高工资,并显示员工id和姓名,max 105 select empId,eName from emp where sal=(select max(sal) from emp) 106 107 --显示所有员工的平均工资和工资总和,avg ,sum 108 select AVG(sal) "平均工资",SUM(sal) 总工资 from emp 109 110 --计算有多少员工,count 111 select COUNT(*) 员工总数 from emp 112 113 --显示每个部门,不同职位的平均工资和最高工资,group 114 select avg(sal) 平均工资,depId from emp group by depId,job 115 116 --显示平均工资低于10000的部门号,和平均工资 117 --having一般和group结合使用 118 --一般group by--having--order by 119 select AVG(sal) 平均工资,depId from emp group by depId having AVG(sal)>10000 120 order by AVG(sal) asc 121 122 --显示员工信息和部门号 123 --如果两张表存在相同的字段,则需要带表名(别名) 124 --使用别名就不能使用原表名 125 select e.depId,dName,ename,empId from emp e,department d where e.depId=d.depId 126 127 --显示部门为10的员工 128 select e.depId,dName,ename,empId from emp e,department d where e.depId=d.depId and e.depId=10
1 --indentity(1,1)自增长,表示testId字段自增,从1开始,每次自加1 2 --先创建一个表,create table test 3 ( 4 testId int primary key identity(1,1), 5 testName varchar(30), 6 testPass varchar(30) 7 ) 8 9 insert into test (testName,testPass) values('Archer',123456); 10 insert into test(testName,testpass) select testName,testPass from test; 11 select * from test
约束
1. not null:非空
2.unique:唯一,该值不可以重复,但是可以允许一个为null
3.primary key:主键,一张表只能有一个主键,且主键不能为空也不能重复
4.foreign key:外键,用于主表跟从表的关系,外键约束要定义在从表上,主表必须是具有主键或者unique约束的,或是为null
5.check:用于强制性数据必须满足的条件,比如数据范围的限定
eg:
category nvarchar(3) check (category in ('食物','日用品'))
6.default:在列中插入默认值
备份数据库
backup database 你要备份的数据库名 to disk='路径' backup database aaa to disk ='c:/sp.bak'
删除数据库
drop database 数据库名 drop database aaa
恢复数据库
restore database 你的数据库名 from disk='备份文件路径' restore database aaa from disk='c:/sp.bat'
crud 增(create),查(retrieve),改(update),查(delete)
使用jdbc-odbc桥连方式操作数据库
由于微软的数据库不是用Java语言来编写的,但是我们需要用java语言连接微软的数据库,这样就要编写一个桥连接,使java语言编写的代码也可以操作数据库。
JDBC, 全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。JDBC也是java核心类库的一部分。
操作步骤(需要进行异常处理)
1.加载驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
通过调用静态方法forName()加载sun.jdbc.odbc包中JdbcOdbcDriver类来建立JDBC-ODBC桥接器。
2.连接
Connection connection=null; connection = DriverManager.getConnection("jdbc:orale:thin:@Ip的地址及端口号和数据库的实例名","用户名"," 密码")
3.对数据库进行操作