--創建數據庫
USE yuju
CREATE database YuJu
on primary
(
??? name='YuJu',
??? filename='B:\ceshi數據庫\YuJu.mdf',
??? maxsize=1024mb,
??? filegrowth=10%
)
log on
(
??? name='YuJu_log',
??? filename='B:\ceshi數據庫\YuJu.ldf',
??? size=10mb,
??? maxsize=1024mb,
??? filegrowth=10mb
)
--??????????????????????????????????????????????????????????
DROP database YuJu
--
CREATE table Teacher(
?? TId int identity(1,1) primary key,
?? TName nvarchar(10),
?? TAge int
)
----
SELECT * FROM Teacher
DELETE FROM Teacher
--
INSERT INTO Teacher(TName,TAge) VALUES('王書峰',44)
----插入自增列
set IDENTITY_INSERT Teacher on
INSERT INTO Teacher(TId,TName,TAge) VALUES(2,'王書峰',44)
SET IDENTITY_INSERT Teacher off
--同時插入多行(union會自動除去重復行)union all不會
INSERT INTO Teacher
SELECT 'a',22 UNION
SELECT 'b',33 UNION
SELECT 'a',22 UNION
SELECT 'b',33 UNION
SELECT 'c',44
--union all
INSERT INTO Teacher
SELECT 'a',22 UNION ALL
SELECT 'b',33 UNION ALL
SELECT 'a',22 UNION ALL
SELECT 'b',33 UNION ALL
SELECT 'c',44
-----復制到新的表
SELECT * into guo FROM Teacher
---修改表列:
ALTER table Teacher alter column TName varchar(50)
--添加非空約束:
ALTER table Teacher alter column TName varchar(50) not null
---
ALTER table Teacher drop column TName
---增加一列
ALTER table Teacher add Sex nvarchar(10) not null
----加N,保證編輯器編輯不會放生亂碼;
INSERT INTO Teacher VALUES(N'王書峰',44)
----sql邏輯運算符高低:not>and>or,c#也一樣||的優先級最低;
a>10 and a<15 or a='' and(not(a=34))
----truncate 性能快的多,原因是不記錄到日志中去。
---添加外鍵:
ALTER table Teacher add constraint pk_Teacher primary key(TId)
---添加唯一約束:
ALTER table Teacher add constraint uq_Teacher_Id unique(TId)
--默認約束:
ALTER table Teacher add constraint df_Teacher_TName default('男') for TName
--檢查約束:
ALTER table Teacher add constraint ck_Teacher_TName check(TName like'%hh%')
--添加外鍵:
ALTER table tt add constraint fk_Teacher_tt foreign key(TTId) references Teacher(TId)
--刪除外鍵
ALTER table? tt drop constraint fk_Teacher_tt
--刪除多個鍵名
ALTER table? tt drop constraint fk_Teacher_tt,ck_Teacher_TName
--添加多個鍵名:
ALTER table Teacher
add constraint name1 unique(TId),
add constraint name12 check(TId>=0)
--若想修改鍵的話,先刪除原來的鍵再添加新的鍵
--添加級聯:
ALTER table tt add constraint fk_Teacher_tt foreign key(TTId) references Teacher(TId) on delete cascade
--添加非空約束:
ALTER table Teacher alter column TName varchar(50) not null
--重命名的兩中方式;
SELECT TId as 'T','TT'=TId from Teacher
--長度為3;
select LEN('郭澤峰')
----索引:
--查看索引信息
sp_helpindex emp
--創建索引
create index idxempid on emp(id)
--創建非聚集索引
create nonclustered index idxempid on emp(id)
--創建具體索引
create clustered index idxempid on emp(id)--cluster代表聚集
?
--刪除索引
drop index emp.idxmpid
--按書籍編號查詢,創建聚集索引
create clustered index idxsjid on 書籍(書籍編號)
--查詢索引信息
sp_helpindex 書籍
--刪除索引
drop index 書籍.idxsjid
--使用全文索引
--查詢跟windows相關的書
Select * from 書籍where 書籍名稱like '%windows%'
--查詢SQL SERVER 是否安裝全文索引,-安裝,-沒安裝
select fulltextserviceproperty ('isfulltextinstalled')
--查看數據庫是否能定義全文索引,1-有,0-沒有
select databaseproperty('練習','isfulltExtenabled')
--啟動數據庫全文索引功能
exec sp_fulltext_database 'enable'
--刪除全文索引
drop fulltext index on 書籍
--刪除全文目錄
drop fulltext catalog ft
--創建全文目錄
create fulltext catalog ft as default
--創建全文索引
create fulltext index on 書籍(書籍名稱)key index pk_書籍--全文索引的關鍵詞有:contains? ,? freetext
----
--和[]和正則表達式中的一樣,只要包含a或b;
like '%[ab]%'?? like '%x[^ab]y%'
--轉義的話,sql中使用中括號
like '%[%]%'
--數據空中的null表示unknow,where a=null或a<>null;是不正確的;用is null,is not null
--null參與任何運算 結果都是null;
--數據庫必須是大寫的NULL,null當成了字符串;
--如果字段為NULL值得話,就替換成‘未填寫’
SELECT ISNULL(TName,'未填寫')
--排序中NUll被認為是最小的;
--orderby后面可以跟一個表達式;
order BY (f+f)/2
--order by 放于最后面,執行順序的話,也是最后執行,所以后面跟的內容沒太多限制,
--where 放于group by前面;先篩選后匯總
SELECT TID,COUNT(TID) from Teacher where TID>0 GROUP BY TID
----having是對于組進行篩選,比如每組人數<=10的除去;
SELECT TID,COUNT(TID) as allTea from Teacher HAVING COUNT(TID)>10
--但不能為having allTea>10,因為執行having時,as allTea還沒
--執行
----以前在這里吃了不少虧,走了許多彎路,只知道用hvaing
SELECT TID,COUNT(TID) from Teacher where TName LIKE '%gg%' GROUP BY TID
---返回多個結果集,第二個結果集是兩個匯總的;
USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance)
-----------------------------------------------------
2、 日期時間函數
select dateAdd(day, 3, getDate());--加天
select dateAdd(year, 3, getDate());--加年
select dateAdd(hour, 3, getDate());--加小時
--返回跨兩個指定日期的日期邊界數和時間邊界數
select dateDiff(day, '2011-06-20', getDate());
--相差秒數
select dateDiff(second, '2011-06-22 11:00:00', getDate());
--相差小時數
select dateDiff(hour, '2011-06-22 10:00:00', getDate());
select dateName(month, getDate());--當前月份
select dateName(minute, getDate());--當前分鐘
select dateName(weekday, getDate());--當前星期
select datePart(month, getDate());--當前月份
select datePart(weekday, getDate());--當前星期
select datePart(second, getDate());--當前秒數
select day(getDate());--返回當前日期天數
select day('2011-06-30');--返回當前日期天數
select month(getDate());--返回當前日期月份
select month('2011-11-10');
select year(getDate());--返回當前日期年份
select year('2010-11-10');
select getDate();--當前系統日期
select getUTCDate();--utc日期
-----數據庫元數據語句;
------------------------------------------返回列的名字:表名:Teacher;2指的是第二列;
select col_name(object_id('Teacher'), 2)
----返回列的長度:
select col_length('Teacher', col_name(object_id('Teacher'), 1))
-----返回列在在表中多的索引值(從0開始)
select columnProperty(object_id('Teacher'), 'TId', 'ColumnId')
---
select replace('abcedef', 'e', 'E');--替換字符串
---
select replace('abcedef', 'e', 'E');--替換字符串
select stuff('hello world', 3, 4, 'ABC');--指定位置替換字符串 [3:第三個,4:長度]
select replicate('abc#', 3);--重復字符串
select subString('abc', 1, 1), subString('abc', 1, 2), subString('hello Wrold', 7, 5);--截取字符串
select len('abc');--返回長度
select reverse('sqlServer');--反轉字符串
select left('leftString', 4);--取左邊字符串
select left('leftString', 7);
select right('leftString', 6);--取右邊字符串
select right('leftString', 3);
select lower('aBc'), lower('ABC');--小寫
select upper('aBc'), upper('abc');--大寫
--去掉左邊空格
select ltrim(' abc'), ltrim('# abc#'), ltrim('abc' );
--去掉右邊空格
select rtrim(' abc '), rtrim('# abc# '), rtrim('abc');
?
==================================================================
SELECT YEAR('2012-1-1')
SELECT DATEPART(YEAR,'2012-1-1')
------------------------------------------------------------------
語句順序:
from>where>group by>having>select>order by;
?
------------建立索引必然會排序,更新索引,因為只有排序才能實現快速的查找;使用各種算法;
視圖中不可以使用order by,除非使用top; 排序順序后用top就不報錯了;
-----索引視圖(在視圖上創建唯一聚集索引)就會保存數據,而不引用表中的數據;
?
begin transaction
? DECLARE @num int
? SET @num=0
? SELECT 1
? set @num=@num+@@error
? SELECT 2
? set @num=@num+@@error
if @num<>0
begin
? rollback transaction
? end
else
?? commit transaction
-------------------------------
比如insert語句,默認是自動提交事務,沒插入一條自動開啟事務,自動提交
當然,可以改為手動事務,
begin tran
?insert ...
rollback:這樣就回滾了;
-------------------------------
存儲過程優點:
1.執行速度更快;一次編譯;
2.允許模塊化程序設計,類似方法的復用;
3.提高系統安全性,防止sql注入;
4.減少網絡流量;
----
EXEC sp_databases :查看所有數據庫的信息;
EXEC sys.sp_helpdb 'PM' :查看指定數據庫的信息;
exec sp_renamedb 'PM','guo':給數據庫重命名;
----查看數據庫有多少張表和視圖:
USE EF
EXEC sys.sp_tables
----查看表的列
USE PM
EXEC sys.sp_columns 'AChengBenGuiJi'
--sp_開頭是系統的存儲過程;
--觸發器是表,所以比如同時刪除多行時,只執行一次觸發器;
游標不建議使用,性能非常的低下;
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
