C:create 增長,建立,向數據庫裏面添加數據。mysql
insert into Fruit values('K009','蘋果',3.0,'高青',90,'')sql
insert into Fruit(Ids,Name,Price,Source,Numbers) values('K010','蘋果',3.0,'高青',90)數據庫
2、改函數
U:update修改,從數據庫表裏面修改數據。測試
update Fruit set Source='煙臺' where Ids='K001'ui
3、刪spa
D:delete刪除,從數據庫中刪除數據。code
delete from Fruit where Ids='K007'blog
事務:出現了錯誤,能夠進行回滾排序
加事務:begin tarn
回滾:rollback
4、查
R:retrieve檢索,查詢,從數據庫裏面查詢數據。
A、簡單查詢
1、查詢表名和列名
1.查詢全部 select * from 表名
2.查指定列 select 列名,列名 from 表名
3.替換列名 select Ids '代號',Name '名稱',Price '價格',Source '產地' from Fruit
select Ids AS '代號',Name AS '名稱',Price AS '價格',Source AS '產地' from Fruit
4.查指定行
select * from Fruit where Ids='K006'
select * from Fruit where Price=2.4 and Source='煙臺'
select * from Fruit where Price between 2.0 and 4.0
select * from Fruit where Numbers in (90,80,70)
select *from 表名
select 列1,列2···from 表名
B、篩選
select top 3* from 表名 查詢表的前三行
select top 3 列名 from 表名 where age >22 查詢年齡大於22 歲的的前三行
一、等值與不等值
select *from 表名 where 列名=(!= ,>,<,>=,<=)值
二、多條件與範圍
select*from 表名 where 條件 1 and或or 條件2 -- 查指定行按條件查
select*from 表名where between····and··· --查指定行按範圍查
select*from 表名 where 列 in(值)--查指定行,離散查
select distinct 列名 from表名 去重只能是一列
三、模糊查詢
select * from News where title like '%。。。' --查以。。結尾的
select * from News where title like '。。。%' --查以。。開頭的
select * from News where title like '%。。。%' --查以包含。。。的
select * from News where title like '%。。。_'--,查。。。以後只有一個字符的
C、排序
select *from 表名 order by 列名 asc/ desc 把一列進行升序或者降序排列
select*from 表名 where age<25 order by age asc ,code desc 把小於年齡25歲的按照升序排列,若是有相同年齡的,再把相同年齡的按照降序排列
a、聚合函數
count(),max(), min(),sum(),avg()
select count(*) from 表名 where 列名 統計總行數
select count(列名)from 表名 只統計這一列中的非空值,若是有一格爲空,會少統計一行
select min(列名) from 表名 找這一列的最小值
select avg(列名)from 表名 算這一列的平均分
b、group by....having.....
一、group by後面跟的是列名
二、一旦使用group by分組了,則select 和from中間就不能用星號,只能包含兩類東西,一類是 group by後面的列名,另外一類是統計函數
select 列名,avg(列名) from 表名 group by 列名
having 後面通常跟的統計函數,根據分組後的結果進行進一步篩選
select 列名 from 表名 group by 列名 having count(*)>1 能夠把重複的找出來,而且顯示有幾個相同的
一、鏈接查詢
select * from 列名,列名 -- 造成笛卡爾積
select * from Info,Nation where Nation.Code=Info.Nation
join on 內鏈接(列的鏈接)
select * from Info join Nation on Info.Nation = Nation.Code
eg
--查哪位學生的哪一門課考了多少分?
select student.sname,course.cname,score.degree from student join score on score.sno=student.sno join course on course.cno = score.cno
右鏈接,右邊表必須顯示全,若是在左邊表沒有與之對應的信息,則補空值
select * from Info right join Nation on Info.Nation=Nation.Code
左鏈接,左邊表必須顯示全,若是在右邊表沒有與之對應的信息,則補空值
select * from Info left join Nation on Info.Nation=Nation.Code
全鏈接,左右兩邊的表都顯示徹底
select * from Info full join Nation on Info.Nation=Nation.Code
二、聯合查詢(行的擴展)
對於查出的兩個或多個結構相同的表聯合顯示
select Code,Name from Info union select Info Code,Name from Family
三、子查詢
--子查詢的結果當作父查詢的條件
select * from Info
--無關子查詢,子查詢執行是獨立的,和父查詢是沒有關係的(沒有用到父查詢的東西)
select * from Info where year(Birthday)=(
select YEAR(Birthday) from info where Code='p005')
--相關子查詢
select * from teacher
--求計算機系和電子工程系不一樣職稱的老師信息
select * from teacher t1 where depart='計算機系' and not exists(
select * from teacher t2 where depart='電子工程系' and t1.prof = t2.prof)
union
select * from teacher t1 where depart='電子工程系'
and not exists(
select * from teacher t2 where depart='計算機系' and t1.prof = t2.prof
)
--查詢除了每門課最高分以外的其餘學生信息。
select * from score where degree not in(select MAX(degree) from score group by cno)--錯誤
select * from score s1 where degree not in(
select MAX(degree) from score s2 group by cno having s1.cno = s2.cno
)
--select * from score where degree not in(86,75)
--分頁
select top 5 * from Car -- 前5條數據,第一頁
select top 5 * from Car where Code not in(
select top 5 Code from Car
eg
-查找男同志裏面年齡最大的所有信息
select *from haha where age=(select MAX(age)from haha where sex='男')and sex='男'
select top 1* from haha where sex='男' order by age desc
) -- 第二頁的數據
select top 5 * from Car where Code not in(
select top 10 Code from Car
) --第三頁的數據
select top 5 * from Car where Code not in(
select top (5*2) Code from Car
)
select ceiling(COUNT(*)/5) from Car --求總頁數
select * from Car where 條件 limit 跳過幾條數據,取幾條數據 --mysql裏面的分頁
總結注意:
1、Select 語句的測試順序:
From 子句
Where子句 (可選)
Group by子句 (可選)
Having子句 (可選)
Select子句
Order by 子句(可選)
Between and 條件包含臨界值
2、
天然鏈接
一、Select * from table1,table2,table3 where table1.主鍵=table2.外鍵 and table2.主鍵=table3.外鍵 (注意此處也能夠用and 鏈接)
二、注意 * 裏面,若是說 兩個標的列名不一樣 則不用table.列名,直接寫列名
三、any 只要有一個 all 全部
四、exists 只要能查詢到結果就返回 真,結果爲空就返回 假。
3、
--相關子查詢總結
一、內層查詢與外層查詢同時進行
二、限定條件 的添加,
三、問題要求都是要求兩個條件
a、主要是爲了區分 不一樣同組 (能夠分組的狀況下)。eg.求各科除最高分之外的成績。
select *from Score s1 where Degree not in (select MAX(Degree) from Score s2 group by Cno having s1.Cno=s2.Cno)
b、如何經過內層查詢,添加的能夠限制在外層查詢時出現重複的條件。eg.查詢和「李軍」同性別並同班的同窗Sname.
select *from Student s1 where Ssex in (select Ssex from Student s2 where Sname='李軍' and s1.Class=s2.Class)
c、查詢「計算機系」與「電子工程系「不一樣職稱的教師的Tname和Prof。
select Tname,Prof from Teacher t1 where Depart='電子工程系' and not exists(select *from Teacher t2 where Depart='計算機系' and t1.Prof=t2.Prof)
union
select Tname,Prof from Teacher t1 where Depart='計算機系' and not exists(select *from Teacher t2 where Depart='電子工程系' and t1.Prof=t2.Prof)
更新一條數據時操做:
update zb set zb_px=(zb_px+1) where zb_ids='106'--對id=106的數據加1操做