SQL SERVER 基本操作语句


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



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

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

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


Sql语句:
1、 create database database_name; --创建数据库
2、 use database_name; --引用数据库
3、 create table table_name(列名1 数据类型,,
  列名2 数据类型,…..
  列名n 数据类型); --创建表
4、 select * from 表名; --查看表内所有列的信息
  select 列名1,列名2 from 表名;
  select语句用于从表中选取数据。
5、 约束:not null
  Unique 唯一约束 --没有冗余数据
  Primary key –必须包含唯一的值,主键列不能包含null值
6、 drop table table_name; --删除表
7、 insert into 表名 values(值1,值2…); --值与列必须要一一对应
  insert into 表名 (列1,列2…)values (值1,值2…);
8、AS --为列名和表名别名
  Select 列名 as 新列名 from 表名;--列名别名
9、 where --条件语句
  select 列名 from表名 where列 (运算符)=‘值’;
10、单行注释 --
  多行注释 /*….*/
11、修改数据结构
  1)alter table 表名 alter column 列名 数据类型; --修改数据结构(修改列的属性)
  例:alter table 表名 alter column country varchar(250);
  alter table 表名 alter column country varchar(250) null;
  2)alter table 表名 add constraint 约束名 unique(列的约束);
  Alter table 表名 drop constraint 约束名;
  3)alter table 表名 add column 列名 数据类型;
  4)alter table 表名 drop column 列名;
12、数据的修改、更新
  Update 表名 set 列名=新值where 列名=某值;
13、 1)between…and…
  Select 列名from表名 where 列名 between 值1 and 值2;
  Select 列名from表名 where 列名 between ‘字符串1’ and ‘字符串2’;
  2)Not between…and…
14、 1)like --模糊查询
  仅和where搭配使用,通配符“%”仅和like连接使用
  Select 列名 from 表名 where 列名 like ‘n%’/ ’%n%’ / ’%n’
  2)Not like
15、 and or
  1)and和or运算符用于基于一个以上条件对记录进行过滤;
  2)and 和or 可在where子语句中把两个或多个条件结合在一起;
  3)若两个条件都成立,则and运算符显示一条记录;
  4)如果两个条件只要有一个成立,则or运算符显示一条记录;
  5)and 和or在sql语句中的位置不分先后顺序,查询结果皆一致;
  6)执行规则:先计算and运算符在计算or运算符;
16、in

  1)在一个集合里面,用()包含,查询的列放在括号里,用逗号隔开
  2)字符串类型加单引号;-- 允许在where子句中规定多个值
  3)不能跟匹配符连用;
  Select 列名 from表名where列名 in(值1,值2,….);
17、distinct --只支持单列
  Select distinct(列名)from 表名;
18、order by --排序 多个条件时,先满足第一列的条件
  1)用于根据指定的列对结果集进行排序
  2)默认升序对记录进行排序—asc
  3)降序—desc
  4)字母,数字都可以随意进行升降排序
  5)允许多个列的排序,但是排序优先级由左到右
19、top --规定要返回的记录的数目
  1)top 6 –前6
  2)top 6 desc –倒数6位
  3)top 50 percent --前半部分
  4)top50 percent desc—后半部分
20、delete --删除数据(删除表中的某行或所有行)
  --只能删除整行的数据,无法删除指定单元格数据。
  Delete from 表名 where 列名=值;
21、identity --自增长
  例:id int identity
  Id int identity(1000,1)
22、check约束
  --用于限制列中的值的范围
  Create table 表名 (姓名 VARCHAR (100) ,
  年龄 INT CHECK ( 年龄 >= 18 AND 年龄 <= 30 ), -- 这里不能用OR
  性别 CHAR(4) CHECK (性别 = '男' OR 性别 = '女') -- 这里不能用AND
  );
23、default 约束 --用于向列中插入默认值
  如果不再为具有default约束的列额外进行值输入的话,则自动填入默认值;反之,则填入所输入的值;
  例:CREATE TABLE INSERT_DEFAULT_EXAM_DATE
  (
  Id INT PRIMARY KEY IDENTITY ,
  姓名 VARCHAR(100) NOT NULL ,
  考试时间 DATE DEFAULT '2018-05-20'
  );
24、check和default约束的区别
  1)check约束强制只能对含此约束的列输入约束的值;
  2)default 约束比较自由,如果输入了值,则生效;如果(允许)不输入值,则使用设定的默认值并将其插入表中的列。
25、null --必须使用is null和 is not null
  1)select * from 表名 where 列名 is null;(列名为空时,查看信息)
  2) select * 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 列名=值;
28、1)max()--返回一列中的最大值
  Select max(列名)from 表名;
  例:select max(QTP得分)as QTP最高得分 from 表 where 班级=‘一班’;
  2)Min()--返回一列中的最小值
  Select min(列名)from 表名;
  例:select name from 表 where SQL得分= (select min(SQL得分)from 表);
  3)Sum() --返回数值列的总数 只针对于数字类型进行求和
  Select sum(列名) from 表名;
  4)Avg()
  注:max和min也可用于文本列,以获得按字母顺序排列的最高或最低值。
29、count --计数 返回匹配指定条件的行数
  1)Select count(*)from 表名;--返回表中的记录数
  例1:select count(*) from 表; --查询表中所有记录
  2)Select count(列名)from 表名; --返回指定列的值的数目
  例2:select count(name) as 一班的学生数from 表 where 班级=‘一班’;
  -- 对指定列进行计数
  3)select count (distinct 列名)from 表名; --返回指定列的不同值的数目
  例3: select count(distinct 班级)from 表;--显示不重复的记录
  唯一键—distinct
30、len –长度 --返回文本字段中值的长度 length
  Select len(列名) from 表名;
  例1:select len(考点)as 考点的长度 from 表 where name =‘张三’;
31、无关联性多表查询
  1)select * from (SELECT 姓名, QTP得分 FROM 软件测试考试分数表_重制版
  WHERE QTP得分 > (SELECT AVG(QTP得分) FROM 软件测试考试分数表_重制版)) AS 临时表1,
  (SELECT AVG(QTP得分) AS QTP考试平均分 FROM 软件测试考试分数表_重制版) AS 临时表2;
  2)SELECT 临时表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 * from (select name,QTP得分 from 表名 where QTP得分 >(select avg(QTP得分) as 平均分 from表)) as table1,(select avg(QTP得分)as 平均分 from表) as   table2;
32、1)foreign 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)增加单个外键约束
  例1:alter table 学生表 add foreign key (student_class_id)references 班级表(class_id);
  3)增加多个约束
  例2:alter table 学生表 add constraint 约束名 foreign key(student-class_id) references 班级表(class_id);
  4)撤销约束
  例3:alter table 学生表 drop constraint 约束名;
  例4:select * from 班级表,学生表 where 班级表.class_id=学生表.student_class_id;
33、group by
  --合计函数(例sum,max,min,len)常常需要添加group by语句
  1)单个列进行分组
  Select 列名,合计函数(列名)from 表名 where…group by 列名;
  例:select 商场专柜,sum(销售价格) as 情人节当天的香水总销售额
  From 表名 where 销售时间=‘2018-02-14’group by 商场专柜 order by 情人节当天的香水总销售额 desc;
  2)多个列进行分组
  例: select 销售时间,商场专柜,sum(销售价格)as 专柜当天的香水总销售额 from 表
  Group by 销售时间,商场专柜
  Order by 销售时间 desc,商场专柜 asc;

34、1)group by ….having…
  例1:select 商场专柜,sum(销售价格) as 总销售额 from 表
  Group by 商场专柜 having sum(销售价格)>600 order by 总销售额 desc;
  例2:select 商场专柜,销售时间,sum(销售价格) as 销售总额 from 表
  Group by 商场专柜,销售时间 having sum(销售价格)>500 order by 销售总额 desc;
  2)where也可以在group by 中使用
  例1:Select 商场专柜,sum(销售价格) from 表 where 销售时间=‘ 2018-02-14’ group by 商场专柜 having 销售价格>500
  Order by sum(销售价格)desc;
  例2:select top 1 香水编号_外键,count(香水编号_外键)from 表 where 销售时间=‘2018-02-14’ group by香水编号_外键 order by count(香水编号_外键)desc;
  例3:select 商场专柜,销售时间,count(香水编号_外键) as 香水销量 where 销售时间 in(‘2018-02-14’,‘2018-03-14’) and len(香水编号_外键)<=4 from 表 Group by   销售时间 order by count(香水编号_外键) desc;
35、连接
  1)内连接—(inner )join --通过主键和外键进行连接
  --表之间有匹配数据(主键和外键的匹配)就查询到,没有匹配数据就查询不到,找出两表中关联相等的行。
  select * from 表1 inner join 表2 on 表1.A=表2.A;
  例1:select 商场专柜,销售时间,所属品牌,香水名称,销售价格 from 香水信息表 inner join 商场专柜销售情况表 on 香水信息表.香水编号_外键=商场专柜销售情况表.香水  编  号_外键 order by 商场专柜 asc,销售时间 desc;
  2)左连接 --left join
  --从左表那里返回所有的行,即使在右表中没有匹配的行
  Select 列名 from 表1 left join 表2 on 表1.A =表2.A and 其他条件;
  例:select * from香水信息表 left join商场专柜销售情况表 on 香水信息表.香水编号_外键=商场专柜销售情况表.香水编号_外键 (显示香水信息表所有记录)
  3)右连接 --right join
  --右表返回所有行,即使在左表中没有匹配的行
  Select 列名 from表1 right join 表2 on 表1.A=表2.A.
  例:select * from香水信息表 right join商场专柜销售情况表 on 香水信息表.香水编号_外键=商场专柜销售情况表.香水编号_外键 (显示商场专柜销售情况表所有记录)

猜你喜欢

转载自www.cnblogs.com/liucheng0827/p/9178771.html