SQL操作语句
SQL语句与Mysql的语句⼤体上⽐较相似。以下是sql rver的⼀套练习题,是很好的数据库操作语句学习资料,学校的学习资料,在此整理了以下。
数据库exam:这是⼀个模拟电⼦商务,⽹上直销的数据,主要销售计算机配件。该数据库包含了订单数据、经销商基本数据、产品基本数据以及供应商基本数据等。该数据库共包含6个表,表名分别为:orders、distributors、suppliers、city、items和products。各个表的内容与格式如下:
表1 ⽹上直销订单表格,表名为:orders
列名描述数据类型
OrderNum订单号码Int
OrderDate订购⽇期Datatime
DistriNum经销商号码Int
PaidDate付款⽇期Datatime
表2 经销商表格,表名为:distributors
列名描述数据类型
DistriNum经销商号码Int
BossName经理名称Char
Company公司名称Char
CityCode所属市区代码Char
Address公司地址Char
Phone公司电话号码Char
表3 供应商表格,表名为:suppliers
列名描述数据类型
SuppCode供应商代码Char
SuppName供应商名称Char
表4 市区表格,表名为:city
列名描述数据类型
CityCode市区代码Char
CityName市区名称Char
表5 订单项⽬表格,表名:items
列名描述数据类型
Item订单项⽬号码Int
OrderNum订单号码Int
ProdNum产品号码Int
SuppCode供应商代码Char
Quantity单项定购数量Int
TotalPrice单项总价Money
表6 产品表格,表名:products
列名描述数据类型
ProdNum产品号码Int
SuppCode供应商Char
Descriptions产品名称Char
UnitPrice产品单价Money
⼀、数据表的简单操作
⽤SQL语句选取表中所有的列:
1、查询exam数据库中city表中所有的列的内容
lect*from city;
2、查询exam数据库中orders表OrderDate列的内容
华山一日游lect OrderDate from orders;
选取惟⼀的数值:
消除重复关键字:distinct (放在lect后⾯)
1、查询exam数据库中orders表中的订购⽇期OrderDate,并且相同的订购⽇期只显⽰⼀次(distinct)lect distinct OrderDate from orders;
2、对记录进⾏操作——选取特定的记录:
查询exam数据库中供应商代码为HHT的供应商的实际名称
lect SuppName from city where SuppCode= "HHT";
3、对记录进⾏操作——排除特定的记录:
查询exam数据库中供应⼚代码不为HHT的所有供应商的实际名称
lect SuppName from city where SuppCode!= "HHT";
3、对数据进⾏操作——选取介于某⼀范围的数据:
查询exam数据库的products表中所有单价不超过20元的产品的名称及其对应的价格
lect Descriptions,UnitPrice from products where UnitPrice <=20;
4、对数据进⾏操作——选取属于某⼀⼦集合的数据:
in:在...⾥
查询exam数据库中经销商号码为1006、1009、1013、1014、1017的经理名称以及其所在的公司名称lect DistriNum,BossName,Company from distributors where DistriNum in (1006,1009,1013,1014,1017);
5、对字符串进⾏操作——选取⼦字符串:
查询exam数据库中所有经销商的电话区号
lect substring(Phone,1,3) from distritubors; //第⼀位和从这⼀位开始⼏位
查询exam数据库中所有经销商的姓
lect substring(BossName,1,1) from distributors;
6、对字符串进⾏操作——搜索⼦字符串:
‘%’:表⽰N个任意字符
查询exam数据库中所有经理姓“王”的公司的名称、电话以及公司地址
lect BossName,Company,Phone,Address from distributors where BossName like'王%';
孕期性欲强⼆、⼀般数据查询与处理
1、同时执⾏多个SQL语句:
实现在⼀次查询中同时查询exam数据库中orders表和distributors表所有列的内容
lect*from orders;
go
lect*from distributors;
go
2、⽤order by⼦句对数据进⾏排序:
小意思用英语怎么说查询exam数据库products表格中所有的记录,查询结果根据单价由⼩到⼤的顺序(降序)排序
lect*from products order by UnitPrice desc;
3、使⽤算术运算符:
查询exam数据库products表中的所有记录,并且把每个产品单价显⽰成调⾼10%后的价格(只显⽰,数据库不变)lect ProNum,SuppCode,description,UnitPrice * 1.1from products;
3、查询exam数据库products表中的所有记录,并且把每个产品单价显⽰成8折后的价格
lect ProNum,SuppCode,description,UnitPrice *0.8from products;
5、搜索单⼀长度的任意字符串:为自己喝彩作文
‘_’:表⽰⼀个任意字符
查询exam数据库suppliers表中供应商代码的第1、3位分别为H和T的所有供应商的记录
lect*from suppliers where SuppCode like "H_T";
6、使⽤常⽤的字符串函数:
查询exam数据库distribuotrs表中经销商号码为1001的地址字符串的长度
lect len(Address) from distributors where DistriNum = "1001";
7、查询字符串的长度
lect len(‘中华⼈民共和国’);
文明城市黑板报8、将字符串‘I LOVE SQL SERVER‘的所有字母转换成⼩写字母
lect LOWER('I LOVE SQL SERVER');
9、将字符串‘abcdefg’中的⼩写字母转换成⼤写字母
lect UPPER('abcdefg');
10、将字符串‘ abcdefg’前的空格去掉
lect ltrim(' abcdefg);
11、将字符串‘uvwxyz ’后的空格去掉
lect rtrim('uvwxyz ');
12、将字符串‘我喜欢数据库’中的字符由左⾄右反转排列
lect REVERSE('我喜欢数据库');
13、求出字符A的ASCII码
lect ASCII('A');
14、判断数字5的正负号,如果正返回1,负返回-1
天使与恶魔图片lect SIGN(5);
15、使⽤常⽤的数学函数:
计算出以下三个数的绝对值:-2.5,0.0,7.4
lect ABS(-2.5),ABS(0.0),ABS(7.4);
16、返回分别⼤于或等于以下数字的最⼩整数:5.5,-7.2,0.0
lect floor(5.5),floor(-7.2),floor(0.0);
17、返回π(PI)的值
lect PI();
18、返回630.67的近似值,并将该数分别四舍五⼊到1、-2、3、0长度的⼩数
lect ROUND(630.67,1),ROUND(630.67,-2),ROUND(630.67,3),ROUND(630.67,0);
19、返回以下3个数的平⽅值:4、-6,6.6
lect SQUARE(4),SQUARE(-6),SQUARE(6.6);
20、返回以下3个数的算数平⽅根:4,0,50
图兰朵简介
lect SQRT(4),SQRT(0),SQRT(50);
21、计算Cos(3.1415926)的值 sin(3.14159260) ctg(3.14) tg(3.1415926)
lect COS(3.1415926),SIN(3.14159260),COT(3.14),TAN(3.1415926);
22、计算2的⾃然对数、指数值
lect LOG(2),EXP(2);
23、计算1000的以10为底的对数排查报告模板
lect LOG10(1000);
24、计算2的10次⽅
lect POWER(2,10);
三、常⽤函数
常⽤的集总函数的应⽤:
1、查询exam数据库products表中共销售多少种产品
lect COUNT(*) from products;
2、查询exam数据库items表中代码为HSC的供应商已订货的总⾦额
lect SuppCode,SUM(TotalPrice) from items where SuppCode ='HSC';
3、查询exam数据库products表中所有供应商所供应的货品的平均单价
lect SuppCode,AVG(UnitPrice) from products group by SuppCode;
4、查询exam数据库products表中每⼀个供应商产品的最⾼单价/最低单价
lect SuppCode,MAX(UnitPrice),MIN(UnitPrice) from products group by SuppCode;
6、时间函数:
(1)获取当前时间
lect getdate();
(2)、在1991-07-10 2:30:00.000时间上增加21天
lect dateadd(d,21,’ 1991-07-102:30:00.000’);
(3)、返回1991-07-10 2:30:00.000五天前的时间
lect DATEADD(D,-5,'1991-07-10 2:30:00.000');
(4)、返回两个⽇期间隔的时间
lect DATEDIFF(D,'02/20/1999','02/28/1999');
(5)、以字符串形式返回当天⼏年
lect DATENAME(Y,GETDATE());
(6)、以整数形式返回当天⼏号
lect DATEPART(D,GETDATE());
(7)、查询当前UTC时间(协调时间)
lect GETUTCDATE();
四、⾼级数据查询与处理
1、在⼀个lect语句中使⽤多个表格:
查询exam数据库中每⼀个经销商所有的订单数据,列出经销商号码、公司名称、电话号码以及订货⽇期lect distributors.DistriNum,Company,Phone,OrderDate from distributors,orders where orders.DistriNum = distributors.DistriNum 2、在lect语句中使⽤⼦查询:
查询exam数据库中与经理名称为‘王为’的经销商同在⼀个市区的所有经销商的数据内容
lect*from distributors where CityCode=(lect CityCode from distributors where BossName='王为');
3、⽤union运算符实现从不同的表格抽取相同格式的数据:
查询exam数据库中单价不⼤于25元或者是已订货项⽬中数量⼩于2的产品数据
lect ProdNum,SuppCode,Description,UnitPrice from products where UnitPrice <=25
union
lect ProdNum,SuppCode,Quantity from items where Quantity <2
4、添加记录:
在orders表中添加⼀笔记录,OrderNum为119,OrderDate为1905-06-8,DistriNum为1022,PaidDate为1905-06-9
inrt into orders(OrderNum,OrderDate,DistriNum,PaidDate) values(119,1905-06-8,1022,1905-06-9);
5、删除记录:
删除orders表中OrderNum为119的记录
delete from orders where OrderNum =119
6、更新记录:
将orders表中订单号为118的订单的订购⽇期改为2003-07-11
update orders t OrderDate = "2003-07-11" where OrderNum =118
7、实现查询exam数据库中每⼀个经销商的订单号码(orders表中)与经销商公司所属市区的代码(ditributoirs表中)
lect orders.DistriNum,OrderNum,distributors.CityCode from orders,distributors where orders.DistriNum = distributors.DistriNum
8、实现查询exam数据库中公司在宣武区的所有经销商的数据内容
lect*from distributors where CityCode= (lect CityCode from city where CityName='宣武区')
9、实现查询exam数据库中订单号码为100对应的经销商的情况
lect*from distributors where DistriNum= (lect DistriNum from orders where OderNum =100)
五、设计数据库
⽤T-SQL语句实现默认值与列的结合:
默认值创建:create default 关键字 as XX
绑定默认值:sp_bindefault ‘默认值名’,’表名.[列名]’
重命名默认值:exec sp_rename ‘旧名称’,’新名称’
1.在exam数据库中新建名为moren的默认值,值为100,并把该默认值与orders表的OrderNum列结合(sp_bindefault)
create default moren as100
go
sp_bindefault 'moren','orders.[OrderNum]'
go
sp_bindefault 将新默认值绑定到列(尽管最好使⽤ DEFAULT 约束)或者绑定到别名数据类型。原有默认值将被覆盖。
2、新建SQL查询,输⼊Transact-SQL语句,解除(sp_unbindefault)上步中建⽴的默认值与列的结合,并删除(drop)该默认值。sp_unbindefault 'orders.[OrderNum]'
go
drop default moren
go
3、建⽴新的⽤户⾃定义的数据类型:bigint,允许NULL值,类型名称为newtype,
sp_addtype newtype,'bigint','null'
4、建⽴新的名为newrule的规则(create rule newrule as @values),并把这个规则与orders表的OrderNum列结合(sp_bindrule) create rule newrule as@value between100and150
go
sp_bindrule 'newrule','orders.[OrderNum]'
go
5、解除上步中建⽴的规则与列的结合,并删除该规则。操作成功后,保存该查询
sp_unbindrule 'orders.[OrderNum]'
go
drop rule newrule