1. 程式人生 > 資料庫 >MySQL資料操作管理——學習筆記

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條件查詢

  1. Select sno,grade from sc where grade>90;
  2. Select  *  from sc where grade>=70 and grade <=80;
  3. Select  *  from sc where grade [not] in (66,87,98);
  4. Select  *  from sc where [not] between 75 and 80;
  5. Select sno,grade from sc where zno is null;(查詢是否為空值)
  6. 帶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’);