记录日常用到的SQL语句写法及用法数据库
SQL server数据库设计
基础用法部分:ide
1.添加字段函数
ALTER table [TableName] add [字段名称] 字段类型 ; ALTER table [sale_plan] add addr_no nvarchar(50) null ;
2. 删除字段工具
--删除 "Person" 表中的 "Birthday" 列 ALTER TABLE Person DROP COLUMN Birthday ;
3. 更改字段类型spa
ALTER TABLE Persons ALTER COLUMN Name nvarchar(50)
4. 建立表设计
CREATE TABLE Persons ( Id_P int IDENTITY(1,1) NOT NULL, --主键自增 LastName varchar(255) NOT NULL, --不为空 FirstName varchar(255), Address varchar(255), City varchar(255) )
5. 插入数据3d
--语法 --INSERT INTO 表名称 VALUES (值1, 值2,....) --INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
6. 更新字段的值带有单引号时 ' 的处理方式 code
update tableA columns1 = 'M''s ABC' where id = 1 ; -- columns1的值在数据库中显示为: M's ABC
7. 查询出一个表的数据插入到另一张表server
select * into destTbl from srcTbl ; insert into destTbl(fld1, fld2) select fld1, 5 from srcTbl ; --以上两句都是将 srcTbl 的数据插入到 destTbl,但两句又有区别的: --第一句(select into from)要求目标表(destTbl)不存在,由于在插入时会自动建立。 --第二句(insert into select from)要求目标表(destTbl)存在,因为目标表已经存在,因此咱们除了插入源表(srcTbl)的字段外,还能够插入常量,如例中的:5。
8. 不肯定字段查询和更新
1 select * from where 1=1 ; 2 3 update Table set columu1=column1 ... where ... ;
9.SQL Server 分页;
//若搜索则重新生成rownum (当前生成的rownum不能做为where后面的条件)
SELECT T.* FORM( select ROW_NUMBER() OVER(ORDER BY A.createDate asc ) AS sortNum,A.* from TableA where 1=1) T where T.sortNum> 10 and T.sortNum <=11;
10. SQL Server 插入长文本;
注意:SQL自己是没有限制长度的,插入数据后,使用select 查询出来,直接复制vnarchar(max)字段,是复制不全的,须要导出到*.csv文件中才能查看到完整的值;
ALTER TABLE WriteBackDataLog ALTER COLUMN Payload varchar(MAX);
以下图,copy不出完整payload字段的值,save results as 可将完整的数据导出来!
11. 添加主键:
alter table Scrap_Info add id numeric(18,0) identity(1,1)
12. SQL Server Management Studio 修改表字段顺序
在 Microsoft SQL Server Management Studio 中:
a). 工具->选项->Designers->表设计器和数据库设计器->将“阻止保存要求从新建立表的更改”的选项的勾去掉。
b). 右键单击你要更改的数据表,点选“设计”,而后在表设计器中用鼠标拖动各列的位置,最后保存便可。
经常使用部分:
1.查询当前时间: select GETDATE() ;
2.查询非表字段写法:
select columns1, columns2, '' as otherColumns , 123 as tempColumns from Table ;
3. distinct 用法,distinct 必须用在select 后面的第一个位置, distinct后面出现的字段也会去重(columnsA的值相同,columnsB不一样会做为结果分别查出来 );
select distinct columnsA , columnsB from Table ;
4.字段为空 ISNULL()函数的使用
--查询出姓名为空的记录 select * from Person where ISNULL(name,'') ='' ;
5. case when
6.having 在 SQL 中增长 HAVING 子句缘由是,WHERE 关键字没法与合计函数一块儿使用。
--查找订单总金额少于 2000 的客户 SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000
7.left join
左连接,作表所有显示,无论右表有没有匹配项; 左表的一条记录,好比右表有2条知足on的匹配条件,就会出现2条记录。
select tableA.*,tableB.addr tableA left join tableB on tableA.addrID=tableB.addrID where tableA.id=1;
(tableA为学生表,tableB为地址表,tableA中的addrID在tableB里有两个相同的addrID,则查询结果就会出现一个学生对应两个地址,出现两条查询结果)
8. inner join
若是表结果以下: inner join 第二表中on的条件中有两条匹配项,查询结果就会出现两条记录;注意不能join后使用group by 来统计数量,这个统计出来的数据是错误的。
以下:若是先join 再统计,显然统计错误;应该先统计出来后,再匹配过滤 select name,sum(quality) from Lw_T1 group by name ;
9. SQL拼接字段的值