歷史
有很多軟件公司開發了數據庫產品,其中微軟公司的數據庫產品命名為 SQL Server,也稱 MS SQL Server。
1989年 Ashton-Tate/Microsoft SQL Server 1.0 for OS/2 正式發布。
1996年,微軟發布了 SQL Server 6.5,作為對 SQL Server 6.0 的重要更新。
1998年12月,SQL Server 7.0 正式上市。
2000年8月,SQL Server 2000 發布。
DDL(Data Definition Language)(數據庫定義語言)
- 創建
- 創建數據庫
CREATE DATABASE 數據庫名;
- 創建數據庫
- 查詢
- 查看所有的數據庫
SELECT Name FROM Master..SysDatabases ORDER BY Name
- 查看所有的數據庫
- 刪除
- 刪除數據庫
DROP DATABASE 數據庫名;
- 刪除數據庫
- 使用
- 使用數據庫
use 數據庫名稱;
- 使用數據庫
操作表
- 創建
- 創建表
CREATE TABLE 表名 (
字段名 1 字段類型 1,
字段名 2 字段類型 2
); - 數據庫類型分類
- 創建表
分類 | 數據庫中的類型 | JAVA中對應類型 |
---|---|---|
整數 | bigint | long |
整數 | bit | boolean |
整數 | int(integer) | int(integer) |
整數 | tinyint | short |
小數 | float | double |
小數 | decimal | java.math.BigDecimal |
小數 | money | java.math.BigDecimal |
小數 | smallmoney | java.math.BigDecimal |
日期 | smalldatetime | 表示時間類型(只精確到分)java.sql.Timestamp |
日期 | date | 表示日期類型java.sql.Date |
日期 | datetime | 同時可以表示日期和時間類型(精確到毫秒)java.sql.Timestamp |
字符串 | char(m) | String |
字符串 | varchar(max) | String |
字符串 | (text) | String |
字符串 | varbinary(max) | String |
- 查詢:
- 查詢某個數據庫中所有的表名稱
SELECT Name FROM Master..SysDatabases ORDER BY Name - 查詢表結構
- 查詢某個數據庫中所有的表名稱
SELECT (case when a.colorder=1 then d.name else null end) 表名, ( d.name) 表名2,
a.colorder 字段序號,a.name 字段名,
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 標識,
(case when (SELECT count(*) FROM sysobjects
WHERE (name in (SELECT name FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))
AND (xtype = 'PK'))>0 then '√' else '' end) 主鍵,b.name 類型,a.length 占用字節數,
COLUMNPROPERTY(a.id,a.name,'PRECISION') as 長度,
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小數位數,(case when a.isnullable=1 then '√'else '' end) 允許空,
isnull(e.text,'') 默認值,isnull(g.[value], ' ') AS [說明]
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id
left join sys.extended_properties f on d.id=f.class and f.minor_id=0
--where b.name is not null
WHERE d.name='YxphoneDeal' --如果只查詢指定表,加上此條件 如果去掉則是查詢全部的
order by a.id,a.colorder
- 修改
- 修改表名
EXEC sp_rename '原有表名', '新表名'; - 添加一列
alter table 表名 add 列名 數據類型 not null--添加列 - 修改列名稱 類型
exec sp_rename '[表名].[列名]','[新列名]' -- 注意,單引號不可省略。 - 修改列屬性
alter table table_name alter column column_name column_type - 刪除列
alter table table_name drop column column_name - 添加主鍵
Alter table YXHIS..TBICXXDZ Add Constraint PK_TBICXXDZ Primary Key (CICID,CICKMW) --添加主鍵約束 PK_TBMZFYHZ 創建新的主鍵約束名稱 - 刪除主鍵
Alter table YXHIS..TBICXXDZ Drop CONSTRAINT PK_TBICXXDZ --刪除表主鍵約束(已定義主鍵名) PK_TBMZFYHZ 表創建中查看主鍵約束名稱
- 修改表名
DML(Data Manipulation Language)(數據操縱語言)
- 添加數據
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
除了數字類型,其他類型需要使用引號單引起來(SqlServer嚴格區分單雙引號)
- 刪除數據
delete from 表名 [where 條件] - 修改數據
update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];
DQL(Data Query Language)(數據查詢語言)
-
基礎字段
select
字段列表
from
表名列表
where
條件列表
group by
分組字段
having
分組之后的條件
order by
排序- 分頁
- 第一種方式:offset fetch next方式(SQL2012以上的版本才支持:推薦使用 )
select * from ArtistModels order by ArtistId offset 4 rows fetch next 5 rows only
--order by ArtistId offset 頁數 rows fetch next 條數 rows only -- - 第二種方式:top not in方式 (適應於數據庫2012以下的版本)
select top 3 * from ArtistModels
where ArtistId not in (select top 15 ArtistId from ArtistModels)
------where Id not in (select top 條數*頁數 ArtistId from ArtistModels)
- 第一種方式:offset fetch next方式(SQL2012以上的版本才支持:推薦使用 )
- 分頁
-
查詢運算符
- 基礎運算符
< 、> 、<= 、>= 、= 、<>、 BETWEEN...AND、 IN、 LIKE、 and 或 &&、or 或 ||、not 或 !
- 復雜運算符
符號 | 含義 |
---|---|
distinct | 去掉重復數據 |
isnull(CBZ3,'') | 如果CBZ3為null,結果返回''的值 |
CASE WHEN ISNULL(CTJYLSH,'')<> '' THEN CTJYLSH ELSE CJYLSH END | 如果CTJYLSH不為空,則為CTJYLSH,否則為CJYLSH |
isnull(CBZ3,''<>'' cbz3字段不為空
多表查詢
略(和MySql一樣)
SqlServer數據庫約束
約束種類
約束名 | 約束關鍵字 |
---|---|
主鍵 | primary key |
唯一 | unique |
非空 | not null |
外鍵 | foreign key |
默認值約束 | Default |
自增約束 | AUTO_INCREMENT |
檢查 | CHECK |
- 檢查約束
Check約束通過邏輯表達式來判斷數據的有效性,用來限制輸入一列或多列的值的范圍,在列中更新數據時,所要輸入的內容必須滿足Check約束的條件,否則將無法正確輸入。
SqlServer事物
和MySQL差不太多,都是默認自動提交。
不同點:默認隔離級別:MySql是可重復讀,SqlServer是讀已提交。