返回列表 发帖

MSSQL的SQL语句

笺注:这是在 使用Navicat远程管理MSSQL2014 的基础上进行的。


使用Navicat的查询编辑器:
图片1.png
2022-4-12 21:27



创建库data2:
CREATE DATABASE data2;

在库data2中创建表t_1
Use data2;

create table t_1 (id int primary key not null identity (1,1),name nvarchar(20),sex nvarchar(2),age tinyint,grade nvarchar(5),address varchar(50),chinese numeric(12,2),math decimal(12,3))

图片2.png
2022-4-12 21:27



效果:
图片3.png
2022-4-12 21:28



data2.dbo.t_1的表结构:
图片4.png
2022-4-12 21:29

注释:字段id为主键、标识符列,会自动增长。



######

使用Navicat往表data2.dbo.t_1中一次性插入多条记录:(字段id为主键、标识符列,会自动增长,不用写)

Use data2;

INSERT INTO t_1 (name,sex,age,grade,address,chinese,math) VALUES ('张大白','男',12,'三年一班','广州市',120,99.5);

INSERT INTO t_1 (name,sex,age,grade,address,chinese,math) VALUES ('张三','男',13,'三年一班','广州市',108,77);

INSERT INTO t_1 (name,sex,age,grade,address,chinese,math) VALUES ('李小芳','女',14,'三年二班','佛山市',-60,48.5);

图片5.png
2022-4-12 21:30




在查询编辑器里输出表data2.dbo.t_1中的所有记录:
Use data2;
SELECT * FROM t_1;
图片6.png
2022-4-12 21:30




只显示前面两条记录:
Use data2;
select TOP 2 * FROM t_1;
图片7.png
2022-4-12 21:31




查询中可以只显示某几个字段:
Use data2;
select TOP 2 name,grade,math FROM t_1;
图片8.png
2022-4-12 21:31




再插入一条记录:
Use data2;
INSERT INTO t_1 (name,age,grade,address,chinese,math) VALUES ('zhuohua',13,'三年二班','佛山市',60,78.5);

SELECT * FROM t_1;
图片9.png
2022-4-12 21:32

注释:字段sex不写,且没有默认值,那么就是空的(Null)



只显示字段sex的值为空的记录:
Use data2;
select * from t_1 where sex is Null;
图片10.png
2022-4-12 21:33




只显示字段sex的值不为空的记录:
Use data2;
select * from t_1 where sex is not Null;
图片11.png
2022-4-12 21:33




查询结果中更改字段的内容:(数据实际上没有更改)
Use data2;
select name,grade,'语文成绩优秀' as chinese from t_1 where chinese >= 100;
图片12.png
2022-4-12 21:34

注释:把字段chinese的内容显示为“语文成绩优秀”。



查询结果中更改字段的标题:(标题实际上没有更改)
Use data2;
select name as 姓名,grade as 班级,'语文成绩优秀' as chinese from t_1 where chinese >= 100;
图片13.png
2022-4-12 21:34

注释:在这种情况下,不可以再更改字段chinese的标题了。



截取字段name左边的两个字符:
Use data2;
select left(name,2) as 姓名左边的两个字符 from t_1;
图片14.png
2022-4-12 21:35




截取字段name右边的三个字符:
Use data2;
select right(name,3) as 姓名右边的三个字符,grade from t_1;
图片15.png
2022-4-12 21:36




从字段name的第2个字符开始截取3个字符:
Use data2;
select substring(name,2,3) as 新值,grade as 班级 from t_1;
图片16.png
2022-4-12 21:36






排序:
Use data2;
SELECT * FROM t_1 ORDER BY chinese;
图片17.png
2022-4-12 21:38

注释: ORDER BY  排序,默认是升序



Use data2;
SELECT * FROM t_1 ORDER BY chinese DESC;
图片18.png
2022-4-12 21:38

注释: ORDER BY  排序; DESC  降序



Use data2;
SELECT * FROM t_1 ORDER BY age,math;
图片19.png
2022-4-12 21:39

注释:先以字段age进行升序;如果字段age的值一样,就以字段math进行升序。



Use data2;
SELECT * FROM t_1 ORDER BY age,math DESC;
图片20.png
2022-4-12 21:40

注释:先以字段age进行升序;当字段age的值一样时,以字段math进行降序。



Use data2;
SELECT * FROM t_1 ORDER BY age DESC,math DESC;
图片21.png
2022-4-12 21:40

注释:先以字段age进行降序;当字段age的值一样时,以字段math进行降序。





等于的写法:
Use data2;
SELECT name,grade FROM t_1 WHERE grade = '三年二班';
图片22.png
2022-4-12 21:41

注释:字符型要使用英文单引号。



Use data2;
SELECT id,name,grade,math FROM t_1 WHERE id = 1 OR id = 3;
图片23.png
2022-4-12 21:41

注释:
OR 或者
整型不要使用英文单引号。



Use data2;
SELECT name,grade,math AS 数学,chinese AS 语文 FROM t_1 WHERE math = 78.5 OR chinese = -60;
图片24.png
2022-4-12 21:42

注释:数值型不要使用英文单引号。



Use data2;
SELECT name,grade,math AS 数学,chinese AS 语文 FROM t_1 WHERE math IN (48.5,78.5) OR chinese = 120;
图片25.png
2022-4-12 21:43

注释: IN 多个等于



Use data2;
SELECT name,grade,math AS 数学,chinese AS 语文 FROM t_1 WHERE name IN ('李小芳','zhuohua') OR chinese = 120;
图片26.png
2022-4-12 21:43




Use data2;
SELECT name,grade,math AS 数学,chinese AS 语文 FROM t_1 WHERE name IN ('李小芳','zhuohua') AND chinese = 60;
图片27.png
2022-4-12 21:44

注释: AND 而且





不等于的写法:
Use data2;
SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name != '张大白';

SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name <> '张大白';
图片28.png
2022-4-12 21:45




Use data2;
SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name != 'Zhuohua';
图片29.png
2022-4-12 21:46

注释:
关键字不区分英文字母大小写。



Use data2;
SELECT name AS Name,grade AS 班级 FROM t_1 WHERE name NOT IN ('李小芳','Zhuohua');
图片30.png
2022-4-12 21:46

注释:
NOT IN 多个不等于
关键字不区分英文字母大小写。





数值大小比较的写法:(大于)
Use data2;
SELECT name,grade,chinese AS 语文 FROM t_1 WHERE chinese > 108;
图片31.png
2022-4-12 21:48




数值大小比较的写法:(大于或等于)
Use data2;
SELECT name,grade,chinese AS 语文 FROM t_1 WHERE chinese >= 108;
图片32.png
2022-4-12 21:48




数值大小比较的写法:(小于)
Use data2;
SELECT name,grade,chinese AS 语文 FROM t_1 WHERE chinese < 108;
图片33.png
2022-4-12 21:49




数值大小比较的写法:(小于或等于)
Use data2;
SELECT name,grade,chinese AS 语文 FROM t_1 WHERE chinese <= 108;
图片34.png
2022-4-12 21:49




数值大小比较的写法:(在某个范围之间)
Use data2;
SELECT name,grade,chinese AS 语文 FROM t_1 WHERE chinese BETWEEN 60 AND 130;
图片35.png
2022-4-12 21:49






LIKE语句:
Use data2;
SELECT name,grade,chinese FROM t_1 WHERE name LIKE '张_白';
图片36.png
2022-4-12 21:52

注释:一个下划线代表一个字符。


Use data2;
SELECT name,grade,chinese FROM t_1 WHERE name LIKE '张__';
图片37.png
2022-4-12 21:53

注释:两个下划线代表两个字符,以此类推。


Use data2;
SELECT name,grade,chinese FROM t_1 WHERE name LIKE '%Zhuo%';
图片38.png
2022-4-12 21:53

注释:
% 代表任意多个字符。
关键字不区分英文字母大小写。



Use data2;
SELECT name,age FROM t_1 WHERE age LIKE '1[2-3]';
图片39.png
2022-4-12 21:54

注释:第一个字符必须为1,第二个数字在2至3的范围内。


Use data2;
SELECT name,age FROM t_1 WHERE age LIKE '1[^2-3]';
图片40.png
2022-4-12 21:54

注释:第一个字符必须为1,第二个数字不在2至3的范围内。


Use data2;
SELECT name,age FROM t_1 WHERE name LIKE 'Zhuohu[a-d]';
图片41.png
2022-4-12 21:55

注释:
前面的字符必须为Zhuohu,最后一个字符在a至d的范围内。
关键字不区分英文字母大小写。


Use data2;
SELECT name,age FROM t_1 WHERE name LIKE 'Zhuohu[^b-d]';
图片42.png
2022-4-12 21:55

注释:
前面的字符必须为Zhuohu,最后一个字符不在b至d的范围内。
关键字不区分英文字母大小写。





查询中使用加法:(数据实际上没有更改)
Use data2;
SELECT name,grade,chinese+math AS 总成绩 FROM t_1;
图片43.png
2022-4-12 21:57



查询中使用减法:(数据实际上没有更改)
Use data2;
SELECT name,grade,chinese-math AS 新值 FROM t_1;
图片44.png
2022-4-12 21:57



查询中使用乘法:(数据实际上没有更改)
Use data2;
SELECT name,grade,chinese*2.5 AS 新值 FROM t_1;
图片45.png
2022-4-12 21:58



查询中使用除法:(数据实际上没有更改)
Use data2;
SELECT name,grade,chinese/2 AS 新值 FROM t_1;
图片46.png
2022-4-12 21:58



查询中使用加法与乘法:(数据实际上没有更改)
Use data2;
SELECT name,grade,chinese + math * 2 AS 总成绩 FROM t_1;
图片47.png
2022-4-12 21:58

注释:默认是先乘除,后加减。


查询中使用加法与乘法:(加上小括号)
Use data2;
SELECT name,grade,(chinese + math) * 2 AS 总成绩 FROM t_1;
图片48.png
2022-4-12 21:59

注释:可以在小括号里再使用小括号。





聚合函数有5个,分别是COUNT()、SUM()、AVG()、MAX()、MIN()。

求数量:
Use data2;
SELECT COUNT(*) AS 记录数量 FROM t_1;
图片49.png
2022-4-12 22:14



求和:
Use data2;
SELECT SUM(math) AS 数学总成绩 FROM t_1;
图片50.png
2022-4-12 22:14



求平均值:
Use data2;
SELECT AVG(math) AS 数学平均成绩 FROM t_1;
图片51.png
2022-4-12 22:14



求最大值:
Use data2;
SELECT MAX(math) AS 数学最高成绩 FROM t_1;
图片52.png
2022-4-12 22:15



求最小值:
Use data2;
SELECT MIN(math) AS 数学最低成绩 FROM t_1;
图片53.png
2022-4-12 22:15




按字段grade进行分组后,再求字段math的最小值:
Use data2;
SELECT grade,MIN(math) AS 各班级的数学最低成绩 FROM t_1 GROUP BY grade;
图片54.png
2022-4-12 22:16



按字段grade进行分组后,再求字段math的最小值,最后以字段math的最小值进行排序:
Use data2;
SELECT grade,MIN(math) AS 各班级的数学最低成绩 FROM t_1 GROUP BY grade ORDER BY MIN(math) DESC;
图片55.png
2022-4-12 22:16



分组再加条件:( group by + having )
Use data2;
select grade as 最低数学成绩大于或等于70的班级,min(math) AS 各班级的数学最低成绩 from t_1 group by grade having min(math) >= 70;
图片56.png
2022-4-12 22:17



分组再加条件:( group by + having )
Use data2;
select grade,min(math) as 三年二班的数学最低成绩 from t_1 group by grade having grade = '三年二班';
图片57.png
2022-4-12 22:17






更改记录:(假如匹配条件,会一次性更改多条记录)
Use data2;
UPDATE t_1 SET sex = '男' WHERE name = 'Zhuohua';

SELECT name,sex FROM t_1;
图片58.png
2022-4-12 22:17

注释:关键字不区分英文字母大小写。


更改记录:(可以一次性更改同一条记录中的多个字段的内容)
Use data2;
UPDATE t_1 SET chinese = 66,sex = '男' WHERE name LIKE '李%';

SELECT * FROM t_1 WHERE name like '李__';
图片59.png
2022-4-12 22:18




给字段的值加大:(数据实际上更改了)
Use data2;
UPDATE t_1 SET math = math + 10 WHERE grade = '三年二班';

SELECT * FROM t_1 WHERE grade = '三年二班';
图片60.png
2022-4-12 22:19




给字段的值减小:(数据实际上更改了)
Use data2;
UPDATE t_1 SET math = math - 10.5 WHERE grade = '三年二班';

SELECT * FROM t_1 WHERE grade = '三年二班';
图片61.png
2022-4-12 22:19




可以使用乘法:(数据实际上更改了)
Use data2;
UPDATE t_1 SET math = math * 2 WHERE grade = '三年二班';

SELECT * FROM t_1 WHERE grade = '三年二班';
图片62.png
2022-4-12 22:19




也可以使用除法:(数据实际上更改了)
Use data2;
UPDATE t_1 SET math = math / 2 WHERE grade = '三年二班';

SELECT * FROM t_1 WHERE grade = '三年二班';
图片63.png
2022-4-12 22:20






删除记录:(假如匹配条件,会一次性删除多条记录)
Use data2;
DELETE FROM t_1 WHERE chinese = 66;

SELECT * FROM t_1;
图片64.png
2022-4-12 22:21




删除记录:
Use data2;
DELETE FROM t_1 WHERE address IN ('广州市','珠海市');

SELECT * FROM t_1;
图片65.png
2022-4-12 22:21




删除记录:
Use data2;
DELETE FROM t_1 WHERE name like '李__' or name like 'Zhuo%';

SELECT * FROM t_1;
图片66.png
2022-4-12 22:22

注释:关键字不区分英文字母大小写。





######

清空指定的表中的所有数据:(字段“id”会从1重新开始)
Use data2;
TRUNCATE TABLE t_1;

删除指定的表:
Use data2;
DROP TABLE t_1;

删除指定的库:
DROP DATABASE data2;



MSSQL的字段类型:
  1. int  整型  可以存储 -21亿 到 21亿 之间的整数

  2. smallint  整型  可以存储 -32768 到 32767 之间的整数

  3. tinyint  整型  可以存储 0 到 255 之间的整数



  4. datetime  日期时间型  格式为 yyyy-mm-dd hh:mm:ss.000



  5. float  数值型  可以存储15个有效位数,可以有小数,正负都可以的

  6. decimal(p, s)  数值型  p指的是有效位数(最小为1,最大为38)  s指的是小数位数( 0 <= s < p )  整数位数为p-s  ,正负都可以的

  7. numeric(p, s)  数值型  p指的是有效位数(最小为1,最大为38)  s指的是小数位数( 0 <= s < p )  整数位数为p-s  ,正负都可以的



  8. nvarchar  字符型  可以存储4000个任意字符

  9. varchar  字符型  可以存储8000个任意字符

  10. ntext  字符型  可以存储将近10亿个任意字符

  11. text  字符型  可以存储将近20亿个任意字符
复制代码




相关文章:
MSSQL的SQL语句(日期时间)
MSSQL的SQL语句(多表交叉查询)
MSSQL2008R2的数据库份的创建、分离、附加、删除

Zabbix5.0.12_调用Python3脚本监控Windows下的MSSQL

MySQL的SQL语句

返回列表