C Sharp 數據操作系列 - 1. SQL基礎操作

2021-01-07 程式設計師小高學習筆記

0.前言

前篇介紹了一些資料庫的基本概念和以及一些常見的資料庫,讓我們對資料庫有了一個初步的認識。這一篇我們將繼續為C#數據操作的基礎填上一個空白-SQL語句。

SQL(Structured Query Language,結構化查詢語言)是一種特定的程式語言,用於管理資料庫系統,操作數據甚至編寫一些程序。

當然,一方面因為時間問題,一方面因為各大資料庫的區別(當然了,還有就是個人對SQL研究並不是那麼深)所以這一篇就從SQL的基本操作入手,帶領大家一起看看SQL的世界。

1. SQL的分類

在SQL的世界裡,被分割為兩個部分:DML(Data Manipulation Language 數據操縱語言)、DDL(Database Definition Language 數據定義語言)。當然,也有很多其他的分法,這裡參照了機械工業出版社出版的《計算機科學叢書- 資料庫系統概念》。

1.1 DML

數據操縱語言,用戶可以憑此來訪問或者操縱那些被結構化存儲起來的數據。DML提供了以下功能:

對存儲在資料庫的數據進行檢索(select)在資料庫中添加新的數據(insert)修改資料庫中的數據(update)刪除資料庫中的某些數據(delete)簡單的概括起來就是增刪改查,對於開發而言這是一項枯燥乏味的工作,當然也是每個程序必不可少的工作。如果你見到這個詞:crud,不要詫異,這是開發對增刪改查的一種縮寫(create,read,update,delete)。

在技術的演變過程中,為了更快更好的增刪改查,有一些大牛開發出了一系列的ORM框架,比如C#裡最出名的EntityFramework、與Hibernate同源的NHibernate等等。

1.2 DDL

數據定義語言,用戶可以用來創建資料庫、修改資料庫屬性、刪除資料庫,新建表、視圖,修改表、視圖,刪除表、視圖等。與DML不同的是,DDL操作的對象從數據轉變成了承載數據的實體或者與操作數據的實體。

還有與DML不同的一點是,DDL更多的會使用 create、alter、drop等關鍵字(分別用來 創建、修改、銷毀)。

1.3 方言

如今的城市人們來自五湖四海,有的人用普通話,有的人還是一口流利的家鄉話。與之相同的就是在資料庫這個江湖裡,各大門派都在標準SQL裡添加了自己的東西,讓SQL成了一個操持著五湖四海的方言的大家族。比如說微軟的Transcat-SQL和PL/SQL。

2. 一些簡單操作

這裡先簡單介紹一下通用SQL下的操作:

2.1 創建資料庫

create database test;這是一個簡單的創建資料庫的SQL語句,這是標準SQL的一部分。效果就是創建一個名字為test的資料庫,字符集等屬性是系統的默認值。

當然,在SQL Server裡可以通過以下方式指定字符集:

create database 資料庫名 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; -- 使用gbkCREATE DATABASE 資料庫名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; -- 使用utf8這是在開發過程中最常用的創建資料庫方式。

2.2 創建表

數據表是資料庫裡最重要的一個實體,我們大概演示一下如何通過sql語句創建一個表:

create table demo( [key] int identity primary key , [name] varchar(20))goSQL 創建表的格式如下:

create table <表名>( [屬性名] <類型> [params...配置])如果有第二個屬性,則在第一個之後添加一個逗號,然後繼續按照格式聲明。

其中 屬性名和類型是必須的,配置則可有可無。

常見配置項:

identity 表示該列是個自增列,一般是起始1,增長步長為1primary key 表示該列是主鍵列,只能有一個主鍵not null 表示該欄位非空,如果是空值進來則會報錯unique 表示該欄位的值不能出現重複而數據類型則因為資料庫不同會有一些細微的差別,所以這裡就不錯過多介紹了。

2.3 查詢

一個簡單的查詢:

select * from demo;表示查詢該表的所有數組。

然後更進一步,可以限制查詢條件:

select * from demo where <條件>;注意一下這裡的條件裡的等值判斷用的是一個等號,而不像開發語言裡用的是雙等號。

這時候發現我們用不了那麼多的欄位,然後篩選出要顯示的欄位:

select <欄位01>,<欄位02>,<欄位03> from [表名] where <條件>這裡簡單介紹一下查詢,當然還有很多沒有一一介紹,在後續的章節會把這部分補齊的。

2.4 添加數據

在查詢之前,我們得先保證數據表裡有數據,所以我們看看如何插入數據吧。

插入單條記錄:

insert into [表名](<欄位1>,<欄位2>,<欄位3>) values('值1','值2','值3')在表名後面跟括號,括號內寫入要插入值的欄位,然後values關鍵字後面用括號包裹起來的一組值便是要插入的值。插入值要與欄位名一一對應。

如果要插入多條記錄呢?

insert into [表名](<欄位1>,<欄位2>,<欄位3>) values('值1','值2','值3'),('值1','值2','值3')如果需要插入多條的話,將數據用括號包裹起來,然後依次跟在values後面。

2.5 修改數據

當我們發現插入的數據有問題的時候或者因為業務的進行,資料庫表裡的數據需要更新,這時候我們可以參照以下方式寫自己的sql:

update [表名]set <欄位1> = <值1>如果需要更新多個欄位,可以在更新欄位後面添加一個逗號,然後跟在後面,簡單實例:

update AdditionalServiceset storeid = 1 , name = '23'目前所以的更新都是全表更新,當然我們一樣可以使用 where來限制。

2.6 刪除數據

刪除數據的關鍵字是delete,所以刪除的寫法是:

delete [表名]where <條件>如果不設置where 條件,則刪除的是全表數據。

2.7 刪除表

刪除表的操作:

drop table [表名]這個操作會把表結構和表裡的數據都刪除。

3.總結

這一篇大概介紹了SQL的基本用法,開發過程中的SQL基本夠用了。後續會隨著文章內容逐步填補未介紹的部分。

相關焦點

  • Java8中如何對流做類似sql的order by操作
    》和大家約定好了,今天要寫一寫怎麼對流做類似order by的操作。既然說到,那就要做到。今天就來寫一寫Java8中怎麼對流做類似sql中order by的操作。俗話說:「一事不煩二主」,還是寫流相關的內容,那就還麻煩之前的類和數據登場演繹一番了。
  • BeetlSQL 3.1.0 發布,Spring Saga 事務支持
    同理,也可以用於管理多庫事務Saga要求微服務提供回滾操作,然後如果需要回滾,有Saga編排調度各個微服務對應的回滾服務。BeetlSQL提供了SagaMapper,內置的操作都有對應的回滾操作,也提供@SagaSql,用戶提供正向SQl,也提供回滾SQL。
  • 女朋友都能看懂的,SQL優化乾貨
    1一般這樣寫,是為了避免條件空時,sql異常select name from A where 1=1判斷條件是否空,空就去掉where,而不是寫where 1=17、where條件,使用了&沒有包含前置列name欄位按照mysql最左匹配原則,不走索引9、隱式類型轉換select * from A where name=1name欄位類型為varchar,也就是字符串,而sql中用name=1來查詢,sql
  • sqltoy-orm-4.16.6 發版,直面項目過程中的痛點!
    您的痛點和訴求分析,我們將大多數人遇到的問題分成3個階段: 希望擁有jpa式的對象操作的簡潔舒暢,如:save(entity)\update\saveOrUpdate\saveAll\updateAll,loadById()等 希望簡單的查詢可以是對象鏈式操作模式
  • 不懂就問:SQL 語句中 where 條件後 寫上1=1 是什麼意思
    我們先看下面這段Java代碼:String sql="select *from table_namewhere 1=1";if( condition 1) {sql=sql+" and var2=value2";}
  • ORM 框架 sqltoy-orm 4.12.2 發版
    sqlhttps://gitee.com/threefish/sqltoy-idea-plugins更新內容1、增強直接寫sql查詢時自動根據情況補齊select c1,c2,.. from table where2、優化quickvo,剔除對log4j的依賴改用
  • 經典SQL面試題及答案分析
    :課程id,score:分數)初始化數據的sql附在文章末尾挑戰1、查詢各科成績前三名的記錄--方法1:SELECT s_name,a.s_id,a.c_id,a.score FROM score a LEFT JOIN score b ON a.c_id = b.c_id AND a.score<b.scoreJOIN studentON
  • 使用mybatis-plus必須掌握的基本技能,自定義SQL和分頁查詢
    1 創建項目先創建一個集成了mybatis-plus的spring boot項目。參考小編的另一篇文章【2 自定義SQLMybatis-plus自帶的條件構造器雖然很強大,在項目實戰的時候,各種複雜的應用場景,你肯定避免不了要寫稍微複雜一點的sql語句,又或者一些朋友習慣通過寫sql來操作數據,那麼小編來說說mybatis-puls是怎麼自定義sql語句。
  • sqltoy-orm 4.13.12.1 發版,增加 DTO 和 POJO 互轉工具方法
    : sqltoy是全新一代的ORM框架,兼顧jpa對象式操作的優勢,同時極大增強了查詢功能,輔以科學的sql編寫模式、巧妙的緩存翻譯集成、極致的分頁優化以及針對大規模數據下的分庫分表、超複雜場景下的mongodb、elastic、clickhouse組合應用!
  • C語言入門級教程:基礎數據類型與基本算法,學編程從此刻開始!
    今天帶大家了解一下學C語言必備的基本數據類型和基本算法,適合剛學C以及零基礎的小夥伴! 話不多說,我們一起來學習吧~ 數據類型 ● 基本類型 基本類型就是我們在使用C語言時最基礎的數據類型,包括整形(短整型,基本整型,長整型)、字符型、浮點型(單、雙精度)以及枚舉類型。
  • excel數據計算的基礎,公式與函數的基礎操作技巧
    我們在實際工作中,當我們需要處理大量數據的時候,我們通常會選擇excel表格,因為excel自身具有強大的公式與函數,我們可以利用公式與函數對excel數據進行快速計算。公式與函數的基礎操作技巧excel自帶很多實用的函數,比較常見的有邏輯函數、判斷函數等,我們可以根據自己的需要選擇適合的函數
  • 工作中,我們經常用到哪些SQL語句呢?
    )和DQL(數據查詢語言)2.1 insert 語句① 語法:insert into table_name(colunm_name1,colunm_name2,colunm_name3,...)values(data1,data2,data3...)-- colunm_name1: 指定表中要添加數據的列名,可以是一個或多個-- data1:要填入指定列的數據值
  • card是卡片,sharp是尖銳的,那card sharp是什麼意思?
    我們知道card的意思是「卡片」,sharp的意思是「尖銳的」,那card sharp是什麼意思呢?card sharp的意思是「a person who earns money by playing cards dishonestly」,即「(玩紙牌時)作弊贏錢的人,耍老千的人」。
  • zuihou-admin-cloud 2.1 發布,租戶模式支持動態新增數據源 - OS...
    新增 租戶模式 支持多數據源模式:動態增減數據源,一個租戶一個庫一個數據源5. 多數據源模式相關代碼和配置,調整成一鍵切換模式6. 新增多數據源模式完美支持分布式事務(seata 1.0.0) 7. 新增刪除租戶時,刪除租戶數據和資料庫的接口,並刪除該租戶的數據源8.
  • 使用mybatis框架,完成增刪改查操作
    而如何找到對應的sql語句並執行?就需要在參數中說明sql語句對應的id了。1UserDao接口資料庫四大操作:增刪改查在dao層中編寫一個接口,包含這四種操作的方法,其中查詢有全表和單條查詢。其中增刪改操作中我們需要調用commit方法提交事務,不然資料庫中的數據不會修改。查詢不需要事務提交,這也好理解,本身並沒有對資料庫中的數據進行修改。
  • CSharp基礎知識-面向對象
    static int Count{get { return count; } set { count = value; }}private string name;public string Name{get { return name; } set { name = value; }}public Person(){Name = ""; Count = Count + 1;
  • 極致查詢性能 sqltoy-orm-4.12.3 發版 - OSCHINA - 中文開源技術...
    更新內容1、修復批量操作默認autoCommit默認為false導致分布式事務錯誤
  • 使用PInvoke互操作,讓C Sharp 和C++愉快的交互優勢互補
    一:背景1.二:PInvoke互操作技術1. 一些前置基礎這裡我用vs2019創建C++的Console App,修改兩個配置: 將程序導出為dll,修改成compile方式為 Compile as C++ Code (/TP)。2.
  • 請確保你查詢mysql資料庫時,sql語句沒有這麼寫
    資料庫索引,可以讓查詢sql語句效率更高。所以大家在寫查詢的sql語句時為了讓語句執行效率高會讓語句能命中索引,或者新建合適的索引。可是,有時候大家會遇到像下面說的這樣的情況。明明我sql語句where條件的欄位是符合索引,應該可以命中索引的,但是執行時卻沒有命中索引。為什麼會這樣呢,是人性的……額,串臺了,調回來。要說明這個問題,大家先來比較一下下面的這兩個sql語句。
  • 一篇文章搞懂mysql的數字數據類型
    MySQL的數據類型包括數字類型、時間與日期類型、字符串類型、空間數據類型等,本文詳細介紹數字類型的相關知識。1 數字類型簡介MySQL的數字數據類型分為四種:位數據類型、整數數據類型、定點數據類型和浮點數據類型。