1)DQL 数据查询语言
Select 列 From 表名 where 条件
2)DML 数据操纵语言 Insert 插入 insert into 表名 (列,列,...) values (对应的值,对应的值)
Update 更新 update 表名 set 列名=值, 列名=值 where 条件
Delete 删除 delete from 表名 where 条件
?
3)DDL 数据定义语言 创建数据库及其对象 Create/Alter/Drop Database/Table/View/Proc/Index
?
4)DCL 数据控制语言 用于授予或回收访问数据库某种特权,对数据实行监视等 commit 提交 rollback 回滚 grant 授权
为什么创建新的数据库,要选择master?
master:系统数据库,它记录了SQL Server系统的所有系统级信息,还记录了所有其他数据库的存在,数据库文件的位置,SQL Server的初始化信息。
使用脚本创建数据库
use master go
create database 数据库名 on primary (
--主要数据文件的设置 name= filename size filegrowth ) log on ( --日志文件的设置 name filename size filegrowth ) go
1.表信息准备
产口信息表:标识列,int 编号 varchar(50) 名称 nvarchar(50) 产品类型 TypeId int 价格 decimal(18,2) 数量 int
产品类型表: 编号 TypeId int 名称 nvarchar(20) 2.脚本创建表:
同一个数据库下,不能有两张表同名
use 数据库名 go
create table 表名 ( -------- 列名 类型类型 长度 是否为空 标识列 主键 默认值,约束 ,列与列之间以逗号隔开 )
1.直接在原来的脚本基础上进行修改
先把脚本代码进行修改,再删除原来的表,然后再执行创建表的脚本代码
这种方式,一般情况都不采用,后果很严重。除非表里数据不重要或是空表,可以使用上面这种方式。
2.alter table 进行修改
1)添加一列 : alter table 表名 add 列名 数据类型 是否为空
2)删除一列: alter table 表名 drop column 列名
3)修改列:一般不要修改列名,在设计时,定义好就不要改了。 修改的是数据类型,是否为空
alter table 表名 alter column 列名 类型 是否为空
1.在创建表的过程中创建约束 unique 主键约束 外键约束 unique约束(唯一约束) check约束 default约束 default(‘‘) primary key foreign key references 主表名(主键列名)
2.在创建表完成后再创建约束
alter table 表名 add constraint 约束名 primary key (列名) / foreign key(列名) references 主表(列名)/ unique (列名)/ check(逻辑表达式) default(缺省值) for 列名
对表的操作:插入、更新、删除
1.单条数据插入
--1) insert (into) 表名(列名,列名....) values (值,值....) --2) insert into 表名(列名,列名....) select 值,值....
2.多条插入 1) insert into 表名(TypeName) values (‘工具类1‘),(‘工具类2‘),(‘工具类3‘),(‘工具类4‘) 2) union 去重 union all 允许重复 union all效率比union高 insert Test(MName,Age) select ‘fff‘,21 union select ‘fff‘,21
3.克隆表数据
--1) 目标表在数据库已经存在 insert into Test(MName) ---目标表 select TypeName from ProductType --源表
--2)目标表之前数据库中不存在,执行操作时自动创建的 select TypeName into Test2 --目标表 from ProductType --源表
1.更新数据
--更新数据 update 几乎不会不用where条件 --主键不可以修改 --如果不加where条件,会把整张表的数据都修改了
update Test set MName=‘ssss‘,Age=30 where Id=5 (and | or) 条件
2.删除数据
--数据删除 :只是删除数据,表还在; 连同表一起删除 --1)删除数据 delete from Table 不加条件,会删除整个表数据,几乎都要加where条件 标识列 值还是接着删除前的值而自增,而不是从初始值开始 --delete语句会造成标识列的值不连续 delete from Test where Id = 20 --如果我们想删除数据,让标识列的值恢复到初始值,怎么办? truncate table Test --表数据清空,恢复到初始化,标识列也恢复 --表面上看,delete from Test 效果一样. --truncate效率比delete from Test高.delete每删除一条数据,都会在日志里记录.truncate不会记录日志,不激活触发器,drop truncate 是即时操作,不能rollback,delete update insert 事务中,可以恢复. --慎用truncate 一旦删除,不能恢复.
1.查询所有数据
select * from UserInfos
2.查询表的部分数据
select UserId,UserName,Age from UserInfos where 条件
3.列命别名
为什么需要命别名 ---解决需要显示中文列名
--给列命别名 --列名 as 别名 列名 别名 别名=列名 select UserId as 用户编号,UserName 用户名,年龄= Age from UserInfos
4.排序
--主键,默认就有排序功能 从小到大 --升序 asc --降序:从大到小 desc --不管是否有条件,还是分组,order by 永远放在最后 select UserId,UserName,Age from UserInfos order by Age,UserId
模糊查询:select UserName,Age from 表名 where UserName like ....
查询:完整查询和模糊查询
like SQL 提供4种匹配模式:
% 0个或多个
2._ 匹配单个字符
3.[] 范围匹配 括号中所有字符中的一个
4.[^] 不在括号中所有字符之内的单个字符
1.select from where 子句 条件 -- 给定范围 --1) 比较运算符 > < >= <= <> --2)in (2,3,4) not in (2,3,4) 不在这个范围之内 --3) between and 推荐 等价于 >= and <= 2.前面多少条、百比比 top n/percent
聚合函数:对一组值执行计算并返回单一的值。
经常与select语句中group by结合使用。
五种聚合函数:count 记录个数 sum 求和 avg 求平均 max 最大值 min 最小值
连接查询之内连接
原文:https://www.cnblogs.com/wxhao/p/13624856.html