SQL server基礎知識(表操作、數據約束、多錶鏈接查詢)

来源:http://www.cnblogs.com/xiao-zhang-blogs/archive/2016/11/18/6076154.html
-Advertisement-
Play Games

SQL server基礎知識 一、基礎知識 (1)、存儲結構:資料庫->表->數據 (2)、管理資料庫 增加:create database 資料庫名稱 刪除:drop database 資料庫名稱 查詢:select name from master..sysdatabases 修改:alter ...


SQL server基礎知識

一、基礎知識

  (1)、存儲結構:資料庫->表->數據

  (2)、管理資料庫

    增加:create database 資料庫名稱

    刪除:drop database 資料庫名稱

    查詢:select name from master..sysdatabases

    修改:alter database 資料庫名稱(在 sql server 中修改與資料庫關聯的文件和文件組。在資料庫中添加或刪除文件和文件組、更改資料庫或其文件和文件組的屬性)

  (3)、管理表

    選擇資料庫:use 資料庫

    增加:create table 表名(欄位1 欄位類型,欄位2 欄位類型,......);

    刪除:drop table 表名

    修改:

      添加欄位:alter table 表名 add 欄位名 欄位類型

      刪除欄位:alter table 表名 drop column 欄位名

      修改欄位類型:alter table 表名 alter column 欄位名 欄位類型

      修改欄位名稱:exec sp_rename '表.原欄位名稱','新欄位名稱','column'

      修改表的名稱:exec sp_rename '原表名稱','新表名稱'

    查詢:select name from sysobjects where xtype = 'u'

  (4)、管理數據

    增加數據:insert into 表(欄位1,欄位2,...) values (值1,值2,...)

    刪除數據:delete from 表名 where 條件

    修改數據:update 表名 set 欄位1=值1,欄位2=值2,... where 條件

    查詢數據:

      所有欄位:select * from 表

      指定欄位:select 欄位1,欄位2,... from 表

      指定別名:select 欄位1 as 別名1,欄位2 as 別名1,... from 表

      去重:select distinct 欄位 from 表

      條件查詢:

        邏輯條件:and(與)or(或)

          select * from 表 where ... and/or ...

        比較條件:>,<,>=,<=,=,!=,<>(不等於),between and

        判空條件:

          判斷null:is null/is not null

          判斷空字元串:='',!='',<>''

          模糊條件:like

            '%':替換任意個字元

            '_':替換一個字元

              select * from 表 where 欄位 like '%查詢字元%'

          分頁查詢:      

            @p_pagesize int,//頁面數量

            @p_currentPage int//當前頁

            declare @string varchar(3000)

            if(@p_currentPage=1)//第一頁

            begin

              set @string = 'Select top '+ cast(@p_pagesize as char(20)) + '* from 表名 where 條件

            end

            else//不是第一頁

            begin

              set  @string = 'Select top '+cast(@p_pagesize as varchar(20))+'* from 表名where 條件and 表.欄位 not in (select top '+                    cast(((@p_currentPage-1)*@p_pagesize) as varchar(20))+'欄位 from 表名where 條件

            end

            exec(@string);

          排序查詢:order by asc/desc

            asc:正序;順序

            desc:反序;倒序

          分組查詢:group by 欄位

          分組後篩選:having

二、數據約束

數據約束:對用戶表操作進行約束

  (1)預設值:

    作用:當用戶對使用預設值的欄位不插入值的時候,就會使用預設值

    註意:

      (a)對於預設值欄位插入null是可以的

      (b)對於預設值欄位可以插入非null

    創建:

      (a)建表:

         create table temp_table

         (id int,

         name varchar(10),

         address varchar(50) default '吉林長春')

      (b)語句:

         alert table 表名 add constraint 預設名字(任意) default('預設值') for 欄位

  (2)非空:

      作用:限制欄位,必須賦值

      註意:

        (a)非空欄位必須賦值

        (b)非空欄位不能賦null

      創建:

        (a)建表:

          create table temp_table

          (id int not null,

          name varchar(10),

          address varchar(50) default '吉林長春')

        (b)語句:

          alert table 表 alert column 欄位名稱 欄位類型 not null

  (3)唯一:

      唯一鍵分為主鍵(主鍵索引)和唯一索引(unique索引)

      作用:對該欄位的值不能重覆

      註意:

        (a)唯一欄位可以插入null

        (b)唯一欄位只能插入一個null

      創建:

        (a)建表:

          create table student

          (id int unique,

          name varchar(10))

        (b)語句

          create unique clustered index 約束名 on 表名(欄位名)

  (4)主鍵:

    作用:非空,唯一

    註意:

      (a)通常情況下,每張表都會設置一個主鍵欄位用於標記表中的每條記錄的唯一性。

      (b)建議不要選擇表的包含業務含義的欄位作為主鍵,建議給每張表獨立設計一個非業務含義的id欄位。

    創建:

      (a)建表:

          create table student

          (id int primary key,--主鍵

          name varchar(10))

      (b)語句:

          第一:先設置欄位為null: alter table 表名 alter column 欄位名 欄位類型 not null

          第二:設置主鍵:alter table 表名 alter constrant 主鍵名(任意) promary key(主鍵欄位)

  (5)自增長

    作用:自動遞增

    註意:一張表中不能有兩個或者多個標識列

    創建:

      (a)建表:

          create table student

          (id int identity(1,1) primary key,--主鍵,自增長,從1開始,每次增加1

          name varchar(10))

      (b)語句:

          alter table 表名 add 列名 int identity(1,1) NOT NULL--增加一列自增

  (6)主鍵:   

    作用:約束兩張表的數據

    出現兩種表的情況:解決數據冗餘高問題, 獨立出一張表。

    註意:

      (a)被約束的表稱為副表,約束別人的表稱為主表,外鍵設置在副表上的!!!

      (b)主表的參考欄位通用為主鍵!

      (c)添加數據: 先添加主表,再添加副表

      (d)修改數據: 先修改副表,再修改主表

      (e)刪除數據: 先刪除副表,再刪除主表

    創建:

      (a)建表:

        -- 部門表(主表)

        CREATE TABLE dept(

        id INT PRIMARY KEY,

        deptName VARCHAR(20)

        )

        -- 修改員工表

        CREATE TABLE employee(

        id INT PRIMARY KEY,

        empName VARCHAR(20),

        deptId INT,-- 把部門名稱改為部門ID,

          -- 聲明一個外鍵約束

        CONSTRAINT 外鍵名稱 FOREIGN KEY(外鍵) REFERENCES 主鍵表(主鍵id)

        )

      (b)語句:

        alter table 表 add foreign key(表外鍵) references主鍵表(主鍵id)

三、多錶鏈接查詢

  (1)外鏈接

    外連接分為:左鏈接、右鏈接、完全外鏈接

    (a)左鏈接:left join 或 left outer join

       用法:最少兩張表,A表和B表

        Select A.欄位 from A left join B on A.id = B.id

       左外連接包含left join左表所有行,如果左表中某行在右表沒有匹配,則結果中對應行右表的部分全部為空(NULL).

    (b)右鏈接 right join 或right outer join

       用法:最少兩張表,A表和B表

        Select A.欄位 from A right join B on A.id = B.id

       右外連接包含right join右表所有行,如果左表中某行在右表沒有匹配,則結果中對應左表的部分全部為空(NULL)。

    (c)完全外連接 full join 或 full outer join

       用法:最少兩張表,A表和B表

        Select A.欄位 from A full join B on A.id = B.id

        完全外連接包含full join左右兩表中所有的行

        如果右表中某行在左表中沒有匹配,則結果中對應行右表的部分全部為空(NULL)

        如果左表中某行在右表中沒有匹配,則結果中對應行左表的部分全部為空(NULL)。

  (2)內連接

     內連接 join 或 inner join

     用法:最少兩張表,A表和B表

     Select A.欄位 from A full join B on A.id = B.id

     inner join 是比較運算符,只返回符合條件的行。
     此時相當於:select * from A,B where A.ID=B.ID


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

-Advertisement-
Play Games
更多相關文章
  • 第一部分、十道海量數據處理面試題 1、海量日誌數據,提取出某日訪問百度次數最多的那個IP。 首先是這一天,並且是訪問百度的日誌中的IP取出來,逐個寫入到一個大文件中。註意到IP是32位的,最多有個2^32個IP。同樣可以採用映射的方法,比如模1000,把整個大文件映射為1000個小文件,再找出每個小 ...
  • 今天寫的一個mysql存儲過程涉及到對一個傳入參數的字元串截取,然後需要判斷截取字元串進行一系列操作,最開始用select subtring() into 這樣的方法將截取值賦於declare變數直接報錯。 然後使用sql裡面的方法 select @x=subtring() 也行不通,😣。。。然後 ...
  • 在c#中有個Date屬性用於返回日期,其實就是當天0點。 DateTime dtNow = DateTime.Now; DateTime dtNow2 = dtNow.Date; Console.WriteLine("dtNow=" + dtNow); Console.WriteLine("dtNo... ...
  • Redis Desktop Manager是Redis圖形化管理工具,方便管理人員更方便直觀地管理Redis數據。 然而在使用Redis Desktop Manager之前,有幾個要素需要註意: 一、註釋redis.conf文件中的:bind 127.0.0.1(在一段文字之前打#號為註釋) 二、設 ...
  • mysql 官方客戶端 MySQL-Workbench 下載鏈接 http://dev.mysql.com/downloads/workbench/ 具體安裝步驟就不寫了,直接一直下一步就可以了。 下麵說一下基礎操作: 登錄成功後,界面如下所示。其中,區域1顯示的是資料庫伺服器中已經創建的資料庫列表 ...
  • 前面的話 由於編碼錯誤,造成的資料庫中文識別成亂碼或問號的問題非常常見,本文將詳細說明解決辦法 配置文件 解決中文識別問題的第一步是修改mysql的配置文件my.ini 在[client]下添加 在[mysqld]下添加 然後重新啟動服務 資料庫編碼 首先,新建一個資料庫 通過下列代碼查看資料庫的編 ...
  • 由於SQL優化優化起來比較複雜,並且還受環境限制,在開發過程中,寫SQL必須遵循以下幾點原則: 1.Oracle 採用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他Where條件之前,那些可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾. 2.Select 語句避免 ...
  • 最近一直在跟Oracle打交道,從最初的一臉懵逼到現在的略有所知,也來總結一下自己最近所學,不定時更新ing… 一:什麼是Oracle執行計劃? 執行計劃是一條查詢語句在Oracle中的執行過程或訪問路徑的描述 二:怎樣查看Oracle執行計劃? 因為我一直用的PLSQL遠程連接的公司資料庫,所以這 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...