SQL 实用基础代码
創建數據庫
CREATE DATABASE DB_Student --創建數據庫
ON PRIMARY
(
NAME=N'DB_Student', --創建數據庫.mdf文件
FILENAME=N'D:\database\db_Student.mdf',
SIZE=3072KB,
FILEGROWTH=1024KB
)
LOG
ON
(
NAME=N'DB_Studenta', --創建日志文件,不能重復mdf
FILENAME=N'D:\database\db_Student.ldf',
SIZE=1024KB,
FILEGROWTH=10%
)
GO
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
創建外鍵,B中存在外鍵,且外鍵是A主鍵,則應該先創建A,再創建B
bAId INT FOREIGN KEY(bAId) REFERENCES A(aId)
BACKUP DATABASE [hanson]
TO DISK = N'D:\database\db_hanson_20120719.bak'
WITH DESCRIPTION = N'12年7月19日的備份',
NAME = N'db_hanson 的備份',
SKIP , NOREWIND , NOUNLOAD , STATS = 10
GO
BACKUP DATABASE [hanson] --差異備份
TO DISK = N'D:\database\db_hanson_20120719.bak'
WITH DIFFERENTIAL,
DESCRIPTION = N'12年7月19日的備份',
NOFORMAT , NOINIT,
NAME = N'db_hanson 的差異備份',
SKIP , NOREWIND , NOUNLOAD , STATS = 10
GO
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
USE Homework
SELECT DISTINCT T.Name
FROM T
WHERE T.Name
NOT IN(SELECT T.Name FROM T WHERE T.fenshu<80)
1、查詢出所有數據中撥打長途號碼(對方號碼以0開頭)的總時長
2、查詢出本月通話總時長最多的前三個呼叫員的編號
3、查詢出本月撥打電話次數最多的前三個呼叫員的編號
SELECT SUM(DATEDIFF(second,Inquiry_Begin,Inquiry_End))
FROM Tel_Inquiry
WHERE Inquiry_Caller LIKE '0%'
SELECT TOP 3 Inquiryer_Id ,SUM(DATEDIFF(second,Inquiry_Begin,Inquiry_End))
FROM Tel_Inquiry
GROUP BY Inquiryer_Id
ORDER BY SUM(DATEDIFF(second,Inquiry_Begin,Inquiry_End))
DESC
SELECT TOP 3 Inquiryer_Id,COUNT(Inquiryer_Id) AS '撥打次數'
FROM Tel_Inquiry
GROUP BY Inquiryer_Id
ORDER BY COUNT(Inquiryer_Id)
DESC
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1、查詢20號部門中的員工信息
SELECT EMP.DEPTNO,DEPT.DNAME,EMP.EMPNO,EMP.ENAME,EMP.HIREDATE,EMP.JOB,EMP.MGR,EMP.SAL,EMP.COMM,DEPT.LOC
FROM EMP
LEFT JOIN DEPT
ON DEPT.DEPTNO=EMP.DEPTNO
WHERE EMP.DEPTNO=20
2、查找出名字以“MA”開頭的全部員工信息
SELECT EMP.DEPTNO,DEPT.DNAME,EMP.EMPNO,EMP.ENAME,EMP.HIREDATE,EMP.JOB,EMP.MGR,EMP.SAL,EMP.COMM,DEPT.LOC
FROM EMP
LEFT JOIN DEPT
ON DEPT.DEPTNO=EMP.DEPTNO
WHERE EMP.ENAME LIKE 'MA%'
3、按工種升序排列顯示全部員工的有關情況
SELECT EMP.DEPTNO,DEPT.DNAME,EMP.EMPNO,EMP.ENAME,EMP.HIREDATE,EMP.JOB,EMP.MGR,EMP.SAL,EMP.COMM,DEPT.LOC
FROM EMP
LEFT JOIN DEPT
ON DEPT.DEPTNO=EMP.DEPTNO
ORDER BY EMP.JOB
ASC
4、查詢統計各部門的員工數據
SELECT DEPT.DEPTNO,DEPT.DNAME,COUNT(*) AS '員工人數'
FROM EMP
LEFT JOIN DEPT
ON DEPT.DEPTNO=EMP.DEPTNO
GROUP BY DEPT.DEPTNO,DEPT.DNAME
5、查找出工資高于20號部門中所有員工的人員信息
SELECT EMP.DEPTNO,DEPT.DNAME,EMP.EMPNO,EMP.ENAME,EMP.HIREDATE,EMP.JOB,EMP.MGR,EMP.SAL,EMP.COMM,DEPT.LOC
FROM EMP
LEFT JOIN DEPT
ON DEPT.DEPTNO=EMP.DEPTNO
WHERE EMP.SAL>(SELECT MAX(EMP.SAL) FROM EMP WHERE EMP.DEPTNO=20)
6、為EMP表創建一個視圖emp10_view,要求只包括10號部門員工的有關信息。
CREATE VIEW MYVIEWS
AS
SELECT EMP.DEPTNO,DEPT.DNAME,EMP.EMPNO,EMP.ENAME,EMP.HIREDATE,EMP.JOB,EMP.MGR,EMP.SAL,EMP.COMM,DEPT.LOC
FROM EMP
LEFT JOIN DEPT
ON DEPT.DEPTNO=EMP.DEPTNO
WHERE DEPT.DEPTNO=10
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一張表dtTest里面有year,mouth,day三個字段,分別表示年月日,如何查找出今天之后的數據?
SELECT * FROM dtTest
WHERE GETDATE()<CONVERT(DATE,CONVERT(CHAR(4),Years)+'-'+CONVERT(CHAR(2),Mouths)+'-'+CONVERT(CHAR(2),Daies))
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
有一張學科分值表Score,里面有3個字段:語文,數學,英語。比如有1條記錄分別表示語文70分,數學80分,英語58分,請用一條sql語句查詢該表記錄并按以下條件顯示出來:(大于或等于80表示優秀,大于或等于60表示及格,小于60分表示不及格。)
顯示格式:
語文 數學 英語
及格 優秀 不及格
SELECT
CASE WHEN 語文>=80 THEN '優秀' WHEN 語文>=60 THEN '及格' ELSE '不及格' END '語文',
CASE WHEN 數學>=80 THEN '優秀' WHEN 數學>=60 THEN '及格' ELSE '不及格' END '數學',
CASE WHEN 英語>=80 THEN '優秀' WHEN 英語>=60 THEN '及格' ELSE '不及格' END '英語'
FROM Score
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
創建索引
CREATE CLUSTERED INDEX riqi_person on person(date)
在person表的date字段上面創建名為riqi_person的【聚集索引】
CREATE NONCLUSTERED INDEX riqi_person on person(date)
在person表的date字段上面創建名為riqi_person的【非聚集索引】
CREATE CLUSTERED INDEX date_person on person(date,id)
在person表的date,age字段上面創建名為riqi_person的【復合聚集索引】
CREATE NONCLUSTERED INDEX date_person on person(date,age)
在person表的date,age字段上面創建名為riqi_person的【復合非聚集索引】
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SQL編程示例 (1)
DECLARE @i INT --聲明變量
SET @i = 1
DECLARE @no VARCHAR(15)
SET @no='201200000001'
WHILE @i < 1000000
BEGIN
SET @i =@i +1
SET @no =cast(cast(@no as bigint) + 1 as varchar)
INSERT INTO StudentInfo
VALUES
(@no,'HANSON','male','302')
END
SQL編程示例 (2)
DECLARE @PhoneNumber CHAR(12)='15305535987'
DECLARE @AreaNum CHAR(4)
SET @AreaNum=SUBSTRING(@PhoneNumber,4,4);
IF(@AreaNum='0551')
SELECT '合肥' AS '地區'
ELSE IF(@AreaNum='0552')
SELECT'蚌埠' AS '地區'
ELSE IF(@AreaNum='0553')
SELECT '蕪湖' AS '地區'
ELSE
SELECT '其他' AS '地區'
SQL編程示例 (3)
DECLARE @i INT
SET @i = 0
WHILE @i < 10
BEGIN
SET @i =@i +1
IF @i=4
CONTINUE
ELSE IF @i=8
BREAK
ELSE
PRINT @i
END
事務處理 @@error
SELECT * FROM Account
BEGIN TRANSACTION
DECLARE @errorSum INT
SET @errorSum=0
UPDATE Account SET ABalance=ABalance-200
WHERE AName='李四'
SET @errorSum=@errorSum+@@ERROR
UPDATE Account SET ABalance=ABalance+1000
WHERE AName='張三'
SET @errorSum=@errorSum+@@ERROR
IF @errorSum<>0 --如果有錯誤
BEGIN
print '交易失敗'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
print '交易成功'
COMMIT TRANSACTION
END
GO
--顯示轉賬后的賬戶余額
SELECT * FROM Account
GO
事務處理
--try-catch捕獲并處理
BEGIN TRY
BEGIN TRANSACTION
UPDATE Account
SET ABalance=ABalance-200
WHERE AName='李四'
UPDATE Account
SET ABalance=ABalance+200
WHERE AName='張三'
COMMIT TRANSACTION
END TRY
BEGIN CATCH
rollback
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = '出現了錯誤,錯誤信息:'+ERROR_MESSAGE(),@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
GO
BEGIN TRANSACTION;
BEGIN TRY
--李四取出元
UPDATE Account SET Balance=Balance-200 --更新帳戶余額
WHERE Name=N'李四'
--張三存入元
UPDATE Account SET Balance=Balance+1000 --更新帳戶余額
WHERE Name=N'張三'
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() as ErrorState,
ERROR_PROCEDURE() as ErrorProcedure,
ERROR_LINE() as ErrorLine,
ERROR_MESSAGE() as ErrorMessage;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
GO
+++++++++++++++++++++++++++++++++++++++++
創建存儲過程
CREATE PROCEDURE avaday
@DAYS INT,
@ID INT
AS
BEGIN
SELECT
CASE WHEN StaffSex='female' AND (StaffUsed+@DAYS)<=5 THEN '批準'
WHEN StaffSex='male' AND (StaffUsed+@DAYS)<=2 THEN '批準'
ELSE '不批準' END 批復結果
FROM Vacation
WHERE StaffId=@ID
END
EXEC avaday @ID=101,@DAYS=1
--with 臨時表
WITH
S
AS
(
SELECT TOP 2 Inquiry_Caller,count(*) AS 電話次數
FROM Tel_Inquiry
GROUP BY Inquiry_Caller
ORDER BY count(Inquiry_Caller) DESC
)
SELECT TOP 1 *
FROM S
ORDER BY 電話次數
轉載于:https://www.cnblogs.com/yixuezi/archive/2012/07/24/2607208.html
總結
以上是生活随笔為你收集整理的SQL 实用基础代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: httpd-2.4.x 版本客户端访问控
- 下一篇: 宜阳县医保特殊疾病如何报销