高級SQL運用

来源:http://www.cnblogs.com/yangsongxiao/archive/2016/08/19/5787960.html
-Advertisement-
Play Games

一:什麼是資料庫設計? 資料庫設計就是將資料庫中的數據實體以及這些數據實體之間的關係,進行規範和結構化的過程. 二:為什麼要實施資料庫設計? 1:良好的資料庫設計可以有效的解決數據冗餘的問題 2:效率高 3:便於進一步擴展 4:使得應用程式開發變得容易 三:設計資料庫的步驟 第一步 需求分析: 分析 ...


:什麼是資料庫設計?

資料庫設計就是將資料庫中的數據實體以及這些數據實體之間的關係,進行規範和結構化的過程.

:為什麼要實施資料庫設計?

1:良好的資料庫設計可以有效的解決數據冗餘的問題

2:效率高

3:便於進一步擴展

4:使得應用程式開發變得容易

:設計資料庫的步驟

第一步    需求分析:  分析客戶的業務和數據處理需求(收集信息,標識實體,標識每個實體需要存儲的詳細信息,標識實體間的關係)

第二步    概要設計:  繪製E-R,用於與客戶或團隊成員的交流

第三步    詳細設計:  E-R圖轉換成多張表,進行邏輯設計,應用資料庫設計的三大範式進行審核,選擇具體的資料庫然後建庫建表建約束,創建完成開始編寫代碼,開發前端應用程式.

:繪製E-R

  (1) 什麼是實體?

      實體是指現實世界中具有區分其他事物的特征或屬性並與其他實體有聯繫的實體(實體一般是名詞)

      嚴格來說,實體是指表中一行特定的數據,也常常把表稱為一個實體

  (2)什麼是屬性?

      屬性可以理解為實體的特征,屬性對應表中的列

  (3)什麼是聯繫?

      聯繫是兩個或多個實體之間的關聯關係(一般是動詞)

  (4)什麼是映射基數?

      映射基數是表示通過聯繫與該實體關聯的其他實體的個數,具體有 一對一 ,  一對多,  多對一,  多對多.

  (5)什麼是關係實體圖?

      E-R圖以圖形的方式將資料庫的整個邏輯結構表示出來.     矩形表示實體集;橢圓表示屬性;菱形表示聯繫集;

       直線用來連接屬性和實體集,也用來聯繫實體集和聯繫集.

 

例如,酒店管理系統中E-R:

 

 

:繪製資料庫模型圖

例如:酒店管理系統資料庫模型圖

 

 

 

:數據規範化

規範設計

第一範式

第一範式的目標是確保每列的原子性,如果每列都是不可再分的最小單元(也稱為最小的原子單元),則滿足第一範式

第二範式:

如果一個關係滿足第一範式,並且除主鍵以外的其他列,都依賴於該主建,則滿足第二範式,第二範式要求一張表只描述一件事情

第三範式:

如果一個關係滿足第二範式,並且除了主鍵以外的其他列都不傳遞依賴於主鍵列,則滿足第三範式

 

:第二範式是其他列都依賴於主鍵列但是沒有說明是直接依賴還是間接依賴,也就是直接依賴和間接依賴均可,但第三範式明確指出只能是直接依賴,如果出現間接依賴的情況,要單獨創建一張表出來

 

:規範化和性能的關係

為了滿足某種商業目標,資料庫性能比規範資料庫更重要

具體策略和方法:

(1):通過在給定的表中添加額外欄位,以大量減少需要從中搜索信息所需要的時間

(2):通過在給定的表中插入計算列(比如成績總分),以方便查詢

在資料庫規範時,要綜合考慮資料庫性能.

 

 

 

 

 

 

:創建資料庫

創建一個數據文件和一個日誌文件(MySchool)

create database MySchool
on primary      --預設屬於primary主文件組,可省略
(
--數據文件的具體描述

name = 'MySchool_data'    --主資料庫文件的邏輯名稱
filename = 'D:\project\MySchool_data.mdf', --主資料庫文件的物理名稱
size = 5MB,     --主資料庫文件的初始大小
maxsize = 100MB,     --主資料庫文件增長的最大值
filegrowth = 15%     --主數據文件的增長率

)
log on
(
--日誌文件的具體描述,各參數含義同上

name = 'MySchool_log',    --主資料庫文件的邏輯名稱
filename = 'D:\project\MySchool_data.ldf', --主資料庫文件的物理名稱
size=2MB,     --主資料庫文件的初始大小
filegrowth = 1MB    --主數據文件的增長速度

)
go

 

創建多個數據文件和多個日誌文件(employees)
create database employees
on primary
(
--主資料庫文件的具體描述
name='employee1',
filename='D:\project\employee1.mdf',
size=10,
filegrowth=10%
),
(
--次要資料庫文件的具體描述
name='employee2',
filename='D:\project\employee2.mdf',
size=20,
maxsize=100,
filegrowth=1
)           
log on
(
--日誌文件1的具體描述
name='employeelog1',
filename='D:\project\employee1_log.ldf',
size=10,
maxsize=50,
filegrowth=1
),
(
--日誌文件2的描述
name='employeelog2',
filename='D:\project\empolyee2_log.ldf',
size=10,
maxsize=50,
filegrowth=1
)
go

 

 

:刪除資料庫
usr master
if exists(select * from sysdatabases where name='....')
drop database ......

 

 

:創建和刪除表

use MySchool    --Myschool中創建表
go

create table Student
(
StudentNo int not null.   --學號,int 類型,不允許為空
LoginPwd nvarchar(50) not null,  --密碼 nvarchar類型,不允許為空
StudentName nvarchar(50) not null, --名字,nvarchar類型,步允許為空
Sex bit not null,   --性別,取值01
Email nvarchar(20)   --郵箱,可為空
)
go

刪除表
use MySchool
go
if exists(select * from sysobjects where naem='Student')
drop table Student
  
                                                                                                                                                                                                                                                                                                                                                                                                   
:創建和刪除約束
主鍵約束(Primary Key Constraint)
非空約束(Not Null)
唯一約束(Unique Constaraint)
檢查約束(Check Constaraint)
預設約束(Default Constaraint)
外建約束(Foreign Key Constarint):用於在兩表之間建立關係,需要指定引用主表的哪一列

alter table 表名
add constraint 約束名  約束類型  具體的約束說明

:
--添加主鍵約束
alter table Student
add constraint PK_StudentNo Primary Key(StudentNo)

--添加唯一約束
alter table student
add constraint UQ_IdentityCard unique(IdentityCard)

--添加預設約束
alter table Student
add constraint DF_Address default('地址不詳') for address

--添加檢查約束
alter table Student
add constraint CK_BornDate checke(BornDate>='1980-01-01')

--添加外鍵約束(Result是從表,Student是主表)
alter table Result
add constraint FK_StudentNo
foreign key(StudentNo) references Student(StudentNo)
go


刪除約束
alter table 表名
drop constraint 約束名

:刪除學生表中的預設約束
alter tablte Student
drop constraint DF_Address


怎樣向已存在數據的表中添加約束
alter table Employee with nocheck ( whit nocheck不向已存在的數據約束)
add constraint

向已存在的數據表中插入一列
alter table 表名
add 列名 數據類型  null

 

 

在資料庫中用SQL語句創建文件夾(:E盤創建一個project文件夾)

exec sp_configure 'show advanced option',1

go

reconfigure

go

exec sp_configure 'xp_cmdshell',1

go

reconfigure

go

exec xp_cmdshell 'mkdir D:\project'

 

 

 

 

 

 

使用變數 數據類型轉換 邏輯控制語句(begin ...end; case...end; if...else; while)

:變數

變數分為局部變數和全局變數  (全局變數是系統自定的,不可手動給值的,若想自己定義全局變數可考慮創建全局臨時表!)

局部變數的定義:  declare @變數名  數據類型    (局部變數只能用於同一批處理當中!!!!!!!)

全局變數: @@

@@error        最後一個T-SQL語句錯誤的錯誤號

@@identity     最後一次插入的標識值

@@rowcount   受上一個SQL語句影響的行數

@@servicename   該電腦上SQl伺服器的名稱

@@version    SQL Server的版本信息

@@transcount   當前連接打開的事務數

@@timeticks    當前電腦上每刻度的微秒數

@@max_connections 可以創建的,同時連接的最大數目

@@language     當前使用的語言的名稱

 :給變數賦值  (set  seklect)

setselect的區別

1:set不支持多個變數賦值,select支持

2:表達式返回多個值時,set出錯,select返回最後一條數據

3:表達式未返回任何值時,set賦值為null(沒有) select 保持不變

 

:輸出語句

print @變數名 或

select @變數名

一般從資料庫中查找數據後賦值使用select賦值方法

:數據類型轉換

隱式轉換: 類型相同或相相容,自動轉換

顯式轉換: 類型不同,可用convert 函數  cast 函數

相同點: 都用於某種數據類型的表達式轉換為另一種數據類型

不同點: 在轉換日期的時候,convert可以轉化為指定的格式

cast (變數名 as 數據類型)

convert(數據類型, 變數名)

:邏輯控制語句

流程式控制制語句  begin....end  

通常使用在if判斷和while迴圈中,相當於C#中的 {}

分支結構   if..else 

     case ...end(多重選擇)

eg:

  select 成績=case

        when 條件一  then 結果一

        when 條件二  then 結果二

        else 其他結果(可省略)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Message: 定義: public final class Message implements Parcelable Message類是個final類,就是說不能被繼承,同時Message類實現了Parcelable介面,我們知道android提供了一種新的類型:Parcel。本類被用作封裝數 ...
  • if (iOS8) { NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIAppli ...
  • 下麵直接貼代碼 1. 將GB2312轉化為中文,如BAFAC2DCB2B7→胡蘿蔔,兩個位元組合成一個文字 2.將中文轉化為GB2312,並且結果以byte[]形式返回,如胡蘿蔔→new byte[]{BA FA C2 DC B2 B7},一個字被分為兩個位元組 3.將十六進位的byte[]原封不動的轉 ...
  • 我們在平常開發過程中,在設計數據的時候,經常碰到數據類型選擇的問題,為了更快,更合適地選擇正確的數據類型,所以在這裡做個總結。 轉自:http://www.cnblogs.com/mcgrady/p/5776255.html ...
  • fvdwtfv18yy0m 士大夫士大夫 撒發順豐 select name,DATATYPE_STRING,VALUE_STRING from v$sql_bind_capture where sql_id='fvdwtfv18yy0m'; SELECT TABLE_NAME,COLUMN_NAME ...
  • 接下來說說返回的RowLogo Content列,例子中返回了三個列。這些列包含了數據操作的“有效工作負載(Playload)”記錄。根據不同操作類型有效負載的內容也是不同的,但是它必須包含足夠的信息,能讓相應的數據操作在恢復時能被REDO和UNDO。對於每一個INSERT而言,它包含了插入行的所有 ...
  • 在metalink上看到一個腳本(get_locked_objects_rpt.sql),非常不錯,如下所示 /*----------------------------------------------------------------------------+ | MODULE: get_l... ...
  • 昨天,有個朋友對公司內部使用的一個MySQL實例開啟binlog,但是在啟動的過程中失敗了(他也沒提,為何會失敗),在啟動失敗後,他刪除了ibdata1和ib_logfile,後來,能正常啟動了,但所有的表通過show tables能看到,但是select的過程中卻報“Table doesn't e ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...