SQL SERVER 基本操作语句

    技术2024-11-09  15

    Sql 是一种结构化的查询语言; Sql是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理‘关系型数据库’系统; Sql对大小写不敏感; Sql不是数据库,是行业标准,是结构化的查询语言

    Int Char(30)—字段中只能接受30个英文字母或15个中文 Varchar(30)

    1)经常变化的字段用varchar; 2)知道固定长度的用char; 3)尽量用varchar; 4)超过255字节的只能用varchar;

    数值:int类型(整数类型); 所有字符串都要用单引号;

    Sql语句:

    1create database database_name; --创建数据库 2use database_name; --引用数据库 3create table table_name(列名1 数据类型,,   列名2 数据类型,…..   列名n 数据类型); --创建表 4select * from 表名; --查看表内所有列的信息   select 列名1,列名2 from 表名;   select语句用于从表中选取数据。 5、 约束:not null   Unique 唯一约束 --没有冗余数据   Primary key –必须包含唯一的值,主键列不能包含null6drop table table_name; --删除表 7insert into 表名 values(值1,值2…); --值与列必须要一一对应   insert into 表名 (列1,列2…)values (1,值2); 8AS --为列名和表名别名   Select 列名 as 新列名 from 表名;--列名别名 9where --条件语句   select 列名 from表名 where列 (运算符)=‘值’; 10、单行注释 --   多行注释 /*….*/ 11、修改数据结构   1alter table 表名 alter column 列名 数据类型; --修改数据结构(修改列的属性)   例:alter table 表名 alter column country varchar250);   alter table 表名 alter column country varchar250null;   2alter table 表名 add constraint 约束名 unique(列的约束);   Alter table 表名 drop constraint 约束名;   3alter table 表名 add column 列名 数据类型;   4alter table 表名 drop column 列名; 12、数据的修改、更新   Update 表名 set 列名=新值where 列名=某值; 131betweenand…   Select 列名from表名 where 列名 between1 and2;   Select 列名from表名 where 列名 between ‘字符串1and ‘字符串2’;   2Not betweenand141like --模糊查询   仅和where搭配使用,通配符“%”仅和like连接使用   Select 列名 from 表名 where 列名 like ‘n%/%n%/%n’   2Not like 15and or   1andor运算符用于基于一个以上条件对记录进行过滤;   2andor 可在where子语句中把两个或多个条件结合在一起;   3)若两个条件都成立,则and运算符显示一条记录;   4)如果两个条件只要有一个成立,则or运算符显示一条记录;   5andorsql语句中的位置不分先后顺序,查询结果皆一致;   6)执行规则:先计算and运算符在计算or运算符; 16in   1)在一个集合里面,用()包含,查询的列放在括号里,用逗号隔开   2)字符串类型加单引号;-- 允许在where子句中规定多个值   3)不能跟匹配符连用;   Select 列名 from表名where列名 in(值1,值2,….; 17distinct --只支持单列   Select distinct(列名)from 表名; 18order by --排序 多个条件时,先满足第一列的条件   1)用于根据指定的列对结果集进行排序   2)默认升序对记录进行排序—asc   3)降序—desc   4)字母,数字都可以随意进行升降排序   5)允许多个列的排序,但是排序优先级由左到右 19top --规定要返回的记录的数目   1top 6 –前6   2top 6 desc –倒数6位   3top 50 percent --前半部分   4)top50 percent desc—后半部分 20delete --删除数据(删除表中的某行或所有行)   --只能删除整行的数据,无法删除指定单元格数据。   Delete from 表名 where 列名=值; 21identity --自增长   例:id int identity   Id int identity1000,122check约束   --用于限制列中的值的范围   Create table 表名 (姓名 VARCHAR (100) ,   年龄 INT CHECK ( 年龄 >= 18 AND 年龄 <= 30 ), -- 这里不能用OR   性别 CHAR(4) CHECK (性别 = '男' OR 性别 = '女') -- 这里不能用AND   ); 23default 约束 --用于向列中插入默认值   如果不再为具有default约束的列额外进行值输入的话,则自动填入默认值;反之,则填入所输入的值;   例:CREATE TABLE INSERT_DEFAULT_EXAM_DATE   (   Id INT PRIMARY KEY IDENTITY ,   姓名 VARCHAR(100) NOT NULL ,   考试时间 DATE DEFAULT '2018-05-20'   ); 24checkdefault约束的区别   1check约束强制只能对含此约束的列输入约束的值;   2default 约束比较自由,如果输入了值,则生效;如果(允许)不输入值,则使用设定的默认值并将其插入表中的列。 25null --必须使用is null和 is not null   1select * from 表名 where 列名 is null(列名为空时,查看信息)   2select * from 表名 where 列名 is not null;(列名不为空时,查看信息) 26、用于计算和计算的内建函数   1)sum   2)Avg --返回数值列的平均值/null值不包括在计算中   Select avg(列名)from 表名;   例:SELECT 姓名 FROM 软件测试考试分数表_重制版   WHERE QTP得分 > (SELECT AVG(QTP得分) FROM 软件测试考试分数表_重制版); 27、isnull --用于规定如何处理NULL值   例:select 姓名,(测试理论得分+isnull(sql得分,0+QTP得分+Selenium得分)as 各科考试总分 from 表名 where 列名=值; 281)max()--返回一列中的最大值   Select max(列名)from 表名;   例:select max(QTP得分)as QTP最高得分 fromwhere 班级=‘一班’;   2)Min()--返回一列中的最小值   Select min(列名)from 表名;   例:select name fromwhere SQL得分=select min(SQL得分)from 表);   3)Sum() --返回数值列的总数 只针对于数字类型进行求和   Select sum(列名) from 表名;   4)Avg()   注:max和min也可用于文本列,以获得按字母顺序排列的最高或最低值。 29、count --计数 返回匹配指定条件的行数   1Select count(*from 表名;--返回表中的记录数   例1select count(*from 表; --查询表中所有记录   2Select count(列名)from 表名; --返回指定列的值的数目   例2select count(name) as 一班的学生数fromwhere 班级=‘一班’;   -- 对指定列进行计数   3select count (distinct 列名)from 表名; --返回指定列的不同值的数目   例3select count(distinct 班级)from 表;--显示不重复的记录   唯一键—distinct 30、len –长度 --返回文本字段中值的长度 length   Select len(列名) from 表名;   例1select len(考点)as 考点的长度 fromwhere name =‘张三’; 31、无关联性多表查询   1select * from (SELECT 姓名, QTP得分 FROM 软件测试考试分数表_重制版   WHERE QTP得分 > (SELECT AVG(QTP得分) FROM 软件测试考试分数表_重制版)) AS 临时表1,   (SELECT AVG(QTP得分) AS QTP考试平均分 FROM 软件测试考试分数表_重制版) AS 临时表2;   2SELECT 临时表1.姓名, 临时表1.QTP得分, 临时表2.QTP考试平均分 FROM   (SELECT 姓名, QTP得分 FROM 软件测试考试分数表_重制版   WHERE QTP得分 > (SELECT AVG(QTP得分) FROM 软件测试考试分数表_重制版)) AS 临时表1,   (SELECT AVG(QTP得分) AS QTP考试平均分 FROM 软件测试考试分数表_重制版) AS 临时表2;   例1--查询学生姓名和qtp得分,并将qtp平均分显示出来   Select * fromselect name,QTP得分 from 表名 where QTP得分 >(select avg(QTP得分) as 平均分 from表)) as table1,(select avg(QTP得分)as 平均分 from表) as   table2; 321foreign Key (约束)references --可添加多个外键约束   --一个表中的foreign key指向另一个表中的primary key。   --外键只能连接你想连的那张表的主键(一般id为主键)   例:CREATE TABLE 班级表   (Class_Id INT PRIMARY KEY,   班级 VARCHAR(10) NOT NULL   );   CREATE TABLE 学生表   (Student_Id INT PRIMARY KEY,   姓名 VARCHAR(10),   Student_Class_Id INT FOREIGN KEY REFERENCES 班级表(Class_Id)   );   2)增加单个外键约束   例1alter table 学生表 add foreign key (student_class_id)references 班级表(class_id);   3)增加多个约束   例2alter table 学生表 add constraint 约束名 foreign key(student-class_id) references 班级表(class_id);   4)撤销约束   例3alter table 学生表 drop constraint 约束名;   例4select * from 班级表,学生表 where 班级表.class_id=学生表.student_class_id; 33group by   --合计函数(例sum,max,min,len)常常需要添加group by语句   1)单个列进行分组   Select 列名,合计函数(列名)from 表名 wheregroup by 列名;   例:select 商场专柜,sum(销售价格) as 情人节当天的香水总销售额   From 表名 where 销售时间=2018-02-14group by 商场专柜 order by 情人节当天的香水总销售额 desc;   2)多个列进行分组   例: select 销售时间,商场专柜,sum(销售价格)as 专柜当天的香水总销售额 from 表   Group by 销售时间,商场专柜   Order by 销售时间 desc,商场专柜 asc341group by.having…   例1select 商场专柜,sum(销售价格) as 总销售额 from 表   Group by 商场专柜 having sum(销售价格)>600 order by 总销售额 desc;   例2select 商场专柜,销售时间,sum(销售价格) as 销售总额 from 表   Group by 商场专柜,销售时间 having sum(销售价格)>500 order by 销售总额 desc;   2where也可以在group by 中使用   例1Select 商场专柜,sum(销售价格) fromwhere 销售时间=2018-02-14group by 商场专柜 having 销售价格>500   Order by sum(销售价格)desc;   例2select top 1 香水编号_外键,count(香水编号_外键)fromwhere 销售时间=2018-02-14group by香水编号_外键 order by count(香水编号_外键)desc;   例3select 商场专柜,销售时间,count(香水编号_外键) as 香水销量 where 销售时间 in(‘2018-02-14’,‘2018-03-14’) and len(香水编号_外键)<=4 fromGroup by   销售时间 order by count(香水编号_外键) desc35、连接   1)内连接—(innerjoin --通过主键和外键进行连接   --表之间有匹配数据(主键和外键的匹配)就查询到,没有匹配数据就查询不到,找出两表中关联相等的行。   select * from1 inner join2 on1.A=2.A;   例1select 商场专柜,销售时间,所属品牌,香水名称,销售价格 from 香水信息表 inner join 商场专柜销售情况表 on 香水信息表.香水编号_外键=商场专柜销售情况表.香水  编  号_外键 order by 商场专柜 asc,销售时间 desc;   2)左连接 --left join   --从左表那里返回所有的行,即使在右表中没有匹配的行   Select 列名 from1 left join2 on1.A =2.A and 其他条件;   例:select * from香水信息表 left join商场专柜销售情况表 on 香水信息表.香水编号_外键=商场专柜销售情况表.香水编号_外键 (显示香水信息表所有记录)   3)右连接 --right join   --右表返回所有行,即使在左表中没有匹配的行   Select 列名 from1 right join2 on1.A=2.A.   例:select * from香水信息表 right join商场专柜销售情况表 on 香水信息表.香水编号_外键=商场专柜销售情况表.香水编号_外键 (显示商场专柜销售情况表所有记录)
    Processed: 0.031, SQL: 9