SQL server2008零基礎學習


SQL 基礎

數據庫簡介:

數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生於距今五十年前,隨着信息技術和市場的發展,特別是二十世紀九十年代以后,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。數據庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型數據庫系統都在各個方面得到了廣泛的應用。

數據庫常見產品

clip_image002

SQLServer數據庫

美國Microsoft公司推出的一種關系型數據庫系統。SQLServer是一個可擴展的、高性能的、為分布式客戶機/服務器計算所設計的數據庫管理系統,實現了與WindowsNT的有機結合,提供了基於事務的企業級信息管理系統方案。

其主要特點如下:

(1)高性能設計,可充分利用WindowsNT的優勢。

(2)系統管理先進,支持Windows圖形化管理工具,支持本地和遠程的系統管理和配置。

(3)強壯的事務處理功能,采用各種方法保證數據的完整性。

(4)支持對稱多處理器結構、存儲過程、ODBC,並具有自主的SQL語言。 SQLServer以其內置的數據復制功能、強大的管理工具、與Internet的緊密集成和開放的系統結構為廣大的用戶、開發人員和系統集成商提供了一個出眾的數據庫平台。

安裝SQLServer

啟用SA用戶遠程登錄

設置密碼

clip_image004

開啟SA用戶。

clip_image006

clip_image008

點擊屬性,啟用遠程連接。

clip_image010

重啟服務,使其生效。

命令:services.msc

clip_image012

TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING

1433端口是開啟的。當我們關閉服務后,端口也將關閉。

數據庫語言

數據查詢語言DQL

DQL:(Data Query Language) SELECT 數據查詢語言

數據操縱語言DML

如insert,delete,update,select(插入、刪除、修改、檢索)

數據定義語言DDL

如drop,alter,truncate等都是DDL

數據控制語言DCL

DCL(Data Control Language)是數據庫控制語言。是用來設置或更改數據庫用戶或角色權限的語句,包括(grant,deny,revoke等)語句。在默認狀態下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人員才有權力執行DCL

創建第一個數據庫

新建數據庫

clip_image014

限制增長:

clip_image016

數據庫的文件后綴

ydxx.mdf

日志文件后綴

ydxx _log.ldf

clip_image018

數據類型

clip_image020

第一大類:整數數據

bit:bit數據類型代表0,1或NULL,就是表示true,false.占用1byte.

int:以4個字節來存儲正負數.可存儲范圍為:-2^31至2^31-1.

smallint:以2個字節來存儲正負數.存儲范圍為:-2^15至2^15-1

tinyint: 是最小的整數類型,僅用1字節,范圍:0至此^8-1

第二大類:精確數值數據

numeric:表示的數字可以達到38位,存儲數據時所用的字節數目會隨着使用權用位數的多少變化.

decimal:和numeric差不多

第三大類:近似浮點數值數據

float:用8個字節來存儲數據.最多可為53位.范圍為:-1.79E+308至1.79E+308.

real:位數為24,用4個字節,數字范圍:-3.04E+38至3.04E+38

第四大類:日期時間數據

datatime:表示時間范圍可以表示從1753/1/1至9999/12/31,時間可以表示到3.33/1000秒.使用8個字節.

smalldatetime:表示時間范圍可以表示從1900/1/1至2079/12/31.使用4個字節.

第五大類:字符串數據

char:長度是設定的,最短為1字節,最長為8000個字節.不足的長度會用空白補上.

varchar:長度也是設定的,最短為1字節,最長為8000個字節,尾部的空白會去掉.

text:長寬也是設定的,最長可以存放2G的數據.

第六大類:Unincode字符串數據

nchar:長度是設定的,最短為1字節,最長為4000個字節.不足的長度會用空白補上.儲存一個字符需要2個字節.

nvarchar:長度是設定的,最短為1字節,最長為4000個字節.尾部的空白會去掉.儲存一個字符需要2個字節.

ntext:長度是設定的,最短為1字節,最長為2G.尾部的空白會去掉,儲存一個字符需要2個字節.

第七大類:貨幣數據類型

money:記錄金額范圍為:-92233720368577.5808至92233720368577.5807.需要8 個字節.

smallmoney:記錄金額范圍為:-214748.3648至214748.36487.需要4個字節.

第八大類:標記數據

timestamp:該數據類型在每一個表中是唯一的!當表中的一個記錄更改時,該記錄的timestamp字段會自動更新.

uniqueidentifier:用於識別數據庫里面許多個表的唯一一個記錄.

第九大類:二進制碼字符串數據

binary:固定長度的二進制碼字符串字段,最短為1,最長為8000.

varbinary:與binary差異為數據尾部是00時,varbinary會將其去掉

image:為可變長度的二進制碼字符串,最長2G.

主鍵

在相續建立數據庫

分離數據庫表,表名:bj(班級的意思)

完善表單

基礎查詢

SQL 注釋(不執行)

第一種:單行

select * from bj --select * from bj

clip_image022

第二種:多行

select * from bj /*select * from bj*/

clip_image024

查詢所有:

Select * from 表名

select * from bj

clip_image026

查詢指定列

select 列名,列名 from 表名

select name,sex,age from bj

clip_image028

條件查詢 where字句

SELECT 列名 FROM 表名 where 條件

select*from bj where name='羊大仙'

clip_image030

查年齡大於10歲的所有記錄

select * from bj where age>10

clip_image032

查詢所有人的數量(count 聚合函數)

select COUNT(*) from bj

clip_image034

范圍查詢(between)

select*from bj where id between 2 and 8

clip_image036

查詢所有不等於23歲的記錄

select * from bj where age<> 23

clip_image038

模糊查詢(like)

1,百分號代表所有,但不包括空

select * from bj where address like'%'

clip_image040

2,匹配中間

select*from bj where phone like '%22%'

clip_image042

3.查詢姓名中包含姓羊的

select * from bj where name like'%羊%'

clip_image044

4,查詢電話號碼中包含“9 ”的

select * from bj where phone like'%9%'

clip_image046

,5匹配開頭(匹配電話號碼前包含“1”的)

select*from bj where phone like '1%'

clip_image048

6.匹配結尾(匹配電話號碼后結尾包含“4”的)

select*from bj where phone like '%4'

clip_image050

7,匹配開頭和結尾(開頭為“1”,結尾為“4”的)

select*from bj where phone like '1%4'

clip_image052

8,匹配單個字符(匹配一個后面為33的一個數)。

select*from bj where phone like '_33%'

clip_image054

9,匹配多個字符

select*from bj where phone like '_[a-z-1-9]7%'

1

clip_image056

10,不匹配

select*from bj where phone like '_![8][!7]%'

clip_image058

查詢NULL

1,查詢非null

select*from bj where phone is not null

clip_image060

2.查詢null值

select*from bj where address is null

clip_image062

邏輯查詢

1,AND查詢

SELECT*FROM bj where name='羊大仙' and sex='男'

clip_image064

2,OR查詢

SELECT*FROM bj where name='羊大仙' or sex='女'

clip_image066

3,OR進行查詢

select * from bj where id=5 or id=7 or id=1

clip_image068

3,IN查詢

select * from bj where id=5 or id=7 or id in(1,3,5,7)

clip_image070

4,NOT IN 查詢

select * from bj where id not in(1,3,5,7)

clip_image072

TOP字句

1,查詢前兩行

SELECT TOP 3 * FROM BJ

clip_image074

2附加語句

2.1:查詢前三行ID大於6 且ID不等於7不等於8的值

SELECT TOP 3 * FROM BJ where id>6 and id<>7 and id<>8

clip_image076

2.2:查詢前三行ID大於6 且ID不等於7不等於8的值(優化版)

SELECT TOP 3 * FROM BJ where id>6 and id not in(7,8)

clip_image078

ORDER BY 語句

順序語句

1,ACS(默認、正序)

SELECT * FROM BJ order by id ASC

select * from bj order by age,id

clip_image080

2,DESC(倒敘)

SELECT * FROM BJ order by id DESC

clip_image082

3,按照年齡從小到大查詢

select * from bj order by age asc

clip_image084

4,按照年齡從大到小查詢

select * from bj order by age desc

clip_image086

5.1,查詢表的列(正確)

select * from bj order by 7

select * from bj order by 1,2,3,4,5,6,7

clip_image088

5.2,查詢表的列(錯誤)只有7列

select * from bj order by 8

select * from bj order by 1,2,3,4,5,6,7,8

clip_image090

DISTINCT 去除重復數據

select distinct age from bj order by 1

clip_image092

數據庫關系圖

在數據庫中,選擇數據庫關系圖,右鍵 ,新建數據庫關系圖。然后進行選表

clip_image094

插入語句(INSERT INTO)

INSERT INTO bj (列1, 列2,...) VALUES (值1, 值2,....)

第一種:完整寫法

insert into bj (id,name,sex,age,greadname,phone,address) values('14','阿花','女','20','九年級','1878664624834','重慶市南岸區南坪協信城')

clip_image096

clip_image098

第二種:簡單寫法

(寫法如下,但是id要是自動增長的情況是使用有效,id不是自動增長的話不能執行,本人id不是自動增長,所有無法執行,僅供參考參考)

insert into student values ('小芳','女','18','初中','137694743','北京市昌平區回龍觀');

clip_image100

更改列名顯示名稱(加as)

select COUNT(name) as'姓名' from bj where name='羊大仙'

clip_image102

刪除語句(DELETE 語句)

delete from bj where id=16

clip_image104

通過模糊查詢刪除姓胖的

delete from bj where name like '胖%'

語句執行前

clip_image106

語句執行后

clip_image108

clip_image110

修改語句(UPDATE)

UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

將name為‘羊大仙’的修改為‘胖子’

update bj set name='胖子' where name='羊大仙'

執行語句前

clip_image112

執行語句后

clip_image114

clip_image116

clip_image118

or

clip_image120

把胖妹的的地址改成'羊大仙的家里'

update bj set address='羊大仙的家里' where name='胖妹'

語句執行前

clip_image122

語句執行后

clip_image124

clip_image126

把性別為男的年級全部改成學前班

update bj set sex='男' where greadname='學前班'

執行語句前

clip_image128

執行語句后

主外鍵

首先建立好兩個數據庫

第一個

clip_image130

第二個

clip_image132

開始建立主外鍵

clip_image134

clip_image136

clip_image138點擊確認》然后關閉》最后shift+s保存 點擊 》是

clip_image140

在右鍵數據庫關系圖》新建數據庫關系圖》選自己建立的哪啊兩個表》添加》在自命名保存

clip_image142

查看數據庫:yyyyy

clip_image144

查看數據庫:ydxx

clip_image146

在數據庫yyyyy中添加數據

clip_image148

查看(應該之前添加過數據有刪除,所以這里的id從24開始增長的)

clip_image150

開始在ydxx表中插入外鍵關聯

clip_image152

插入成功

clip_image154

查看

clip_image156

插入沒有的id值

clip_image158

執行命令

clip_image160

結束。。。。。

更改列查詢

select id as '學好',name as '姓名', age as '年齡',sex as '性別',gradeid as '年齡',address as '地址',phone as '電話' from ydxx

clip_image162

兩表聯查

第 一種:兩表聯查

select

ydxx.id as '學號',name as '姓名', age as '年齡','年齡',address as '地址',phone as '聯系方式',yyyyy.gradename as '班級'

from ydxx , yyyyy

clip_image164

子查詢

子查詢是一個嵌套在 SELECT、INSERT、UPDATE 或 DELETE 語句或其他子查詢中的查詢。任何允許使用表達式的地方都可以使用子查詢。在此示例中,子查詢用作 SELECT 語句中名為 MaxUnitPrice 的列表達式。

select

ydxx.id as '學號',name as '姓名', age as '年齡',sex as '性別',

address as '地址',phone as '聯系方式',

(select gradename from yyyyy where yyyyy.id=ydxx.gradeid)

from ydxx

clip_image166

查詢阿宗在那個班級

select yyyyy.gradename from yyyyy

where id = (select gradeid from ydxx where name = '阿宗')

clip_image168

查詢二年級的所有學生

select name,age,sex,gradeid from ydxx where ydxx.gradeid=(select id from yyyyy

where

gradename='二年級')

clip_image170

查詢二年級的所有學生

select ydxx.name,ydxx.sex, ydxx.age from ydxx

where

ydxx.gradeid =(select id from yyyyy where gradename like '二年級')

clip_image172

嵌套子查詢

select name,sex,(select (select 1+5)+2) as '分數' from ydxx

clip_image174

SQL 高級

SQL Top

SQL Like

SQL In

SQL Join

SQL Inner Join

SQL Union

SQL 函數

聚合函數

聚合對一組值執行計算,並返回單個值。除了 COUNT 以外,聚合函數都會忽略空值。聚合函數經常與 SELECT 語句的 GROUP BY 子句一起使用

聚合函數在什么地方才能使用

1、SELECT 語句的選擇列表(子查詢或外部查詢)。

2、COMPUTE 或 COMPUTE BY 子句。

3、HAVING 子句

常用函數

SQL avg(平均)

SQL count(總數)

SQL first()

SQL last()

SQL max(最大)

SQL min(最小)

SQL sum(綜合)

SQL Group By

SQL Having

SQL ucase()

SQL lcase()

SQL mid()

SQL len()

SQL round()

SQL now()

SQL format()

1、COUNT函數

1.1、查詢所有班級總數,所有班級學生

select count(*) as '學生總數' from ydxx

select COUNT(*) as '班級總數'from yyyyy

clip_image176
2、MAX函數

2.1、查詢班級里最大的年齡

SELECT MAX(ydxx.age)as '最大年齡' from ydxx

clip_image178

3、MIN函數

3.1 查詢班級里最小的年齡

SELECT MIN(ydxx.AGE)AS '最小年齡' FROM YDXX

clip_image180

3.2、同時查詢最大的年齡和最小的年齡

select MAX(ydxx.age) as '最大年齡',MIN(ydxx.age) as '最小年齡' from ydxx

clip_image182

4、AVG函數

4.1、查詢平均年年

select AVG(ydxx.age) as '平均年齡' from ydxx

clip_image184

4.2、查詢大於平均年年齡的學員

select name,age,sex,gradeid from ydxx where ydxx.age>(select AVG(ydxx.age) as '平均年齡' from ydxx)

clip_image186

5、SUM函數

5.1、查詢所有學員年齡的總和

select sum(ydxx.age) as '所有學員年齡的總和' from ydxx

clip_image188

 

 

 

后帶更新。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM