MySQL資料操作管理——學習筆記
8.1插入資料
8.1.1為表的所有欄位插入資料
- l insert into student values(‘0’,’小李’,’1班’);
- l Insert into student (sno,sname,ssex,sclass)values (‘1’,’李明’,’男’,’1班’);
注意:第一種比較簡單,第二種可以不按照欄位順序插入,同時記錄也要隨之更改。
8.1.2為表指定欄位插入欄位
Insert into student(sno,sname) values (‘2’,’小紅’);
沒有賦值的欄位,資料庫系統會為其插入預設值,如NULL,否則會報錯。
注意:可任意改變欄位順序。
8.1.3同時插入多條記錄
Insert into student values(),(),()
注意:沒有指定欄位時則向所有欄位插入資料,否則按指定欄位來。
8.1.4從目標表中插入值
Insert into student 【列名列表】select 列名列表from 表名
注意:一個或多個表;返回結果和插入欄位型別要保持一致
8.1.5replace語句
Replace into student values();
注意:如果新記錄的主鍵值或者唯一性的欄位值與已有的記錄相同,則已有的被刪除後再新增新紀錄。
8.2修改資料
Update student set sname=’李凱’,sbirth=’2000-08’ where sno=’1’;
注意:update語句會更新所有滿足條件的記錄,但在mysql中是需要一條一條執行的。
8.3刪除資料
8.3.1使用delete刪除表資料
Delete from student where sno=’1’;
注意:如果不加上where條件表示式,資料庫系統會刪除指定表中的所有資料。
8.3.2使用truncate清空資料
Truncate table student;
Truncate、delete、drop的區別:
- ² Truncate table:刪除內容、釋放空間、不刪除定義
- ² Delete table:刪除內容、不釋放空間、不刪除定義
- ² Drop table:刪除內容、釋放空間、刪除定義
8.4單表查詢
8.4.1簡單查詢
1、所有欄位
- l select zno,zclass,sno,sname from student;
- l Select * from student;
2、指定欄位查詢
Select sno,zname from student;
3、避免重複資料查詢
Distinct 關鍵字可以去除重複的查詢記錄
Select distinct sclass from student;
4、為表和欄位取別名
Select sno’學號’,grade’成績’ from student;
8.4.2條件查詢
- Select sno,grade from sc where grade>90;
- Select * from sc where grade>=70 and grade <=80;
- Select * from sc where grade [not] in (66,87,98);
- Select * from sc where [not] between 75 and 80;
- Select sno,grade from sc where zno is null;(查詢是否為空值)
- 帶like關鍵字查詢
[not] like ‘字串’
字串必須要加單引號或者雙引號,字串除了是一個完整的字串之外,還可以是百分號%或者下劃線_的萬用字元
l “%”代表任意長度的字串,長度可以為0
l “_”只能是單個字元,例如B_,就是以B開頭的兩個字元
l regexp關鍵字匹配正則表示式
Select * from student where sname like ‘藍莓’;
Select * from student where sname like ‘李%’;
Select * from student where sname like ‘李__’;
Select * from student where sname not like ‘李__’;
注意:當字串本身含有萬用字元“%”,“_”時,那麼使用“\_”表示“_”,用escape ’\’ 表示“\”。
8.4.3高階查詢
1、分組查詢
group by
Select * from student group by ssex;
往往加上“having”條件表示式,限制輸出結果。
Select ssex,count(ssex) from student group by ssex having count(ssex)>=10;
注意:having條件表示式與where條件表示式都是用來限制顯示的,但是where作用於表和檢視,having作用於分組後的記錄。
2、對查詢結果進行排序
order by [ASC | DESC]
ASC為升序(1,2,3),DESC為降序(3,2,1,)預設ASC;
Select * from student order by zno,ASC,sno DESC;
3、限制結果數量
Select * from student order by sno limit 2,3;第3條記錄顯示3條
4、聚合函式
count
Select count(*) as ‘學生總人數’ from student;
Select zno,count(*) as ‘專業人數’ from student group by zno;
Sum
Select sno,sum(grade) from student where sno=’1’;
Avg
Select cno,avg(grade) as ‘平均成績’ from student group by cno;
Max
Select sno,cno,max(grade) from sc group by cno;
Min
Select sno,cno,min(grade) from sc group by cno;
注意:以ascii表比較大小,a最小,z最大
5、合併查詢結果
查詢女生的資訊或者出生日期“**”以後出生的學生資訊
Select * from student where ssex=’女’
union select * from student where sbirth>’1997-01-08’
8.5多表查詢
多表資料記錄連線查詢又稱連線查詢,連線查詢又分為內連線查詢和外連線查詢;主要區別在於,內連線僅選出兩張表中互相匹配的記錄,而外連線會選出其他不匹配的記錄。
8.5.1內連線查詢
1、等值連線
Select * from sc inner join course on sc.no=course.no limit 4;
2、自然連線(可理解等值連線中吧重複的屬性列去掉則為自然連線)
Select *from sc natural join course limit 4;
3、不等值連線
Select * from sc inner join course on sc.no!=course.no limit 4;
8.5.2外連線查詢
1、左外連線
select course.no,course.cname from course left join sc on course.cno=sc.cno limit 10;
2、右外連線
select course.no,course.cname from course right join sc on course.cno=sc.cno limit 10;
8.5.3子查詢
有時候需要的條件是另一個select語句的結果
1、Select * from student where sno IN (select sno from sc);
如果有金融這個專業就顯示出課程資訊
2、Select * from course where EXISTS(select * from specialty where zname=’金融’);
查詢比其他班級某一個同學年齡小的學生的姓名和年齡
3、Select sname,sbirth from student where sbirth>ANY(select sbirth from student where sclass=’計算102’);
4、查詢比其他班級所有同學年齡大的學生的姓名和年齡
Select sname,sbirth from student where sbirth<ALL(select sbirth from student where sclass=’計算102’);