SQL server2008零基礎學習

SQL 基礎

數據庫簡介:

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

數據庫常見產品服務器

clip_image002

SQLServer數據庫

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

其主要特色以下:分佈式

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

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

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

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

安裝SQLServer

啓用SA用戶遠程登陸

設置密碼優化

clip_image004

開啓SA用戶。spa

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 子句一塊兒使用

聚合函數在什麼地方纔能使用

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

二、COMPUTE 或 COMPUTE BY 子句。

三、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()

一、COUNT函數

1.一、查詢全部班級總數,全部班級學生

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

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

clip_image176
二、MAX函數

2.一、查詢班級裏最大的年齡

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

clip_image178

三、MIN函數

3.1 查詢班級裏最小的年齡

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

clip_image180

3.二、同時查詢最大的年齡和最小的年齡

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

clip_image182

四、AVG函數

4.一、查詢平均年年

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

clip_image184

4.二、查詢大於平均年年齡的學員

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

clip_image186

五、SUM函數

5.一、查詢全部學員年齡的總和

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

clip_image188

 

 

 

後帶更新。。。。

相關文章
相關標籤/搜索