Sqlserver常用基础语句
1. char/nchar,varchar/nvarchar
char(10) 只能放五个中文,定长,如果只放一个字节,后面就是九个空格(一个中文两个字节)
nchar(10) 放十个中文,定长
varchar(10)放五个中文,变长,如果只放一个字节,就只放一个字节
nvarchar(10)放十个中文,变长。。。。。。。
2.创建一个数据库,在数据库里面创建表,以及添加表里面的项
create database Library
go
use Library
go
create table Users
(
UID int primary key,
userName nvarchar(20) not null,
userPwd nvarchar(20) not null
)
creat table Books
(
BID int primary key,
bookName nvarchar(20) not null,
price int not null,
authors nvarchar(15),
)
3.select语句用法
select*from Products--查询出Products表里面的所有信息
select ProductID,ProductName from Products--查询出Products表里面所有的ProductID,ProductName
select ProductID,ProductName from Products where ProductID=1--查询出Products表里面ProductID=1的所有ProductID和ProductName
use pubs
go
select address from authors where au_id='172-32-1176'--先导入指定的数据库pubs,查询出authors表里面,au_id为172-32-1176的address
select productID,productName from products order by productID asc--默认是asc(可以不写)从小到大排序,desc是从大到小
select *from products where UnitPrice>20--查询出products表里面UnitPrice>20的所有信息
select* from Emloyees where LastName='King' and City='London'
use pubs
go
select* from employee where fname='Paul' and job_id=5
select*from Products where ProductID in(4,5,6)--查询出Products表中ProductID为4,5,6的所有信息
select*from Products where UnitPrice<10 and UnitPrice<30 order by UnitPrice--查询出Products表中UnitPrice<10并且UnitPrice<30的所有信息,并按照UnitPrice的大小由小到大排序
select*from Products where UnitPrice between 10 and 30 order by UnitPrice--上面的另外一种写法
select * from Employees where FirstName like 'A%'--查询出Employees中FirstName里面第一个字母是A的所有人信息
select*from Employees where FirstName like '%A%'--查询出Employees中FirstName里面中间有A的所有人信息
select*from Employees where FirstName like '%A'--查询出Employees中FirstName里面最后一个字母是A的所有人信息
select count(*) from Employees--查询出Employees表中的所有记录数
select min(Unitprice)from Products--查询出Products表中Unitprice的最小值
select max(Unitprice)from Products--查询出Products表中Unitprice的最大值
select avg(Unitprice)from Products----查询出Products表中Unitprice的平均值
select sum(Unitprice)from Products----查询出Products表中Unitprice的总和
select top 5* from Products--查询出前五条的记录信息
select * from Products where Unitprice> --有子查询,查找出比平均值高的商品信息
(
select avg(Unitprice) from Products
)
4.insert /update
insert into BOOK(bookName,bookPrice,bookAuthors)
values('C#基础','35','ji')
insert into BOOK(bookName,bookPrice,bookAuthors)
values('VB基础','12','ni')
insert into BOOK(bookName,bookPrice,bookAuthors)
values('C基础','35','das')
update BOOK set bookPrice=30 where bookName='C#基础'--修改BOOK表,让bookName为C#基础的项中的bookPrice=30
delete BOOK where bookName='C#基础'
5.有一个student表(学号,姓名,系名,课程名,成绩),查询至少修了四门课程的学生学号,姓名以及平均成绩的SQL语句。
select stu,sname,avg(sorce)
from students
group by stu,sname
having count(*)>=4
6.
select distinct [name] from Category //查出Category 中不重复的name
select count(distinct name) from Category //查出Category 中不重复的name的数量
7.连接
inner join on, left join on, right join on区别:
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
实验如下:
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
8. 用这种查询语句就可以查出指定区间记录的数据了
select * from
(select id, row_number() over(order by id desc) as row from [entry])Entry
where row between 1 and 5000
9.给表添加一字段
alter table Category
add
age int null
删除表:
drop table Users
10.约束
1.UNIQUE约束,与PK的区别:
一张表只能有一个PK,但可以有多个UNIQUE约束
PK约束定义主键不能为空,但UNIQUE可以为空值
方法:点"管理索引和键"---"添加"---"类型"选择"唯一键"---"列"添加进多个UNIQUE--关闭保存
它的作用是,当那多个unique同时都相同的时候,就会报错,实现了实体的完整性。
也可以用SQL语言来实现:
声明UNIQE约束
//单列处理
creat table T2
(
ID int primary key identity(1,1),
Ename nvarchar(20) unique
)
//组合列处理
creat table T3
(
ID int primary key identity(1,1)
Ename nvachar(20),
Ebir datetime
unique(Ename,Ebir)
)
2.check约束,它的作用是,约束一个键值,实现域完整性
方法:
"管理check约束"---"添加"---"常规"表达式---写入你要约束的键值的表达式比如:laborage>=2000 and laborage<=5000
---"关闭"保存
这样,在输入laborage的值的时候,如果不是大于等于2000小于等于5000就会报错
也可以用SQL语言实现
creat table T1
(
工资 money not null check(工资 between 2000 and 4000)
)
11.选择出年月日
select year(getdate()) //获取当前的年
select month(getdate()) //获取当前的年
select day(getdate()) //获取当前的年
select * from employ where month(birthday)=8 // 打印出8月份过生日的员工的所有信息
select * from employ where year(getdate())-year(birthday)>25// year(getdate())为当前年份,打印出年龄大于25岁的员工的所有信息
select * from employ where year(birthday)=2008 and month(birthday)=8 and day(birthday)=12 //打印出生日为2008-8-12日的所有员工信息
select dateadd(yy,100,getdate())//当天加上100年的时间,getdate()也可以换成具体的某一天比如写成:'2108/12/31'
select dateadd(mm,1,getdate())//当天加上1个月的时间
select dateadd(dd,100,getdate())//当天加上100天的时间
select datediff(yy,getdate(),'2108/12/31')//当天距离2108/12/31还有多少年
select datediff(mm,getdate(),'2108/12/31')
select datediff(dd,getdate(),'2108/12/31')
Month
mm、m
Dayofyear
dy、y
Day
dd、d
Week
wk、ww
Weekday
dw、w
Hour
Hh
Minute
mi、n
Second
ss、s
Millisecond
Ms
12.isnull
select title,content,isnull(categoryID,0) from news //为null的categoryID用0显示出来
13.case用法
//查找categoryID=13的state,并对state进行判断
select state,case
when(state=1)then '待审'
when(state=2)then '已审'
end as pro_state
from category where categoryID=13
//查找出低级的多少个,中级的多少个,高级的多少个
select Count(*) as [Count] from category
group by
case
when categoryID<15 then '低级'
when categoryID between 15 and 20 then '中级'
else '高级'
end
//查出category 中的CategoryID,name以及判断每个categoryID 的大小
select CategoryID,name,
case
when categoryID<15 then '低级'
when categoryID between 15 and 20 then '中级'
else '高级'
end as categoryRange from category
13.
Select c.*, IsNull(cr.Count,0) as [Count]
From Category c
Left Join
(
select cr.CategoryID,Count(*) as [Count] from CategoryRelative cr
right Join Entry e ON cr.ChildID = e.ID and e.state <> 2 and e.IsActive = 1
where cr.blogid = 8785
Group by cr.CategoryID
) cr ON c.CategoryID = cr.CategoryID
Where BlogID = 8785 and CategoryType = 1
14.exists
//查出Category 表中categoryID不等于n.categoryID的c.categoryID,c.[name]
select c.categoryID,c.[name] from Category c left join News n on c.categoryID=n.categoryID where n.categoryID is null
select categoryID,[name] from category where not exists
(
select * from News where category.categoryID=News.categoryID
)
*当News 表中categoryID无大量重复时第一种性能无疑是最好的,反之,第二种性能好。
14.cast和convert
convert包含了cast的所有功能,而且 convert还能进行日期转换,但是cast是ansi兼容的, convert则不是
select 'ID'+ cast(newsID as varchar) from News
ID5
ID8
ID9
ID10
ID11
ID13
ID14
Sqlserver常用基础语句的更多相关文章
- mysql常用基础语句学习
常用sql语句 查询: SELECT 列名(或者*,表示所有列) FROM 表名 WHERE 筛选条件; FROM 表名:顾名思义,就是从表名指定的这张表格中: WHERE 筛选条件:意思是" ...
- SQL 常用基础语句
1.SQL SELECT 语句 语法:SELECT 列名称 FROM 表名称 2.SQL SELECT DISTINCT 语句 语法:SELECT DISTINCT 列名 ...
- Oracle常用基础语句(杂)
打开服务 WIN + R services.msc 登录 --方法1 --WIN + R --CMD sqlplus / as sysdba --方法2,常用 --WIN + R --CMD --&q ...
- sqlserver 常用sql语句
SELECT COUNT(*) FROM WeixinUser SELECT COUNT(*) FROM WeixinUser WHERE datediff(day, CreateTime,getda ...
- 转: sqlserver常用sql语句,更改字段,建立唯一键,多个字段去重复等
[sql] view plain copy print?在CODE上查看代码片派生到我的代码片 --修改字段类型: --alter table 表名 alter column 待修改字段名 待修改字段 ...
- sqlserver常用sql语句,更改字段,建立唯一键,多个字段去重复等
--修改字段类型: --alter table 表名 alter column 待修改字段名 待修改字段类型 alter table users alter column userid varchar ...
- sqlserver常用简单语句
1.增 插入内容 insert into <表名> (列1,列2,列3) values ('值1','值2','值3') 检索出的内容插入到另外一张表 insert into <表名 ...
- SqlServer常用语句
首先,写这个的原因是我其实sql语句不太行,总觉得自己写得很乱,好像也没有系统学习过,借此复习和与大家探讨 No.1 关于查询时间区间是否重叠的sql语句 问题是这样:插入之前,想查询同User是否其 ...
- 第二节:SQLServer导出-重置sa密码-常用sql语句
1.SQLServer导出: 点击要导出数据库----->右键(任务)----->生成脚本----->下一步----->下一步(高级)要编写脚本的数据类型---选择架构和数据 ...
随机推荐
- java导出pdf
//导出 public void ScoringAnnouncementdownLoad() throws MalformedURLException, IOException, D ...
- Linux:Linux Mint系统的安装
今天就更新一篇了,其实Linux系统大部分都是用虚拟机来安装的,毕竟Windows系统才是我们常用的系统,而Linux系统只是我们工作时才用的,而且使用虚拟机是非常方便的,不用重启电脑就可以使用另一种 ...
- 【转】Android-Input 按键字符映射文件&输入设备配置文件
https://source.android.com/devices/input/key-character-map-files 按键字符映射文件 按键字符映射文件(.kcm 文件)负责将 Andro ...
- Redis 攻击还原Linux提权入侵的相关说明
https://files.cnblogs.com/files/fudong071234/redis_crackit_v1.1%E2%80%94%E2%80%94redis%E6%94%BB%E5%8 ...
- silverlight 从数据库获取到数据,动态生成XMLWEN文件,并获取文件进行操作
// Silverlight中的独立存储是其内部的可信任的可访问文件空间,在这里你可以使用Silverlight随意的创建.读取.写入.删除目录和文件,它有一些类似于Cookie,但是它可以在客户端保 ...
- Linux环境下nginx集群搭建
#确保安装nginx,stream模块默认不安装的,需要手动添加参数:–with-stream, nginx1.9或以上版本 #nginx.conf文件中,添加以下内容(只供参考),这个不能放在htt ...
- s21day17 python笔记
s21day17 python笔记 一.内容回顾及补充 回顾 补充 第三方模块补充 需要下载安装后才能导入使用 安装方式: pip包管理工具 # 把pip.exe 所在的目录添加到环境变量中. pip ...
- 20155219付颖卓《网络对抗》Exp6 信息搜集与漏洞扫描
基础问题回答 1.哪些组织负责DNS,IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理. 全球根域名服务器:绝大多数在欧洲和北美(全球13台 ...
- linux压缩、解压缩和归档工具
linux基础之压缩.解压缩和归档工具 1.压缩工具 基本介绍 为了减少文件的原来的文件大小而过多的浪费磁盘的存储空间,我们使用压缩后多文件进行存储 压缩工具的介绍 compress:把文件压缩成以. ...
- 2082 : Only choose one
题目描述 A想玩个游戏,游戏规则是,有n个人,编号从1-n,一字排开,站在奇数位置的人淘汰,剩下的人再一字排开,站在奇数位置的人淘汰,以此重复几次,最后只剩最后一个人,问最后一个人的编号是多少? 输入 ...