SQL 基礎
數據庫簡介:
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生於距今五十年前,隨着信息技術和市場的發展,特別是二十世紀九十年代以后,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。數據庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型數據庫系統都在各個方面得到了廣泛的應用。
數據庫常見產品
SQLServer數據庫
美國Microsoft公司推出的一種關系型數據庫系統。SQLServer是一個可擴展的、高性能的、為分布式客戶機/服務器計算所設計的數據庫管理系統,實現了與WindowsNT的有機結合,提供了基於事務的企業級信息管理系統方案。
其主要特點如下:
(1)高性能設計,可充分利用WindowsNT的優勢。
(2)系統管理先進,支持Windows圖形化管理工具,支持本地和遠程的系統管理和配置。
(3)強壯的事務處理功能,采用各種方法保證數據的完整性。
(4)支持對稱多處理器結構、存儲過程、ODBC,並具有自主的SQL語言。 SQLServer以其內置的數據復制功能、強大的管理工具、與Internet的緊密集成和開放的系統結構為廣大的用戶、開發人員和系統集成商提供了一個出眾的數據庫平台。
安裝SQLServer
啟用SA用戶遠程登錄
設置密碼
開啟SA用戶。
點擊屬性,啟用遠程連接。
重啟服務,使其生效。
命令:services.msc
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
創建第一個數據庫
新建數據庫
限制增長:
數據庫的文件后綴
ydxx.mdf
日志文件后綴
ydxx _log.ldf
數據類型
第一大類:整數數據
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 |
第二種:多行
| select * from bj /*select * from bj*/ |
查詢所有:
Select * from 表名
| select * from bj |
查詢指定列
select 列名,列名 from 表名
| select name,sex,age from bj |
條件查詢 where字句
SELECT 列名 FROM 表名 where 條件
| select*from bj where name='羊大仙' |
查年齡大於10歲的所有記錄
| select * from bj where age>10 |
查詢所有人的數量(count 聚合函數)
| select COUNT(*) from bj |
范圍查詢(between)
| select*from bj where id between 2 and 8 |
查詢所有不等於23歲的記錄
| select * from bj where age<> 23 |
模糊查詢(like)
1,百分號代表所有,但不包括空
| select * from bj where address like'%' |
2,匹配中間
| select*from bj where phone like '%22%' |
3.查詢姓名中包含姓羊的
| select * from bj where name like'%羊%' |
4,查詢電話號碼中包含“9 ”的
| select * from bj where phone like'%9%' |
,5匹配開頭(匹配電話號碼前包含“1”的)
| select*from bj where phone like '1%' |
6.匹配結尾(匹配電話號碼后結尾包含“4”的)
| select*from bj where phone like '%4' |
7,匹配開頭和結尾(開頭為“1”,結尾為“4”的)
| select*from bj where phone like '1%4' |
8,匹配單個字符(匹配一個后面為33的一個數)。
| select*from bj where phone like '_33%' |
9,匹配多個字符
| select*from bj where phone like '_[a-z-1-9]7%' |
1
10,不匹配
| select*from bj where phone like '_![8][!7]%' |
查詢NULL
1,查詢非null
| select*from bj where phone is not null |
2.查詢null值
| select*from bj where address is null |
邏輯查詢
1,AND查詢
| SELECT*FROM bj where name='羊大仙' and sex='男' |
2,OR查詢
| SELECT*FROM bj where name='羊大仙' or sex='女' |
3,OR進行查詢
| select * from bj where id=5 or id=7 or id=1 |
3,IN查詢
| select * from bj where id=5 or id=7 or id in(1,3,5,7) |
4,NOT IN 查詢
| select * from bj where id not in(1,3,5,7) |
TOP字句
1,查詢前兩行
| SELECT TOP 3 * FROM BJ |
2附加語句
2.1:查詢前三行ID大於6 且ID不等於7不等於8的值
| SELECT TOP 3 * FROM BJ where id>6 and id<>7 and id<>8 |
2.2:查詢前三行ID大於6 且ID不等於7不等於8的值(優化版)
| SELECT TOP 3 * FROM BJ where id>6 and id not in(7,8) |
ORDER BY 語句
順序語句
1,ACS(默認、正序)
| SELECT * FROM BJ order by id ASC select * from bj order by age,id |
2,DESC(倒敘)
| SELECT * FROM BJ order by id DESC |
3,按照年齡從小到大查詢
| select * from bj order by age asc |
4,按照年齡從大到小查詢
| select * from bj order by age desc |
5.1,查詢表的列(正確)
| select * from bj order by 7 select * from bj order by 1,2,3,4,5,6,7 |
5.2,查詢表的列(錯誤)只有7列
| select * from bj order by 8 select * from bj order by 1,2,3,4,5,6,7,8 |
DISTINCT 去除重復數據
| select distinct age from bj order by 1 |
數據庫關系圖
在數據庫中,選擇數據庫關系圖,右鍵 ,新建數據庫關系圖。然后進行選表
插入語句(INSERT INTO)
INSERT INTO bj (列1, 列2,...) VALUES (值1, 值2,....)
第一種:完整寫法
| insert into bj (id,name,sex,age,greadname,phone,address) values('14','阿花','女','20','九年級','1878664624834','重慶市南岸區南坪協信城') |
第二種:簡單寫法
(寫法如下,但是id要是自動增長的情況是使用有效,id不是自動增長的話不能執行,本人id不是自動增長,所有無法執行,僅供參考參考)
| insert into student values ('小芳','女','18','初中','137694743','北京市昌平區回龍觀'); |
更改列名顯示名稱(加as)
| select COUNT(name) as'姓名' from bj where name='羊大仙' |
刪除語句(DELETE 語句)
| delete from bj where id=16 |
通過模糊查詢刪除姓胖的
| delete from bj where name like '胖%' |
語句執行前
語句執行后
修改語句(UPDATE)
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
將name為‘羊大仙’的修改為‘胖子’
| update bj set name='胖子' where name='羊大仙' |
執行語句前
執行語句后
or
把胖妹的的地址改成'羊大仙的家里'
| update bj set address='羊大仙的家里' where name='胖妹' |
語句執行前
語句執行后
把性別為男的年級全部改成學前班
| update bj set sex='男' where greadname='學前班' |
執行語句前
執行語句后
主外鍵
首先建立好兩個數據庫
第一個
第二個
開始建立主外鍵
在右鍵數據庫關系圖》新建數據庫關系圖》選自己建立的哪啊兩個表》添加》在自命名保存
查看數據庫:yyyyy
查看數據庫:ydxx
在數據庫yyyyy中添加數據
查看(應該之前添加過數據有刪除,所以這里的id從24開始增長的)
開始在ydxx表中插入外鍵關聯
插入成功
查看
插入沒有的id值
執行命令
結束。。。。。
更改列查詢
| select id as '學好',name as '姓名', age as '年齡',sex as '性別',gradeid as '年齡',address as '地址',phone as '電話' from ydxx |
兩表聯查
第 一種:兩表聯查
| select ydxx.id as '學號',name as '姓名', age as '年齡','年齡',address as '地址',phone as '聯系方式',yyyyy.gradename as '班級' from ydxx , yyyyy |
子查詢
子查詢是一個嵌套在 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 |
查詢阿宗在那個班級
| select yyyyy.gradename from yyyyy where id = (select gradeid from ydxx where name = '阿宗') |
查詢二年級的所有學生
| select name,age,sex,gradeid from ydxx where ydxx.gradeid=(select id from yyyyy where gradename='二年級') |
查詢二年級的所有學生
| select ydxx.name,ydxx.sex, ydxx.age from ydxx where ydxx.gradeid =(select id from yyyyy where gradename like '二年級') |
嵌套子查詢
| select name,sex,(select (select 1+5)+2) as '分數' from ydxx |
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 |
2、MAX函數
2.1、查詢班級里最大的年齡
| SELECT MAX(ydxx.age)as '最大年齡' from ydxx |
3、MIN函數
3.1 查詢班級里最小的年齡
| SELECT MIN(ydxx.AGE)AS '最小年齡' FROM YDXX |
3.2、同時查詢最大的年齡和最小的年齡
| select MAX(ydxx.age) as '最大年齡',MIN(ydxx.age) as '最小年齡' from ydxx |
4、AVG函數
4.1、查詢平均年年
| select AVG(ydxx.age) as '平均年齡' from ydxx |
4.2、查詢大於平均年年齡的學員
| select name,age,sex,gradeid from ydxx where ydxx.age>(select AVG(ydxx.age) as '平均年齡' from ydxx) |
5、SUM函數
5.1、查詢所有學員年齡的總和
| select sum(ydxx.age) as '所有學員年齡的總和' from ydxx |
后帶更新。。。。






























































































