数据库自学-SQL-四大SQL语句DDL、DML、DQL、DCL
目錄
DDL-介紹
1.DDL-數據庫操作
2.DDL-表操作-查詢
3.DDL-表操作-創(chuàng)建
?4.DDL-表操作-數據類型
(案例)-根據需求創(chuàng)建表(設計合理的數據類型、長度)
DDL-表修改-修改
DDL-表操作-刪除
DDL-小結
DML-介紹
DML-添加數據
DML-修改數據
DML-刪除數據
DML-小結
DQL-介紹
DQL-語法?編輯
DQL-基本查詢
DQL-條件查詢
DDL-聚合函數
DQL-分組查詢
DQL-排序查詢
DQL-分頁查詢
?案例
DQL-執(zhí)行順序
DQL-小結
DCL-介紹
DCL- 管理用戶
DCL-權限控制
DCL-小結
DDL-介紹
Data Definition Language,數據定義語言,用來定義數據庫對象(數據庫,表,字段) 。1.DDL-數據庫操作
查詢所有數據庫?
SHOW DATABASE;查詢當前數據庫
SELECT DATABASE();創(chuàng)建
CREATE DATABASE[IF NOT EXISTS]數據庫名[DEFAUT CHARSET 字符集][COLLATE 排序規(guī)則]刪除
drop databas[if exit]數據庫名;使用
USE 數據庫名;2.DDL-表操作-查詢
查詢當前數據庫所有表;
show database;查詢表結構
desc 表名;?查詢指定的建表語句
show create table 表名;3.DDL-表操作-創(chuàng)建
create table 表名(
字段1 字段1類型[comment 字段1注釋],
字段2 字段2類型[comment 字段2注釋],
字段3 字段3類型[comment 字段3注釋],
字段3 字段3類型[comment 字段3注釋],
...
)[comment 表注釋]
?注釋:[..]為可選參數,最后一個字段后面沒有逗號
創(chuàng)建一個表:
查詢表結構:desc 表名;
?展示詳細信息:show create table 表名;
?4.DDL-表操作-數據類型
主要分為三類:數值類型、字符串類型、日期時間類型
1.數值類型:
?類似java語言中的 ?short int long float double;
例:
age TINYINT UNSIGNED
score double(4,1)//第一位表示整體長度,第二個表示小數位數
2.字符串類型:
?char(10),未占用字符其他空間用空格進行部位--》性能好
varchar(10)占用空間根據你所存儲的內容--》性能較差
例:用戶名 usename varchar(50)
性別 gender char(1)
3.日期時間類型:
例 birthday date??
(案例)-根據需求創(chuàng)建表(設計合理的數據類型、長度)
設計一張員工信息表,要求如下:
1.編號(純數字)
2.員工工號(字符串類型 長度不超過10位)
3.員工姓名(字符串類型,長度不超過10位)
4.性別(男/女,存儲一個漢字)
5.年齡(正常人年齡,不可能存儲負數)
6.身份證號碼(二代身份證號均為18位,身份證中有x這樣的字符)
7.入職時間(取值年月日即可)
create table employee(
id int comment '編號',
workname varchar(10) comment '工號',
name varchar(10)comment '姓名',
gender char (1)comment '性別',
age tinyint unsigned comment '年齡',
idcard char(18)comment '身份證',
entrydate date comment '入職時間'
)comment '員工表';
注:要先建立庫,再用use 庫名來使用該數據庫,之后再建立表。
DDL-表修改-修改
添加字段
alter table 表名 add 字符名 類型 (長度) [comment 注釋] [約束];(案例)為emp表添加一個新的字段1“昵稱”為nickname,類型為varchar(20)
alter table emp add nickname varchar(20) comment '昵稱';修改數據類型
alter 表名 modify 字段名 新數據類型(長度);修改字段名和字段類型
alter table 表名 change 舊字段名 新字段名 類型(長度)[commment 注釋][約束];(案例)將emp表中的nickname字段該為username,類型為varhar(30)
alert table emp change nickname username varchar(30) comment'用戶名';刪除字段
alter table 表名 drop 字段名;例:alter table emp drop username;
修改表名
alter table 表名 rename to 新表名;例:alter table emp rename to emplyee;
DDL-表操作-刪除
刪除表
drop table if exits 表名;刪除指定表,重新創(chuàng)建表//相當于清空數據
truncate table 表名;DDL-小結
DML-介紹
DML英文全稱是Data Manipulation Language(數據操作語言,用來對數據記錄進行增刪改查)
添加數據(insert)
修改數據(update)
刪除數據(delete)
DML-添加數據
1.給指定字段添加數據
insert 表名(字段名1,字段名2...) values(值1,值2..);2.給全部字段添加數據
insert 表名 value (值1,值2..);3.批量添加數據
insert 表名(字段名1,字段名2...) values(值1,值2..),values(值1,值2..),values(值1,值2..); insert 表名 values(值1,值2..),values(值1,值2..),values(值1,值2..);注:
1.插入數據時,指定字段的順序需要和值順序一一對應
2.字符串和日期型數據應該包含在引號中
3.插入的數據大小,應該在字段的規(guī)定范圍內
insert into employee (id, workname, name, gender, age, idcard, entrydate) values (1,'1','Itcast','男',10,'12345678','2002-1-01');select * from employee;//顯示表insert into employee values (1,'2','張三','男',18,'1234567812345670','2005-01-01');insert into employee values (3,'3','李四','男',18,'1234567812345670','2005-01-01'),(4,'4','小五','男',18,'12345678145654','2005-01-01');?
?
DML-修改數據
update 表名 set 字段一=值1,字段2 = 值2,..[where 條件];注:修改語句可以有,也可以沒有,如果沒有則會修改整張表的所有數據。
DML-刪除數據
delete from 表名 [where 條件];注:
1.delete語句條件可以有,也可以沒有,如果沒有,則會刪除整張表的所以數據。
2.delete語句不能刪除某一個字段的值(可以使用updata)
-- 刪除 gender 為女生的員工 delete from employee where gender = '女';-- 刪除所以員工 selete from employee;DML-小結
?
DQL-介紹
DQL:Data Query Languge(數據查詢語言),數據查詢語言,用來查詢數據庫中表的記錄。、
查詢關鍵字:select
DQL-語法
DQL-基本查詢
1.查詢多個字段1
select 字段1,字段2,字段3.. from 表名;select * from 表名;2.設置別名
select 字段1[AS 別名1],字段2[AS 別名2].... from 表名;3.去除重復記錄
select distinct 字段列表 from 表名;案例:
查詢指定字段 name, workno, age并返回 select name,workno,age from emp; 查詢返回所有字段 select * from emp; 查詢所有員工的工作地址,起別名 ??????? select workaddress as '工作地址' from emp; -- as可以省略 select workaddress '工作地址' from emp; 查詢公司員工的上班地址有哪些(不要重復) select distinct workaddress '工作地址' from emp;?
DQL-條件查詢
1.語法
SELECT 字段列表 FROM 表名 WHERE 條件列表 ;2.條件
常見的比較運算符:
?常見的邏輯運算符:
案例: A. 查詢年齡等于 88 的員工 select * from emp where age = 88;B. 查詢年齡小于 20 的員工信息
???????select * from emp where age < 20;??????? C. 查詢年齡小于等于 20 的員工信息
???????select * from emp where age <= 20; D. 查詢沒有身份證號的員工信息 ??????? select * from emp where idcard is null;E. 查詢有身份證號的員工信息
select * from emp where idcard is not null;F. 查詢年齡不等于 88 的員工信息
select * from emp where age != 88;? select * from emp where age <> 88;G. 查詢年齡在15歲(包含) 到 20歲(包含)之間的員工信息
select * from emp where age >= 15 && age <= 20; select * from emp where age between 15 and 20;H. 查詢性別為 女 且年齡小于 25歲的員工信息
select * from emp where gender = '女' and age < 25;I. 查詢年齡等于18 或 20 或 40 的員工信息
select * from emp where age = 18 or age = 20 or age =40; select * from emp where age in(18,20,40);J. 查詢姓名為兩個字的員工信息 _ %
select * from emp where name like '__';//兩個下劃線K. 查詢身份證號最后一位是X的員工信息
select * from emp where idcard like '%X'; select * from emp where idcard like '_________________X';DDL-聚合函數
1.介紹
將一列數據作為一個整體,進行縱向計算 。
2.常見的聚合函數
?3.語法
SELECT 聚合函數(字段列表) FROM 表名 ;(案例)
統(tǒng)計該企業(yè)員工數量 select count(*) from emp; -- 統(tǒng)計的是總記錄數select count(idcard) from emp; -- 統(tǒng)計的是idcard字段不為null的記錄數 統(tǒng)計該企業(yè)員工的平均年齡 select avg(age) from emp; 統(tǒng)計該企業(yè)員工的最大年齡 select max(age) from emp; 統(tǒng)計西安地區(qū)員工的年齡之和 select sum(age) from emp where workaddress = '西安';DQL-分組查詢
1.語法
SELECT 字段列表 FROM 表名 [ WHERE 條件 ] GROUP BY 分組字段名 [ HAVING 分組 后過濾條件 ]; 2. where與having區(qū)別 執(zhí)行時機不同:where是分組之前進行過濾,不滿足where條件,不參與分組;而having是分組 之后對結果進行過濾。 判斷條件不同:where不能對聚合函數進行判斷,而having可以。 注: ? 分組之后,查詢的字段一般為聚合函數和分組字段,查詢其他字段無任何意義。 ? 執(zhí)行順序: where > 聚合函數 > having 。 ? 支持多字段分組, 具體語法為 : group by columnA,columnB 案例: 根據性別分組 , 統(tǒng)計男性員工 和 女性員工的數量 select gender, count(*) from emp group by gender ; 根據性別分組 , 統(tǒng)計男性員工 和 女性員工的平均年齡 select gender, avg(age) from emp group by gender ; 查詢年齡小于45的員工 , 并根據工作地址分組 , 獲取員工數量大于等于3的工作地址 select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3; 統(tǒng)計各個工作地址上班的男性及女性員工的數量 select workaddress, gender, count(*) '數量' from emp group by gender , workaddress ;注:
執(zhí)行順序:where 》 聚合函數 》 having
分組之后,查詢的字段一般為聚合函數和分組字段,查詢其他字段無任何意義。
DQL-排序查詢
排序在日常開發(fā)中是非常常見的一個操作,有升序排序,也有降序排序。 1.語法 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;2.排序方式
ASC:升序(默認)
DESC:(降序)
注意事項: ? 如果是升序, 可以不指定排序方式ASC ; ? 如果是多字段排序,當第一個字段值相同時,才會根據第二個字段進行排序 ; (案例) 根據年齡對公司的員工進行升序排序 select * from emp order by age asc;select * from emp order by age; 根據入職時間, 對員工進行降序排序 select * from emp order by entrydate desc; 根據年齡對公司的員工進行升序排序 , 年齡相同 , 再按照入職時間進行降序排序 select * from emp order by age asc , entrydate desc;DQL-分頁查詢
分頁操作在業(yè)務系統(tǒng)開發(fā)時,也是非常常見的一個功能,我們在網站中看到的各種各樣的分頁條,后臺 都需要借助于數據庫的分頁操作。 1.語法 SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查詢記錄數 ; 注意事項: ? 起始索引從0開始,起始索引 = (查詢頁碼 - 1)* 每頁顯示記錄數。 ? 分頁查詢是數據庫的方言,不同的數據庫有不同的實現,MySQL中是LIMIT。 ? 如果查詢的是第一頁數據,起始索引可以省略,直接簡寫為 limit 10。 (案例) 查詢第1頁員工數據, 每頁展示10條記錄 select * from emp limit 0,10; select * from emp limit 10; 查詢第2頁員工數據, 每頁展示10條記錄 --------> (頁碼-1)*頁展示記錄數 select * from emp limit 10,10;?案例
查詢年齡為20,21,22,23歲的員工信息。 select * from emp where gender = '男' and ( age between 20 and 40 ) and name like '___'; 統(tǒng)計員工表中, 年齡小于60歲的 , 男性員工和女性員工的人數。 select gender, count(*) from emp where age < 60 group by gender; 查詢所有年齡小于等于35歲員工的姓名和年齡,并對查詢結果按年齡升序排序,如果年齡相同按 入職時間降序排序。 select name , age from emp where age <= 35 order by age asc , entrydate desc; 查詢性別為男,且年齡在20-40 歲(含)以內的前5個員工信息,對查詢的結果按年齡升序排序, 年齡相同按入職時間升序排序。 select * from emp where gender = '男' and age between 20 and 40 order by age asc , entrydate asc limit 5 ;DQL-執(zhí)行順序
????????在講解DQL語句的具體語法之前,我們已經講解了DQL語句的完整語法,及編寫順序,接下來,我們要 來說明的是DQL語句在執(zhí)行時的執(zhí)行順序,也就是先執(zhí)行那一部分,后執(zhí)行那一部分。?
驗證:
查詢年齡大于15的員工姓名、年齡,并根據年齡進行升序排序。 在查詢時,我們給emp表起一個別名 e,然后在select 及 where中使用該別名。 select e.name , e.age from emp e where e.age > 15 order by age asc; 執(zhí)行上述SQL語句后,我們看到依然可以正常的查詢到結果,此時就說明: from 先執(zhí)行, 然后 where 和 select 執(zhí)行。那 where 和 select 到底哪個先執(zhí)行呢? 此時,此時我們可以給select后面的字段起別名,然后在 where 中使用這個別名,然后看看是否可 以執(zhí)行成功。 select e.name ename , e.age eage from emp e where eage > 15 order by age asc;?由此我們可以得出結論: from 先執(zhí)行,然后執(zhí)行 where , 再執(zhí)行select 。
接下來,我們再執(zhí)行如下SQL語句,查看執(zhí)行效果:
select e.name ename , e.age eage from emp e where e.age > 15 order by eage asc; 結果執(zhí)行成功。 那么也就驗證了: order by 是在select 語句之后執(zhí)行的。 綜上所述,我們可以看到DQL語句的執(zhí)行順序為: from ... where ... group by ... having ... select ... order by ... limit ...DQL-小結
????????
DCL-介紹
DCL英文全稱是Data Control Language(數據控制語言),用來管理數據庫用戶、控制數據庫的訪 問權限。DCL- 管理用戶
1.查詢用戶
select * from mysql.user;?其中 Host代表當前用戶訪問的主機, 如果為localhost, 僅代表只能夠在當前本機訪問,是不可以
遠程訪問的。 User代表的是訪問該數據庫的用戶名。在MySQL中需要通過Host和User來唯一標識 一 個用戶。2.創(chuàng)建用戶
CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';3.修改用戶密碼
ALTER USER '用戶名'@'主機名' IDENTIFIED WITH mysql_native_password BY '新密碼' ;4.刪除用戶
DROP USER '用戶名'@'主機名' ;案例:
創(chuàng)建用戶itcast, 只能夠在當前主機localhost訪問, 密碼123456; create user 'itcast'@'localhost' identified by '123456'; 創(chuàng)建用戶heima, 可以在任意主機訪問該數據庫, 密碼123456; create user 'heima'@'%' identified by '123456'; 修改用戶heima的訪問密碼為1234; alter user 'heima'@'%' identified with mysql_native_password by '1234'; 刪除 itcast@localhost 用戶 drop user 'itcast'@'localhost'; 注意事項:? 在MySQL中需要通過用戶名@主機名的方式,來唯一標識一個用戶。
? 主機名可以使用 % 通配。 ? 這類SQL開發(fā)人員操作的比較少,主要是DBA( Database Administrator 數據庫管理員)使用。DCL-權限控制
?1.查詢權限
SHOW GRANTS FOR '用戶名'@'主機名' ;2.授予權限
GRANT 權限列表 ON 數據庫名.表名 TO '用戶名'@'主機名';3.撤銷權限
REVOKE 權限列表 ON 數據庫名.表名 FROM '用戶名'@'主機名';(案例)
查詢 'heima'@'%' 用戶的權限 show grants for 'heima'@'%'; 授予 'heima'@'%' 用戶itcast數據庫所有表的所有操作權限 grant all on itcast.* to 'heima'@'%'; 撤銷 'heima'@'%' 用戶的itcast數據庫的所有權限 revoke all on itcast.* from 'heima'@'%'; 注意事項: ? 多個權限之間,使用逗號分隔 ? 授權時, 數據庫名和表名可以使用 * 進行通配,代表所有。DCL-小結
?
總結
以上是生活随笔為你收集整理的数据库自学-SQL-四大SQL语句DDL、DML、DQL、DCL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIDL Service,跨进程调用Se
- 下一篇: 总结面试题——Javascript