您的当前位置:首页正文

TheoperationsinSQLServer2005(SQL)

2020-11-09 来源:欧得旅游网

虽然现在Microsoft的产品SQLServer好像不太受欢迎(从我身边了解到的),这里就简单说说一些SQLServer的SQL,其中很多是标准的SQL语句,数据库通用的。 连接步骤 //前期准备 String driver =com.microsoft.sqlserver.jdbc.SQLServerDriver;URL: String url =jd


虽然现在Microsoft的产品SQLServer好像不太受欢迎(从我身边了解到的),这里就简单说说一些SQLServer的SQL,其中很多是标准的SQL语句,数据库通用的。

连接步骤

//前期准备

String driver =com.microsoft.sqlserver.jdbc.SQLServerDriver;
URL: String url =jdbc:sqlserver://localhost:1433;databadeName=db_Blog;
USERNAME: String username = sa;
PASSWORD: String password = ysjian //按照自己的设定

//利用发射机制创建类的加载和连接

Class.forName(driver);
Connection conn =DriverManager.getConnection(url,username,passWord);

//执行预编译

String sql ;
String[] param;
PreparedStatementpstm = conn.prepareStatement(sql);
If(param!=null&?m.length>0){
 for(inti=0;i


执行查询:ResultSetrs = pstm.executeQuery();

执行更新:int result = pstm.executeUpdate();

主键(primarykey):数据的唯一标识,不会重复的列做主键

1. 业务主键:使用有业务意义的字段做主键,如用户名,身份证号,银行账号等(不推荐)

2. 逻辑主键:使用无任何意义的字段做主键,因为很难保证业务主键不会重复,所以推荐使用逻辑主键

外键(foreignkey):在表与表之间建立联系的枢纽,标间关联

列的数据类型:

bit(0或1):相当于boolean类型的数据;

char(n):不可变的字符串,不足部分用空格填充

varchar(n):最大长度为8000

nvarchar(MAX):类似无限大,2^31-1

datetime(时间类型):date

timestamp:时间戳,时间格式较全的格式

uniqueidentifier:唯一标示符(推荐做主键)

主键的选择:

1. int(bigint)+标识列(自增字段)

2. uniqueidentifier(GUID):业界主流

int自增做主键的优缺点:

优点:占用空间小,无需开发人员干预

缺点:效率低,数据导入导出时不便

GUID做主键的优缺点
优点:效率高,数据的导入导出方便

缺点: 占用空间大,不易读

SQL语句

◎插入语句

int自增做主键:

insert into users values(‘ysjian’,22)--自增主键可以不给值
insert into users(name,age) values(‘ysjian’,22)--推荐带上列名

uniqueidentifier做主键:

insert into users values(‘ysjian’,22)--自增主键可以不给值
insert into users(name,age) values(‘ysjian’,22)--推荐带上列名

--表示不等于20

 update users set name=N’袁’ where age<>20
	update users set name=N’袁’ where age!=20
 update users set name=N’袁’ where age>20 and age<30 or age=80
 update users set name=N’袁’ where age between 20 and 30

◎删除语句

 delete from users--清空表(注意delete后面不能加*)
 delete from users where age=20

◎查询语句(重点)

select* from users
select name as ‘姓名’,ageas 年龄,id as ‘编号’from users
select ‘姓名’ =name , 年龄= age,id as ‘编号’from users
select age+3 as 年龄 from users

//聚合函数

 Select count(*) from users
 Select max(age) from users
 Select min(age) from users
 Select avg(age) from users
 Select from users

//排序

 Select * from users order by age desc--按年龄降序
 Select * from users where age>20 order by age asc--按年龄升序

//模糊查询(通配符’_’和’%’)

 Select * from users where name like‘袁_’--查询以”袁”开头后面有一个字符
 Select * from users where name like‘%袁%’--查询名字有”袁”字的数据

//null(不知道)

 Select * from users where name is null
 Select null+1--
结果为null Select null+’123’--结果为null

//分组查询

Select age ,count(*) from users group by age --查询的列名必须与分组一致,聚合函数不能出现在where子句中
(错)Select count(*) from users where count(*)>5 group by age(错)--having子句是对分组后的信息过滤,能用的列是查询的列
(错)Select count(*) from users group by age having id>5(错)
Selectage, count(*) from users group by age having age>20 and count(*)>5

//限行查询

 Select top 5 * from users order by age desc
 Select top 5 percent * from users

//经典例子:按工资从高到低的排序检索从第六名开始一共五人信息

Select top 5 salary from employee where id not in(select top 5 id from users order by salary desc) order by salary desc

//保持数据的唯一

 Select distinct eName fromemployee--保持整行数据的唯一性

//联合查询,上下字段的个数必须一致,且数据类型相容

 Select name,age from users
 Union all--默认会将完全重复的数据合并,all可以阻止合并
 Select name,5 from users2

//(联合查询的运用)报表的制作

 Select ‘正式工最大年龄’,max(fAge) from T_employee
 Union all
 Select ‘正式工最小年龄’,min(fAge) from T_employee
 Union all
 Select ‘临时工最小年龄’,min(fAge) from T_tempEmployee
 Union all
 Select ‘临时工最大年龄’,max(fAge) from T_tempEmployee
 Select FNumber,FSalary from T_Employee
 Union all
 Select ‘工资合计’,sum(Fsalary) from T_Employee


//数据库函数

 Select ABS(-5)--绝对值5
 Select ceiling(5.2) --大于5.2的最小整数
 Select floor(-3.5)--小于-3.5的最大整数
 Select round(3.1415926,3)--四舍五入,指定取舍位3,
结果为3.1420000 Select len(‘abc’)--3 Select lower(‘ABC’)--abc Select upper(‘abc’)--ABC Select ltrim(‘ china ’)--china Select rtrim(‘ china ’)-- china Select substring(‘yuanshenjian’,3,5)--开始位置为3,长度为5

//日期函数

 Select getdate();--取得当前日期
 Select daeAdd(day,5,getdate())--当前时间天数加3
 Select dateDiff(day,’1990-08-02’,getdate())--1990-08-02距离当前时间的天数 
 Select datePart(year,getDate())--返回一个日期的特定部分

//经典语句

Select dateDiff(year,FinDate,getDate()), count(*) from T_Employee
Group by dateDiff(year,FinDate,getDate())
Having count(*)>2


//类型转换

 Select cast (‘123’asint),cast(‘2012-11-23’as datetime)
 Select convert(datetime,’2012-11-23’),convert(varchar(50),123)

//流控函数,如果FName为null,赋值为“佚名”

 Select isnull(FName,’佚名’) as 姓名 from T_Employee

//单值判断

Select FName,
(
 case Flevel
 when 1 then‘普通客户’
 when 2 then‘会员’
 when 3 then‘VIP’
 else ‘未知客户类型’
 end--一定要加end
)as 客户类型
 from T_Customer


//l练习:表中有A,B,C三列,但A大于B时选A,否则选B,但B大于C时

选B,否则选C

Select
(
case
when A>B then A else B
end
),
(
case
when B>C then B else C
end
)
From player

//练习二

Select Name as 队名,
sum(
 case scores
 when ‘胜’ then 1
 else 0
 end
)as 胜,
sum(
 case scores
 when ‘负’ then 1
 else 0
 end
)as 负
from Team
group by Name

//数据库的创建

if exsits(select * from sys.database when [name]=’market’)
drop database market
create database market
on
(
 name=’market.mdf’,
 filename=’E:\Microsoft\market.mdf’,
 size=5,
 maxsize=555,
 filegrowth=55
)
log on
(
 name=’market’,
 filename=’market.ldf’,
 size=5,
 maxsize=55,
 filegrowth=55%
)


//表的创建

if exists(select * from sys.objects where[name]=’employee’)
drop table employee
create table employee
(
 eId varchar(5) not null primary key,
 eSex bit not null default(1),
 uidint not null identity
 pid varchar not null foreign key references employees(pId)
)
显示全文