赞
踩
当代软件开发离不开数据库的支持,而数据库又离不开SQL语句。SQL(Structured Query Language)是一种专门用于在关系型数据库中进行操作的语言。它包括一系列的基础语句,如SELECT、INSERT、UPDATE和DELETE等,这些语句是数据库中最基本也是最常用的语句。此外,SQL还包括一些高级语句,如JOIN、GROUP BY、HAVING、UNION等,这些语句可以帮助我们更高效地操作数据库。在数据库的设计、建模、管理和维护等环节中,都需要掌握SQL语句的基本知识。本文将介绍SQL语句的基础知识,包括各种基本语句的语法、用法以及常见的应用场景等。
我这里用这个表举例,这个表是Users表。下面的方法都用这个来列举示例:
CREATE DATABASE my_database;--创建数据库
- CREATE TABLE customers (--创建表
- Uid uniqueidentifier PRIMARY KEY,--id 主键
- UName NVARCHAR(50),--姓名
- Pwd NVARCHAR(50),--密码
- );
- -- Begin 分页查询
- declare ---用户参数
- @pageIndex int=1,---定义页码
- @pageSize int =2,---定义每页数量
- @startIndex int --查询参数
- set @startIndex=(@pageIndex -1)*@pageSize --计算开始位置
-
- select * from Users
- order by Uid
- offset @startIndex rows
- fetch next @pageSize
- row only
- -- End 分页查询
- Insert Users --表名
- (Uid,UName,Pwd) --字段
- Values
- ('77D4CBFE-71F6-4145-B28A-ADF5C7C9A098','哈哈哈','123')--数据
- Delete Users --表名
- where Uid = '77D4CBFE-71F6-4145-B28A-ADF5C7C9A098'--删除的条件,如果没有条件则全部删除
Drop Users--表名
- Update Users --表明
- set
- Pwd = '123456' --要修改的字段
- where Uid = '77D4CBFE-71F6-4145-B28A-ADF5C7C9AE12'--修改条件
- SELECT Uid, Count(UName) --必须要有聚合函数
- FROM Users --表名
- GROUP BY Uid --分组的字段
- HAVING Count(UName) > 0; --分组的条件。注意Having只能用于分组的语句;在使用HAVING子句时,务必小心,确保只选择和过滤您想要的结果
- select * --字段
- from Users --表明
- Order By Pwd Asc--排序的字段 Asc升序从小到大 Desc降序从大到小
- -- 普通连表
- select A.Uid,B.UName,B.Pwd,B.Age,B.Sex --查询的字段
- from Users A join Users_LianBiao B --查询的表和连接的表
- on A.Uid = B.Uid --连接条件
- -- 左连接连表
- select A.Uid,B.UName,B.Pwd,B.Age,B.Sex --查询的字段
- from Users A Left join Users_LianBiao B --查询的表和连接的表
- on A.Uid = B.Uid --连接条件
-
- -- 左连接(LEFT JOIN)会返回左表中的所有行和右表中匹配的行,如果右表中没有匹配的行,则返回NULL值。
- -- 右连接连表
- select A.Uid,B.UName,B.Pwd,B.Age,B.Sex --查询的字段
- from Users A Right join Users_LianBiao B --查询的表和连接的表
- on A.Uid = B.Uid --连接条件
-
- -- 右连接(RIGHT JOIN)则是左连接的反向操作,它会返回右表中的所有行和左表中匹配的行,如果左表中没有匹配的行,则返回NULL值。
- --SUM(): 计算指定列的总和。例如,SUM(column_name)将返回指定列中所有值的总和。
- select Sum(Age) --求和
- from Users_LianBiao --表名
- Group By Sex --分组的字段
- --AVG(): 计算指定列的平均值。例如,AVG(column_name)将返回指定列中所有值的平均值。
- select Avg(Age) --平均值
- from Users_LianBiao --表名
- Group By Sex --分组的字段
- --COUNT(): 计算指定列中的行数或非NULL值的数量。例如,COUNT(*)将返回表中的行数,COUNT(column_name)将返回指定列中的非NULL值的数量。
- select Count(Age) --计数
- from Users_LianBiao --表名
- Group By Sex --分组的字段
- --MAX(): 计算指定列中的最大值。例如,MAX(column_name)将返回指定列中的最大值。
- select Max(Age) --最大值
- from Users_LianBiao --表名
- Group By Sex --分组的字段
- --MIN(): 计算指定列中的最小值。例如,MIN(column_name)将返回指定列中的最小值。
- select Sum(Age) --最小值
- from Users_LianBiao --表名
- Group By Sex --分组的字段
- Create View aaa --创建一个名叫aaa的视图
- As
- select A.Uid,B.UName,B.Pwd,B.Age,B.Sex from Users A join Users_LianBiao B on A.Uid = B.Uid --连表查询,把查到的字段数据存到aaa视图里面相当于
-
- select * from aaa --查询视图得到的就是上面语句的结果
- --存储过程
- if exists(select * from sysobjects where name='vvv') --查看是否存在vvv
- drop proc vvv 存在的话删除
- go
- Create Proc vvv( --创建要给叫VVV的存储过程
- @a int, --声明一个参数 @a
- @u varchar(50) --声明一个参数@u 后面跟的是类型
- )
- As
- select * from Users_LianBiao where Age = @a or UName = @u --存储过程里面要执行的语句
-
- exec vvv '12','你好' --创建完成后可以执行这个存储过程 把参数传递过去
存储过程通常和事务一起书写,通常会在存储过程里开一个事务。
- --查询两个数据的性别,互换一下
- --声明两个变量存储
- Declare @sex1 nvarchar
- Declare @sex2 nvarchar
- select @sex1=sex from Users_LianBiao where UName = '马化腾' --赋值
- select @sex2=sex from Users_LianBiao where UName = '马斯克' --赋值
- --开启事务
- Begin Tran
- begin
- update Users_LianBiao set sex=@sex2 where UName = '马化腾'
- end
- if @@error=0 --判断
- begin
- print '第一个修改成功'
- update Users_LianBiao set sex=@sex1 where UName = '马斯克'
- if @@Error=0
- begin
- print '第二个修改成功'
- commit Tran --提交事务
- end
- else
- begin
- print '第二个修改失败'
- rollback Tran --事务回滚
- end
- end
- else
- begin
- print '第一个修改失败'
- rollback Tran --事务回滚
- end

- --触发器
- -- 创建一个名为trig_customers的触发器,当向Users_LianBiao表中插入新行时触发
- CREATE TRIGGER trig_customers
- ON Users_LianBiao
- AFTER INSERT
- AS
- BEGIN
- -- 在此处编写触发器的主体代码
- -- 示例代码:向Users表中插入一条新的记录
- INSERT Users (Uid,UName,Pwd) Values ('77D4CBFE-71F6-4145-B28A-ADF5C7C9A888', '张磊','456')
- END
- -- 字段 要修改的值 字段 修改后的值
- -- STUFF(PriceInfo, CHARINDEX('价格不一致', PriceInfo), 1, '价格变化')
- UPDATE JinDingDB..JinDingData
- SET PriceInfo = STUFF(PriceInfo, CHARINDEX('价格不一致', PriceInfo), 1, '价格变化')
- WHERE OTAName = 'DYCnHotelMD' and PriceInfo like '%价格不一致%'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。