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