SQLSERVER常用查询语句

83 阅读7分钟

--根据一个表替换另一个表字段 UPDATE TMFT_LOTSWAFER SET TMFT_LOTSWAFER.WaferID = [AWTEMP-01].BinNo FROM [AWTEMP-01] WHERE TMFT_LOTSWAFER.WaferID = [AWTEMP-01].SheetNo

--截取一个字段的特定字段串并修改 UPDATE TWHS_WAREHOUSE_EPI SET WaferID = REPLACE(WaferID, SUBSTRING(WaferID,2,3), 'MZ5') WHERE WaferID IN (SELECT temp1 FROM dbo.awtemptable)

--在查询数据某个列数据位前加字符 UPDATE TMFT_LOTSWAFER SET TMFT_LOTSWAFER.WaferID = t1.xx FROM (SELECT 'H'+WaferID xx,WaferID FROM dbo.TMFT_LOTSWAFER WHERE LotNo = 'B0XXXF23GC0321') t1 WHERE TMFT_LOTSWAFER.WaferID = t1.WaferID


--加序列号取序列号最大的那个值 SELECT ROW_NUMBER() OVER(PARTITION BY WaferID ORDER BY FormNo DESC) AS num,* FROM tblProductOrderWafer WHERE WaferID IN ( 'D4E9071122', 'D4E6222736' )

SELECT MAX(FormNo),WaferID FROM tblProductOrderWafer WHERE WaferID IN ( 'D4E9071122', 'D4E6222736' ) GROUP BY WaferID

--对标列的操作

一、增加列:

1、alter table tableName add columnName varchar(30)

2、ALTER TABLE dbo.doc_exa ADD column_b VARCHAR(20) NULL, column_c INT NULL ;

二、修改列类型:

alter table tableName alter column columnName varchar(4000)

三、修改列的名称:

1、EXEC sp_rename 'tableName.column1' , 'column2' (把表名为tableName的column1列名修改为column2

下面的示例将TerritoryID表中的Sales.SalesTerritory列重命名为TerrID。

USE AdventureWorks2012;

GO EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';

GO

2、删除列

alter table tableName drop column columnName

3、指定表中某列默认数据

ALTER TABLE dbo.doc_exz ADD CONSTRAINT col_b_def DEFAULT 50 FOR column_b ;


1.获取“-”前面的字符串: SUBSTRING( FBILLNO ,1 , CHARINDEX('-',FBILLNO)-1 )

2.获取“-”后面的字符串:

SUBSTRING(FBILLNO , CHARINDEX('-',FBILLNO)+1 , len(FBILLNO)-charindex('-',FBILLNO) )

1.增加字段 ---alter table 表名 add 字段名 type not null SQL语句:ALTER TABLE crms_volunteer_group_member Add crms_withdraw Bit

2.修改字段类型(长度) --alter table 表名 alter column 字段名 type not null SQL语句:ALTER TABLE [dbo].[pos_ecrsetup] ALTER COLUMN [ecr_ipaddr] nvarchar(24)

3.修改数据库字段为主键 ALTER TABLE 表名 ADD Constraint PK_表名 Primary key(字段名)

一、增 1、 insert 插入单行数据; insert into Students (姓名,性别,出生日期) values ('朋朋','男','1980/6/15'); 2、 insert select 将现有的表中数据插入已有新表; insert into tongxunlu ('姓名','地址','电子邮件')select name,address,email from Students; 3、 select into语句将现有表中的数据添加到新建表中; select name,address,email into tongxunlu from strdents; 4、 union关键字合并数据进行插入多行 insert Students (姓名,性别,出生日期) select '开心朋朋','男','1980/6/15' union(union表示下一行) select '蓝色小明','男','19**//'

二、删 1、delete删除表中某些数据 delete from <表名> [where <删除条件>] 2、truncate table 删除整个表的数据 truncate table <表名>

三、改 update tongxunlu set 年龄=18 where 姓名='小名'

四、查 1、普通查询 select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]]

1).查询所有数据行和列 例:select * from a 说明:查询a表中所有行和列

2).查询部分行列–条件查询 例:select i,j,k from a where f=5 说明:查询表a中f=5的所有行,并显示i,j,k3列

3).在查询中使用as更改列名 例:select name as 姓名 from a where xingbie=‘男’ 说明:查询a表中性别为男的所有行,显示name列,并将name列改名为(姓名)显示

4).查询空行 例:select name from a where email is null 说明:查询表a中email为空的所有行,并显示name列;SQL语句中用is null或者is not null来判断是否为空行

5).在查询中使用常量 例:select name ‘唐山’ as 地址 from a 说明:查询表a,显示name列,并添加地址列,其列值都为’唐山’

6).查询返回限制行数(关键字:top percent) 例1:select top 6 name from a 说明:查询表a,显示列name的前6行,top为关键字 例2:select top 60 percent name from a 说明:查询表a,显示列name的60%,percent为关键字

7).查询排序(关键字:order by , asc , desc)     例:select name       from a       where chengji>=60       order by desc 说明:查询表中chengji大于等于60的所有行,并按降序显示name列;默认为asc升序

2.模糊查询 1).使用like进行模糊查询 注意:like运算副只用语字符串,所以仅与char和varchar数据类型联合使用 例:select * from a where name like ‘赵%’ 说明:查询显示表a中,name字段第一个字为赵的记录

2).使用between在某个范围内进行查询 例:select * from a where nianling between 18 and 20 说明:查询显示表a中nianling在18到20之间的记录

3).使用in在列举值内进行查询 例:select name from a where address in (‘北京’,‘上海’,‘唐山’) 说明:查询表a中address值为北京或者上海或者唐山的记录,显示name字段

3.分组查询 1).使用group by进行分组查询 例:select studentID as 学员编号, AVG(score) as 平均成绩 (注释:这里的score是列名)       from score (注释:这里的score是表名)       group by studentID 说明:在表score中查询,按strdentID字段分组,显示strdentID字段和score字段的平均值;select语句中只允许被分组的列和为每个分组返回的一个值的表达试,例如用一个列名作为参数的聚合函数

2).使用having子句进行分组筛选 例:select studentID as 学员编号, AVG(score) as 平均成绩 (注释:这里的score是列名)   from score (注释:这里的score是表名)   group by studentID   having count(score)>1 说明:接上面例子,显示分组后count(score)>1的行,由于where只能在没有分组时使用,分组后只能使用having来限制条件。

4.多表联接查询 1).内联接 ①在where子句中指定联接条件     例:select a.name,b.chengji       from a,b       where a.name=b.name 说明:查询表a和表b中name字段相等的记录,并显示表a中的name字段和表b中的chengji字段 ②在from子句中使用join…on      例:select a.name,b.chengji        from a inner join b        on (a.name=b.name) 说明:查询表a和表b中name字段相等的记录,并显示表a中的name字段和表b中的chengji字段 2).外联接 ①左外联接查询      例:select s.name,c.courseID,c.score        from strdents as s        left outer join score as c        on s.scode=c.strdentID 说明:在strdents表和score表中查询满足on条件的行,条件为score表的strdentID与strdents表中的sconde相同 ②右外联接查询       例:select s.name,c.courseID,c.score        from strdents as s        right outer join score as c        on s.scode=c.strdentID 说明:在strdents表和score表中查询满足on条件的行,条件为strdents表中的sconde与score表的strdentID相同

5.存储写法

--写法(无参):

USE [Test] --[Test]使用的数据来源(数据库名) GO /****** Object: StoredProcedure [dbo].[PR_ShowData] Script Date: 2022/11/12 13:58:38 ******/ --[dbo].[PR_ShowData]新建存储过程,[dbo].[PR_ShowData]是存储过程名 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

ALTER PROCEDURE [dbo].[PR_ShowData] --修改存储过程,[dbo].[PR_ShowData]是存储过程名 AS BEGIN

 declare @FLAG VARCHAR(50)		--如果需要变量的话,则是用此方法定义变量,类型根据需要自定义

--将D表中条件为P01=0的P02值查出来赋值给变量@FLAG SELECT @FLAG=P02 from D where P01 = '0'

--判断变量值,执行判断条件里面的SQL语句,这里if里面必须要写开头的begin与结束的end
 if (@FLAG=0)        --如果变量值为0,就删除A,B,C三个表里的数据,否则就插入数据
	begin
		delete A
		delete B
		delete C
	end

insert into A (字段A,字段B,.....)VALUES(数据1,数据2,.....) insert into B (字段A,字段B,.....)VALUES(数据1,数据2,.....) insert into C (字段A,字段B,.....)VALUES(数据1,数据2,.....) END

6.Function写法

USE SQL_SYSTEM GO CREATE FUNCTION DEMO(@XINGMING NVARCHAR2(5)) RETURN INT AS BEGIN DECLARE @GONGHAO INT SET @GONGHAO = (SELECT y.gonghao from tableA ) RETURN @GONGHAO END GO