java_DAY20:使用DML,DQL操作資料庫
1:使用DML操作資料庫
1:DML是什麼
資料操縱語言(Data Manipulation Language, DML)是SQL語言中,負責對資料庫物件執行資料訪問工作的指令集,以INSERT、UPDATE、DELETE三種指令為核心,分別代表插入、更新與刪除,是開發以資料為中心的應用程式必定會使用到的指令,因此開發人員都把加上SQL的SELECT語句的四大指令以“CRUD”來稱呼。
DML 的主要功能即是訪問資料,因此其語法都是以讀取與寫入資料庫為主,除了INSERT以外,其他指令都可能需搭配WHERE指令來過濾資料範圍,或是不加WHERE指令來訪問全部的資料。
DML(資料操作語言)用於操作資料庫物件中所包含的資料
包括
INSERT ( 新增資料語句 )
UPDATE ( 更新資料語句 )
DELETE ( 刪除資料語句 )
2:INSERT ( 新增資料語句 )
語法:insert into 表名(列名,列名,列名...) values(值,值,值...); 為資料表的每列進行賦值
注意事項
1) 插入值 型別必須和 列型別匹配
2) 值長度不能超過 列定義長度
3) 值的順序和 列順序對應
4) 字串和日期型值 必須寫 單引號
5) 插入空值 可以寫 null
3:UPDATE ( 更新資料語句 )
語法: update 表名 set 列名=值,列名=值.... where條件語句;
真正修改的內容是
Where 的作用是定位 - 選擇,限制
如果不加where條件語句的話,會作用在所有的記錄上
WHERE條件子句:有條件地從表中篩選資料
4:DELETE ( 刪除資料語句 )
語法:delete from 表名 where條件語句 ;
如不指定則刪除該表的所有列資料
TRUNCATE命令
用於完全清空表資料,但表結構、約束等不變
TRUNCATE和delete的區別
truncate tablename命令將快速刪除資料表中的所有記錄,但保留資料表結構。
這種快速刪除與delete from 資料表的刪除全部資料表記錄不一樣,delete命令刪除的資料將儲存在系統回滾段中,需要的時候,資料可以回滾恢復,而truncate命令刪除的資料是不可以恢復的
最直觀是:
1.TRUNCATE TABLE是非常快的 ,delete相對慢一些
2.TRUNCATE之後的自增欄位從頭開始計數了,而DELETE的仍保留原來的最大數值
3:TRUNCATE刪除的資料不可恢復,delete刪除的資料可以恢復
2:DQL
1:簡單查詢
準備:新建一個考試成績表,並新增資料
create table exam(
id int primary key auto_increment,
name varchar(20) not null,
chinese double,
math double,
english double
);
insert into exam values(null,'關羽',85,76,70);
insert into exam values(null,'張飛',70,75,70);
insert into exam values(null,'趙雲',90,65,95);
insert into exam values(null,'劉備',null,55,38);
語法一 :
select [distinct] * /列名,列名... from 表名;
select * from 表名; 查詢該表中所有列資訊
select 列名,列名... from 表名; 查詢表中指定列的資訊
distinct 用於排重
1: 查詢表中所有學生的考試成績資訊。
2: 查詢表中所有學生的姓名和對應的英語成績。
英語老師需要查詢班級英語成績
語法二:
select 表示式(列名執行運算) from 表名;
select 列名 as 別名 from 表名;
1:在所有學生各門分數上加10分特長分。
2: 統計每個學生的總分。
3: 使用別名表示學生分數。
在對列起別名時,as可以省略
語法三:
select 列名 from 表名 where條件語句
1: 查詢姓名為關羽的學生成績
2: 查詢英語成績大於90分的同學
3: 查詢總分大於200分的所有同學姓名和對應的各科成績以及總分
2:查詢之運算子
1:相等= 不等 <>或者 !=
2:between ...and... 在兩者之間取值 between 70 and 80 等價於 >=70 <=80
注意:前面那個數要比後面那個數要小
3:in(值,值,值) 在指定值中任取一個 in(70,80,90) 值可以是70、80或者90
查詢英語成績為70,80,90的人的資訊
4:like '模糊查詢,表達式有兩個佔位符 % 任意字串 _ 任意單個字元 張_ 張%
例如: name like '張%' 所有姓張學員 ,'%張%'; 含有張字
name like '張_' 所有姓張名字為兩個字學員
5:is null 判斷該列值為空
Is not null 判斷不是為null
6:and 邏輯與 or 邏輯或 not 邏輯非
`