第三階段數據庫-2:數據庫中的sql語句

1_數據庫操作

(1)注釋:

-- 單行注釋
/**/ 多行注釋

(2)創建數據庫:create database 數據庫名

-- create database 數據庫名
create  database db_first;

(3)查詢數據庫:

if exsists(select * from sysdatabases where name='StudentManageDB')

(4)刪除數據庫:drop database 數據庫名

-- drop database 數據庫名
drop database  db_first;

(5)創建變量,可以聲明的時候賦值,也可以先聲明再賦值

declare  @currentPage int;
declare  @pageSize int;
set @currentPage=1;
set @pageSize=10;

2_數據表操作

(1)創建表:creat table 表明(列名,數據類型)

  • not null:設定該列非空,

  • primary key,設定該列為主鍵,

  • identity(1,1) 設定該列自增,從1開始自增,增幅為1

create table Teachers(Id int not null primary key identity(1,1),TeacherName varchar(30) ?not null,Age int ? not null  default(20),Sex int )

(2)查詢表

if exists (select * from sysobjects where name='StudentClass')

(3)刪除表

drop table StudentClass

3_插入數據

(1)表的插入 :insert into 表名(列名) values (值),

插入的時候 表名后面填寫列名,values 后面填寫值 值和列名要--對應

當主鍵設置了標識規范的時候,不讓插入,只有吧IDENTITY_INSERT設置為ON才能插入

數據庫對大小寫不敏感,IDENTITY_INSERT與identity_insert一樣

GETDATE() 是SQL_server 中得函數 用來獲取當前日期

--插入
insert  into Teachers (TeacherName,Age) values ('孫老師',30)
insert  into Teachers (TeacherName,Age,Sex) values ('孫老師',20,0)
SET IDENTITY_INSERT  Teachers ON;
insert  into Teachers (Id,TeacherName,Age,Sex) values (6,'王老師',20,0)
SET IDENTITY_INSERT  Teachers OFF;
insert  into  Students(StuName,StuAge,Birthday) values ('張三',20,'2025-02-01 14:13:45');
insert  into  Students(StuName,StuAge,Birthday) values ('韓李四',20,GETDATE());
--插入多條數據
insert into  Teachers(TeacherName,Age)
--自定義結果集  開發者用多條數據合并而來
select '王老師1',30
union all
select '王老師2',30
union all
select '王老師3',30

4_修改數據

(1)修改數據:update 表名 set 修改的列名='值' where 條件

or 或者,滿足一項就可以,相當于C#中的||

and 并且 滿足所有的條件 相當于&&

不加修改條件的時候會修改所有的數據,切記加條件

update  Students set StuName='張三' where  Id=7;
update  Students set StuName='王大陸3',StuAge=10 where Id=6 or Id=5;  -- or  ===> ||
update  Students
set StuName='4563' 
where Id=6 and StuAge=100;  ---> and ===> && 

5_刪除數據:

delete from 表名:刪除數據 ,標識符不重置,可以使用where添加刪除條件

truncate table 表名:刪除清空數據 保留表結構 標識規范重置,不能添加where 謹慎使用

delete from  Teachers;
delete from  Teachers where  Id=2;
delete from  Teachers where  TeacherName ='孫老師';
truncate table Teachers  ;

6_查詢數據

6.1_基本查詢

(1)查詢語句 會查到一個結果集 把結果集返回出來

select * from 表明: * all 全部列

-- * all  全部列
select  * from  Students;

(2)查詢部分行,使用 'as' 或使用 '=' 重新命名字段

--查詢部分列
select  StuName,StuAge from  Students;
--  查詢替換列名
select TeacherName as 老師姓名,Age as  年齡 from Teachers
--使用等號重命名字段
select 出生年月=Birthday from Students where Gender='男'

(3)條件查詢,多個并列條件使用 and 連接,多個或條件使用 or 連接

--加 where 篩選  
select  * from  Students  where Id =1;--查詢id等于1的全部數據
select  StuName  from  Students  where Id =4; --查詢id等于4的學生姓名
select  StuName  from  Students  where Id =4  and StuAge=10;
select  StuName  from  Students  where Id =4  or StuAge=10;

(4)使用加號可以將多列數據顯示到同一列中

  • + 連接的數據類型必須兼容

  • 如果使用 + 連接字符型數據,結果為字符串數據的連接

  • 如果使用 + 連接數值型數據,結果為數值的和

select 學號=StudentId,總成績=CSharp + SQLServer from ScoreList

(5)查詢空列

select * from ScoreList where SQLServer is null

(6)使用常量列:增加新的一列

select StudentName, Gender, Birthday, Age, StudentIdNo,學校='111' from Students where Gender='男' and Age > 24

(7)限制固定行數 top 頂端的,

  • top n 最上邊的n行數據

  • top 40 percent 返回百分之多少行

select top 4 StudentName, Gender, Birthday from Students
select top 40 percent StudentName, Gender, Birthday from Students

(8)排序

升序:asc 默認為升序排列,可省略

降序:desc

select StudentId, (CSharp + 5) as C#, DB=SQLServer 
from ScoreList 
where (CSharp + 5) > 80 
order by CSharp ASCselect StudentId, (CSharp + 5) as C#, DB=SQLServer 
from ScoreList 
where (CSharp + 5) > 80 
order by CSharp DESC

(9)多列排序,前一個條件相等時,自動按照下一個條件排序。

select StudentId, (CSharp + 5) as C#, DB=SQLServer from ScoreList where (CSharp + 5) > 80 order by CSharp DESC, SQLServer DESC

6.2_模糊查詢

(1)like:使用 like 查詢時,字段中的內容并不一定與查詢內容完全匹配,只要字段中含有這些內容即可。

select  * from  Students   where StuName   like  '王%';-- 以 '王' 開頭
select  * from  Students   where StuName   like  '%2';-- 以 '2' 結尾
select  * from  Students   where StuName   like  '%2%';--  包含 '2'  2 在結尾 中間 開頭 都可以匹配

(2)between:把某一字段中的值在特定范圍內的記錄查詢出來,使用 between包含斷點值(閉合區間)。

-- between 之間 
select  StuName  from  Students  where Id   between 5 and 8;select StudentName, Birthday from Students where Birthday between '1999-01-01' and '2001-05-05'
--建議不要比較字符串
-- select  * from  Students   where StuName >= '吳亦凡'  and StuName<='王大陸'

(3)IN:即把某一字段中內容與所列出的查詢內容列表匹配的記錄查詢出來(相當于把要查詢的內容通過枚舉的方式一一列出來),更精確一些。

IN: 指定某列的值必須在指定的列表中,

NOT IN :操作符用于指定某列的值不能在指定的列表中。

--IN操作符用于指定某列的值必須在指定的列表中。
select  * from  Students   where StuName  in  ('張三','李四');
-- NOT IN操作符用于指定某列的值不能在指定的列表中。
select  * from  Students   where StuName  not  in  ('張三','李四');
6.2_多表聯查

(1)連接分類

  • 外連接(outer)

    • 左連接:Left,左表為主,返回左表中的所有行,如果左表中行在右表中沒有匹配行,則結果中右表中的列返回空值。

    • 右連接,right,右表為主,返回右表中的所有行,如果右表中行在左表中沒有匹配行,則結果中左表中的列返回空值。

    • 全連接:返回左表和右表中的所有行。當某行在另一表中沒有匹配行,則另一表中的列返回空值

  • 內連接(inner)

    • 等值連接:在連接條件中使用等于號(=)運算符,其查詢結果中列出被連接表中的所有列,包括其中的重復列。

    • 不等鏈接:在連接條件中使用除等于號之外運算符(>、<、<>、>=、<=、!>和!<)

  • 交叉連接

    • 不帶where條件子句:它將會返回被連接的兩個表的笛卡爾積,返回結果的行數等于兩個表行數的乘積(例如:T_student和T_class,返回4*4=16條記錄),如果帶where,返回或顯示的是匹配的行數

    • 有where子句:往往會先生成兩個表行數乘積的數據表,然后才根據where條件從中選擇。cross join后加條件只能用where,不能用on

--多表查詢
--外連接
--左連
select * from CustomerInfo as C
left outer join AddressInfo as A on C.AddressId=A.AddressId;
--左連
--as 可以省略,outer也可以省略,默認為outer
select * from CustomerInfo as C
left join UserInfo U on C.CreateUaerId=U.UserId;
--右連接
select * from CustomerInfo as C
right join UserInfo U on C.CreateUserId=U.UserId;
--全連接
select * from CustomerInfo as C
full join UserInfo U on C.CreateUserId=U.UserId;
--設置顯示的列
select C.CustomerId,C.CustomerName,C.Sex,C.Age,C.Phone,A.ProvinceName,A.City,A.Area from CustomerInfo as  C 
left outer  join AddressInfo as A on C.AddressId=A.AddressId;
--列可使用+顯示在一列
select C.CustomerId,C.CustomerName,C.Sex,C.Age,C.Phone,A.ProvinceName+A.City+A.Area   DataiAddress from CustomerInfo as  C 
left  outer  join AddressInfo as A on C.AddressId=A.AddressId;--內連接
--等值連接
select * from CustomerInfo as  C 
inner   join UserInfo U  on  C.CreateUserId=U.UserId;
--不等連接
select * from CustomerInfo as C
inner join UserInfo U on CreateUserId<>U.UserId;
--不等連接
select C.CustomerId,C.CustomerName,C.AddressId,A.AddressId, A.ProvinceName+A.City+A.Area as  DataiAddress from CustomerInfo as C
inner join AddressInfo as A on C.AddressId<>A.AddressId;--交叉連接
--不帶where
select C.CustomerId,C.CustomerName,C.Age,A.AddressId, A.ProvinceName+A.City+A.Area as  DataiAddress  from CustomerInfo as C 
cross join  AddressInfo as A
--帶where
select C.CustomerId,C.CustomerName,C.Age,A.AddressId, A.ProvinceName+A.City+A.Area as  DataiAddress  from CustomerInfo as C 
cross join  AddressInfo as A where C.AddressId=A.AddressId;
6.3_分組查詢與統計

(1)使用Group by分組

分組 Group By 的標準,一般要出現在展示項中,一般形如:select 聚合函數, xx, [不要出現非聚合項] from table_name group by xx

select COUNT(*) as 總人數, ClassName from Students
inner join StudentClass on StudentClass.ClassId = Students.ClassId
group by ClassNameselect Score ,Count(Score) as ScoreCount from StudentInfo--查詢
where Score>=90 and Score<=100			--篩選
group by Score							--分組
order by ScoreCount desc,Score asc;		--排序

(2)分組統計篩選 having:

分組后篩選:借助having子句,having子句,只能配合group by使用

having count(Score)>=4專門對分組后的結果進行二次篩選,列的別名不能當作having條件

select  Score ,Count(Score) as ScoreCount from StudentInfo
where Score>=90 and Score<=100			
group by Score	having count(Score)>=4
order by ScoreCount desc,Score asc;	
--having的其他作用
-- 查詢重復的字段
select StudentId from ScoreList group by StudentId having COUNT(*) > 1
select * from ScoreList
where StudentId in (select StudentId from ScoreList group by StudentId having COUNT(*) > 1)
order by StudentId

(3)嵌套查詢,

select * from 
(
select  Score ,Count(Score) as ScoresCount from StudentInfo
where Score>=90 and Score<=100		
group by Score
)
as MyTable where ScoresCount>=4

(4)分組查詢對比

where子句:

  • 從數據源中去掉不符合其搜索條件的數據

group by 子句:

  • 搜集數據行到各個組中,統計函數為各個組計算統計值

having 子句:

  • 在分組結果中,去掉不符合其組搜索條件的各組數據行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94404.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94404.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94404.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中的filter函數

目錄 定義與參數說明 特點 使用場景 常用操作 篩選偶數 去除空字符串 篩選正數 篩選字典 配合集合與元組 注意事項 定義與參數說明 filter函數是Python內置的高階函數之一&#xff0c;用于篩選可迭代對象中的元素&#xff0c;根據返回值的布爾結果&#xff08;True 或…

BERT(Bidirectional Encoder Representations from Transformers)模型詳解

一、BERT 簡介BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由 Google 在 2018 年提出的一種預訓練語言表示模型。它基于 Transformer 編碼器結構&#xff0c;首次提出了 雙向上下文建模 的方法&#xff0c;大幅度提升了自然語言處理…

【開題答辯全過程】以 基于Springboot+微信小程序的網上家教預約系統的設計與實現-開題為例,包含答辯的問題和答案

個人簡介&#xff1a;一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧…

課小悅系列智能耳機上市,用硬核科技為教育賦能

在人工智能與教育深度融合的浪潮中&#xff0c;深圳課小悅科技有限公司以“智慧教育專家”的姿態嶄露頭角。這家深耕智能教育硬件的創新企業&#xff0c;于2025年8月正式推出革命性產品H360PRO系列教考耳機&#xff0c;為語言學習場景提供顛覆性解決方案。創新基因&#xff1a;…

[react] class Component and function Component

我對react的用法理解還一直停留在多年以前&#xff0c;說明這段時間我沒有更新react的知識。我大腦中記得還是使用Class Component this.setState&#xff0c;可是今天看了看react的文檔&#xff0c;發現怎么不一樣了&#xff0c;用的都是function useState的方式了。你知道這…

以太坊智能合約地址派生方式:EOA、CREATE 和 CREATE2

1. 引言 在以太坊上&#xff0c;智能合約可以通過以下三種方式之一進行部署&#xff1a; 1&#xff09;由外部賬戶&#xff08;Externally Owned Account, EOA&#xff09;發起交易&#xff0c;其中 to 字段設為 null&#xff0c;而 data 字段包含合約的初始化代碼。2&#x…

基于RISC-V架構的國產MCU在eVTOL領域的應用研究與挑戰分析

摘要電動垂直起降飛行器&#xff08;eVTOL&#xff09;作為未來城市空中交通的重要組成部分&#xff0c;對嵌入式控制系統的性能、可靠性和安全性提出了極高的要求。RISC-V作為一種新興的開源指令集架構&#xff0c;為國產微控制器&#xff08;MCU&#xff09;的研發和應用帶來…

深度學習中的“集體智慧”:Dropout技術詳解——不僅是防止過擬合,更是模型集成的革命

引言&#xff1a;從“過擬合”的噩夢說起 在訓練深度學習模型時&#xff0c;我們最常遇到也最頭疼的問題就是過擬合&#xff08;Overfitting&#xff09;。 想象一下&#xff0c;你是一位正在備考的學生&#xff1a; 欠擬合&#xff1a;你根本沒學進去&#xff0c;所有題都做錯…

在JavaScript中,比較兩個數組是否有相同元素(交集)的常用方法

方法1&#xff1a;使用 some() includes()&#xff08;適合小數組&#xff09;function haveCommonElements(arr1, arr2) {return arr1.some(item > arr2.includes(item)); }// 使用示例 const arrA [1, 2, 3]; const arrB [3, 4, 5]; console.log(haveCommonElements(ar…

心路歷程-Linux的系統破解詳細解說

CentOS7系統密碼破解 密碼破解是分兩種情況的&#xff1b;一種是在系統的界面內&#xff0c;一種就是不在系統的頁面&#xff1b; 今天我們就來聊聊這個系統破解的話題&#xff1b; 1.為什么需要破解密碼&#xff1f;–>那當然是忘記了密碼&#xff1b;需從新設置密碼 2.但是…

IDE和AHCI硬盤模式有什么區別

IDE&#xff08;Integrated Drive Electronics&#xff09;和 AHCI&#xff08;Advanced Host Controller Interface&#xff09;是硬盤控制器的工作模式&#xff0c;主要區別在于性能、功能兼容性以及對現代存儲設備的支持程度。以下是詳細對比和分析&#xff1a;一、本質區別…

【密碼學實戰】密碼實現安全測試基礎篇 . KAT(已知答案測試)技術解析與實踐

KAT 測試技術解析 在密碼算法的安全性驗證體系中&#xff0c;Known Answer Test&#xff08;KAT&#xff0c;已知答案測試&#xff09;是一項基礎且關鍵的技術。它通過 “已知輸入 - 預期輸出” 的確定性驗證邏輯&#xff0c;為密碼算法實現的正確性、合規性提供核心保障&…

如何用Redis作為消息隊列

說明&#xff1a;以前背八股文&#xff0c;早就知道 Redis 可以作為消息隊列&#xff0c;本文介紹如何實現用 Redis 作為消息隊列。 介紹 這里直接介紹 yudao 框架中的實現。yudao 是一套現成的開源系統框架&#xff0c;里面集成了許多基礎功能&#xff0c;我們可以在這基礎上…

解決 uniapp 修改index.html文件不生效的問題

業務場景&#xff1a;需要在H5網站設置追蹤用戶行為&#xff08;即埋點&#xff09;的script代碼。 問題&#xff1a;無論如何修改根目錄下的index.html文件都不會生效 問題原因&#xff1a;在 manifest.json 文件中有個【web配置】—>【index.html模版路徑】&#xff0c;…

C語言第十一章內存在數據中的存儲

一.整數在內存中的存儲在計算機內存中&#xff0c;所有的數字都是以二進制來存儲的。整數也不例外&#xff0c;在計算機內存中&#xff0c;整數往往以補碼的形式來存儲數據。這是為什么呢&#xff1f;在早期計算機表示整數時&#xff0c;最高位為符號位。但是0卻有兩種表示形式…

K8s部署dashboard平臺和基本使用

Kubernetes 的默認 Dashboard 主要用于基本的資源查看與管理,如查看 Pod、Service 等資源的狀態,進行簡單的創建、刪除操作 。然而,在企業級復雜場景下,其功能顯得較為局限。 與之相比,開源的 Kubernetes Dashboard 增強版工具 ——Dashboard UI ,為用戶帶來了更強大的功…

JavaEE進階-文件操作與IO流核心指南

文章目錄JavaEE進階文件操作與IO流核心指南前言&#xff1a;為什么需要文件操作&#xff1f;一、java.io.File 類的基本用法1.1 文件路徑1.2 常用方法示例獲取文件信息創建和刪除文件目錄操作文件重命名和移動二、IO流的基本概念2.1 核心困境&#xff1a;字節流 vs. 字符流字節…

動手學深度學習03-線性神經網絡

動手學深度學習pytorch 參考地址&#xff1a;https://zh.d2l.ai/ 文章目錄動手學深度學習pytorch1-第03章-線性神經網絡1. 線性回歸1.1 什么是線性回歸&#xff1f;1.2 如何表示線性回歸的預測公式&#xff1f;2. 損失函數2.1 什么是損失函數&#xff1f;2.2 如何表示整個訓練集…

如何安全解密受限制的PDF文件

當你需要從PDF中復制一段文字用于報告或引用時&#xff0c;如果文件被禁止復制&#xff0c;解密后即可輕松提取內容&#xff0c;避免手動輸入的麻煩。它解壓后雙擊主程序即可運行&#xff0c;無需安裝&#xff0c;即開即用&#xff0c;十分便捷。建議先將界面語言切換為中文&am…

利用DeepSeek輔助編譯c#項目tinyxlsx生成xlsx文件

繼續在尋找比較快的xlsx寫入庫&#xff0c;從https://github.com/TinyXlsx/TinyXlsx/ 看到它的測試結果&#xff0c;比c的openXLSX快幾倍&#xff0c;就想試用一下&#xff0c;仔細一看&#xff0c;它是個c#項目&#xff0c;需要.NET 8.0。 于是上微軟網站下載了.NET 8.0 SDK&a…