程式設計師必備介面測試偵錯工具:
推薦學習:
總的來說,SQL分為四大類,分別是資料定義語言DDL,資料操作語言DML,資料查詢語言DQL和資料控制語言DCL。
而SQL的基本操作一般是指對資料庫,資料表,資料的增刪改查。
首先要學習的是使用DDL來對資料庫進行操作,主要是對資料庫的增刪改查操作。
查詢所有的資料庫:
show databases;
登入後複製
例如:
建立新的資料庫:
create database 資料庫名稱;
登入後複製
使用上面的方式建立新的資料庫時,如果該資料庫已經存在,則會出現錯誤,所以我們在建立新的資料庫時一般會判斷該資料庫是否存在,如果已存在,則不會建立。
建立新的資料庫(判斷資料庫是否已經存在):
create database if not exists 資料庫名稱;
登入後複製
例如:
刪除資料庫:
drop database 資料庫名稱;
登入後複製
和前面建立新的資料庫相同,為了避免出現錯誤,我們一般會先判斷該資料庫是否存在,如果不存在,則不會刪除。
刪除資料庫(判斷資料庫是否已經存在):
drop database if exists 資料庫名稱;
登入後複製
例如:
現在我們已經成功建立了新的資料庫,接下來,我們要在資料庫中建立資料表,首先我們要明白是對哪一個資料庫進行操作,此時我們要先學會使用資料庫,才能對資料庫中的表進行操作。
使用資料庫:
use 資料庫名稱;
登入後複製
查詢當前正在使用的資料庫:
select database();
登入後複製
例如:
同樣,對資料表的操作無非就是增刪改查,在學習相關操作之前,我們先要熟悉一下MySQL的資料型別。
MySQL支援多種資料型別,但是大致可以分為3中,分別是數值型,日期型和字串型。下面是比較常用的幾種資料型別:
數值:
資料型別 | 解釋 |
---|---|
tinyint | 小整數型,佔1個位元組 |
int | 大整數型,佔4個位元組 |
double | 浮點型別 |
日期:
資料型別 | 解釋 |
---|---|
date | 日期值,只包含年月日 |
datetime | 混合日期和時間值,包含年月日時分秒 |
字串:
資料型別 | 解釋 |
---|---|
char | 定長字串 |
varchar | 變長字串 |
定長字串和變長字串的區別:
字串是我們在資料庫中經常使用的資料型別,使用變長字串,如果字元的長度沒有達到指定的長度,那麼實際的長度是多少就佔用幾個字元,這樣的做法顯然是使用時間換空間,而使用定長字串雖然有時會出現浪費空間的情況,但是一般儲存效能比較高。
查詢當前資料庫下所有的表:
show tables;
登入後複製
查詢表結構:
desc 表名稱;
登入後複製
例如:
建立一個新的表:
create table 表名稱(
欄位名1 資料型別,
欄位名2 資料型別,
...
欄位名n 資料型別 #這裡是不需要加上,的);
登入後複製
例如:
刪除表:
drop table 表名;
登入後複製
刪除表(判斷表是否存在):
drop table if exists 表名;
登入後複製
例如:
修改表名:
alter table 表名 rename to 新的表名;
登入後複製
增加一列:
alter table 表名 add 列名 資料型別;
登入後複製
修改資料型別:
alter table 表名 modify 列名 新資料型別;
登入後複製
修改列名和資料型別:
alter table 表名 change 列名 新列名 新資料型別;
登入後複製
刪除列:
alter table 表名 drop 列名;
登入後複製
例如:
需求:設計包含如下資訊的學生表,請注重資料型別、長度的合理性。
編號
姓名,姓名最長不超過10個漢字
性別,因為取值只有兩種可能,因此最多一個漢字
生日,取值為年月日
成績,小數點後保留兩位
地址,最大長度不超過 64
學生狀態(用數位表示,正常、休學、畢業…)
在完成這樣一個案例前,首先要建立一個學生資料庫,在資料庫中建立一張新的表,建立表時注意語法格式,資料型別和長度的合理性。
以管理員身份執行命令提示字元cmd,啟動Mysql服務,登入MySQL:
建立學生資訊資料庫:
create database if not exists student;
登入後複製
使用student
資料庫:
use student;
登入後複製
建立資料表:
create table stu(
id int ,-- 編號
name varchar(10),-- 姓名
gender char(1),-- 性別
birthday date,-- 生日
score double(5,2) ,-- 分數
addr varchar(50),-- 地址
status tinyint-- 狀態);
登入後複製
現在,我們已經學會了寫SQL來運算元據庫,但是我們在命令列中寫SQL時,往往有體驗感差,效率低等問題,今天開始我們就要學習在MySQL的圖形化使用者端Navicat中執行SQL語句
。
Navicat 為資料庫管理、開發和維護提供了一款直觀而強大的圖形化介面,大大的提高了工作效率,建議在學習中也使用這款開發工具。接下來,在Navicat中新建資料庫,新建查詢,我們就可以編寫SQL並且執行SQL語句了。
給指定列新增資料:
insert into 表名(列名1,列名2...) values(值1,值2...);
登入後複製
給全部列新增資料:
insert into 表名 values(值1,值2...);
登入後複製
批次新增資料:
insert into 表名(列名1,列名2...) values(值1,值2...),(值1,值2...),(值1,值2...)...;
登入後複製
批次新增資料(省略欄位名):
insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...)...;
登入後複製
在開發過程中新增資料時是不建議省略欄位名的,這樣降低了程式碼的可讀性,使效率下降。例如:
查詢表中的所有資料的方法是:
select * from 表名;
登入後複製
登入後複製
後面會用到的。
需求:往下面的tb_user
表中新增一條資料。
insert into tb_user(id,name) values(2,'李四');
登入後複製
新增成功:
修改表的資料:
update 表名 set 列名1=值1,列名2=值2...[where 條件];
登入後複製
在修改資料時,也可以不使用where條件,此時的操作是修改整列資料,這樣的操作是很危險的。
需求:把下面tb_user
表中的張三的密碼改為abc23
update tb_user set passwor d ='abc123' where name='張三';
登入後複製
修改成功:
刪除表的資料:
delete from 表名 [where 條件];
登入後複製
在刪除某條資料時,如果不使用where條件,將會導致刪除整個表的資料。
需求:刪除tb_user表中的李四記錄。
delete from tb_user where name='李四';
登入後複製
操作成功:
查詢是資料操作至關重要的一部分,
比如說在所有商品中查詢出價格在規定範圍內的所有商品,要想把資料庫中的資料在使用者端中展示給使用者,一般都進行了查詢的操作。
在實際開發中,我們要根據不同的需求,並且考慮查詢的效率來決定怎樣進行查詢,學習查詢前,可以先看看查詢的完整語法:
SELECT
欄位列表FROM
表名列表WHERE
條件列表GROUP BY
分組欄位HAVING
分組後條件ORDER BY
排序欄位LIMIT
分頁限定
登入後複製
根據查詢的完整語法中的關鍵字,我們分別來學習基礎查詢,條件查詢,排序查詢,分組查詢和分頁查詢。
下面的練習中使用以下的案例學習單表查詢:
-- 刪除stu表drop table if exists stu;-- 建立stu表CREATE TABLE stu (id int, -- 編號name varchar(10), -- 姓名age int, -- 年齡gender varchar(5), -- 性別math double(5,2), -- 數學成績english double(5,2) -- 英語成績);-- 新增資料INSERT INTO stu(id,name,age,gender,math,english)VALUES(1,'小張',23,'男',66,78),(2,'小李',20,'女',98,87),(3,'小陳',55,'男',56,77),(4,'小樊',20,'女',76,65),(5,'小馬',20,'男',86,NULL),(6,'小趙',57,'男',99,99);
登入後複製
在Navicat中選中SQL並執行:
查詢多個欄位:
select 欄位列表 from 表名;
登入後複製
查詢全部欄位:
select * from 表名;
登入後複製
登入後複製
去除重複記錄:
select distinct 欄位列表 from 表名;
登入後複製
起別名操作:
select 欄位名 別名 from 表名;
登入後複製
使用學生表進行基礎查詢練習:
查詢多個欄位的練習:
select name,math from stu;
登入後複製
起別名操作練習:
select name,english 英語成績 from stu;
登入後複製
一般語法:
select 欄位列表 from 表名 where 條件列表;
登入後複製
條件查詢一般配合執行符進行,下面是常見的幾個運運算元:
運運算元 | 功能描述 |
---|---|
> < = ! | 大於 小於 等於 不等於 |
between…and… | 在這個範圍之內 |
in(…) | 多選一 |
is null / is not null | 是null / 不是null |
and 或 && | 並且 |
or 或 || | 或者 |
使用學生表進行條件查詢練習:
查詢年齡大於20的學生資訊:
select * from stu where age>20;
登入後複製
查詢年齡等於18歲 或者 年齡等於20歲 或者 年齡等於21歲的學生資訊:
select * from stu where age in(18,20,21);
登入後複製
模糊查詢使用like關鍵字,可以使用萬用字元進行佔位:
查詢姓名中含有張的學生資訊:
select * from stu where name like '%張%';
登入後複製
select 欄位列表 from 表名 order by 排序欄位名1 [排序方式]...;
登入後複製
注:排序方式有兩種:分別是升序ASC和降序DESC,預設情況下是升序ASC。
使用學生表進行排序查詢練習:
查詢學生資訊,按照數學成績降序排列:
select * from stu order by math DESC;
登入後複製
什麼是聚合函數呢?在進行查詢操作時,往往需要對一整列進行運算,例如可以計算一整列成績資料的平均值,我們就要使用聚合函數。下面是常見的聚合函數:
函數名 | 功能 |
---|---|
count(列名) | 統計數量(一般選用不為null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
一般語法:
select 聚合函數 from 表名;
登入後複製
注:NULL值不參與聚合函數運算。
使用學生表進行聚合函數的練習:
統計該表中一共有幾個學生:
select count(id) from stu;
登入後複製
上面我們使用某一欄位進行運算,這樣做可能面臨的問題是某一個值可能是NULL,所以我們一般使用 *
進行運算,因為一行中不可能所有的欄位都是NULL。
select count(*) from stu;
登入後複製
查詢數學成績的平均分:
select avg(math) from stu;
登入後複製
select 欄位列表 from 表名 [where 分組前的條件限定] group by 分組欄位名 [having 分組後的條件過濾]
登入後複製
注:分組之後,查詢的欄位為聚合函數和分組欄位,查詢其他欄位無任何意義。
使用學生表進行分組查詢練習:
查詢男同學和女同學各自的數學平均分,以及各自人數,要求:分數低於70分的不參與分組:
select gender, avg(math),count(*) from stu where math > 70 group by gender;
登入後複製
查詢男同學和女同學各自的數學平均分,以及各自人數,要求:分數低於70分的不參與分組,分組之後人數大於2個的:
select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) > 2;
登入後複製
注:where 和 having
執行時機不一樣:where 是分組之前進行限定,不滿足where條件,則不參與分組,而having是分組之後對結果進行過濾。所以,where 不能對聚合函數進行判斷,having 可以。
在我們的印象中,網頁在展示大量的資料時,往往不是把資料一下全部展示出來,而是用分頁展示的形式,其實就是對資料進行分頁查詢的操作,即每次只查詢一頁的資料展示到頁面上。
select 欄位列表 from 表名 limit 查詢起始索引,查詢條目數;
登入後複製
在 limit
關鍵字中,查詢起始索引這個引數是從0開始的。
使用學生表進行分頁查詢練習:
從0開始查詢,查詢3條資料:
select * from stu limit 0,3;
登入後複製
起始索引 = (當前頁碼 - 1) * 每頁顯示的條數
推薦學習:
以上就是MySQL基本操作(CRUD)詳解的詳細內容,更多請關注TW511.COM其它相關文章!