DDL(Data Definition Language)數(shù)據(jù)定義語言

一、操作庫

-- 創(chuàng)建庫

create database db1;

-- 創(chuàng)建庫是否存在,不存在則創(chuàng)建

create database if not exists db1;

-- 查看所有數(shù)據(jù)庫

show databases;

-- 查看某個數(shù)據(jù)庫的定義信息?

show create database db1;?

-- 修改數(shù)據(jù)庫字符信息

alter database db1 character set utf8;?

-- 刪除數(shù)據(jù)庫

drop database db1;?

二、操作表

--創(chuàng)建表

create table student(

? ? id int,

? ? name varchar(32),

? ? age int ,

? ? score double(4,1),

? ? birthday date,

? ? insert_time timestamp

);

?

-- 查看表結(jié)構(gòu)

desc 表名;

-- 查看創(chuàng)建表的SQL語句

show create table 表名;

-- 修改表名

alter table 表名 rename to 新的表名;

-- 添加一列

alter table 表名 add 列名 數(shù)據(jù)類型;

-- 刪除列

alter table 表名 drop 列名;

-- 刪除表

drop table 表名;

drop table? if exists 表名 ;

DML(Data Manipulation Language)數(shù)據(jù)操作語言

一、增加 insert into

-- 寫全所有列名

insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);

-- 不寫列名(所有列全部添加)

insert into 表名 values(值1,值2,...值n);

-- 插入部分數(shù)據(jù)

insert into 表名(列名1,列名2) values(值1,值2);

二、刪除 delete

-- 刪除表中數(shù)據(jù)

delete from 表名 where 列名? = 值;

-- 刪除表中所有數(shù)據(jù)

delete from 表名;

-- 刪除表中所有數(shù)據(jù)(高效 先刪除表,然后再創(chuàng)建一張一樣的表。)

truncate table 表名;

三、修改 update

-- 不帶條件的修改(會修改所有行)

update 表名 set 列名 = 值;

-- 帶條件的修改

update 表名 set 列名 = 值 where 列名=值;

DQL(Data Query Language)數(shù)據(jù)查詢語言

關于查詢語句有很多,這里基礎的不再介紹。主要介紹排序查詢、聚合函數(shù)、模糊查詢、分組查詢、分頁查詢、內(nèi)連接、外連接、子查詢

一、基礎關鍵字

?BETWEEN...AND (在什么之間)和? IN( 集合)

-- 查詢年齡大于等于20 小于等于30 SELECT * FROM student WHERE age >= 20 &&? age <=30;

SELECT * FROM student WHERE age >= 20 AND? age <=30;

SELECT * FROM student WHERE age BETWEEN 20 AND 30;

-- 查詢年齡22歲,18歲,25歲的信息

SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25

SELECT * FROM student WHERE age IN (22,18,25);

?is null(不為null值) 與 like(模糊查詢)、distinct(去除重復值)

-- 查詢英語成績不為null

SELECT * FROM student WHERE english? IS NOT NULL;

?_:單個任意字符

?%:多個任意字符

-- 查詢姓馬的有哪些? like

SELECT * FROM student WHERE NAME LIKE '馬%';

-- 查詢姓名第二個字是化的人

SELECT * FROM student WHERE NAME LIKE "_化%";

-- 查詢姓名是3個字的人

SELECT * FROM student WHERE NAME LIKE '___';

-- 查詢姓名中包含德的人

SELECT * FROM student WHERE NAME LIKE '%德%';

?

-- 關鍵詞 DISTINCT 用于返回唯一不同的值。

-- 語法:SELECT DISTINCT 列名稱 FROM 表名稱

SELECT DISTINCT NAME FROM? student ;

二、排序查詢 order by

語法:order by 子句

? ? ? ? ? order by 排序字段1 排序方式1 ,? 排序字段2 排序方式2...

注意:如果有多個排序條件,則當前邊的條件值一樣時,才會判斷第二條件。

-- 例子

SELECT * FROM person ORDER BY math; --默認升序

SELECT * FROM person ORDER BY math desc; --降序

三、 聚合函數(shù):將一列數(shù)據(jù)作為一個整體,進行縱向的計算。

1.count:計算個數(shù)

2.max:計算最大值

3.min:計算最小值

4.sum:計算和

5.avg:計算平均數(shù)

四、 分組查詢 grout by

? ? ? 語法:group by 分組字段;

? ? ? 注意:分組之后查詢的字段:分組字段、聚合函數(shù)

-- 按照性別分組。分別查詢男、女同學的平均分

SELECT sex , AVG(math) FROM student GROUP BY sex;

?

-- 按照性別分組。分別查詢男、女同學的平均分,人數(shù)

?SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;

?

--? 按照性別分組。分別查詢男、女同學的平均分,人數(shù) 要求:分數(shù)低于70分的人,不參與分組

SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;

?

?--? 按照性別分組。分別查詢男、女同學的平均分,人數(shù) 要求:分數(shù)低于70分的人,不參與分組,分組之后。人數(shù)要大于2個人

SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;

SELECT sex , AVG(math),COUNT(id) 人數(shù) FROM student WHERE math > 70 GROUP BY sex HAVING 人數(shù) > 2;

五、 分頁查詢

? ? 1. 語法:limit 開始的索引,每頁查詢的條數(shù);

? ? 2. 公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數(shù)

? ? 3. limit 是一個MySQL"方言"?

-- 每頁顯示3條記錄?

?

SELECT * FROM student LIMIT 0,3; -- 第1頁

?

SELECT * FROM student LIMIT 3,3; -- 第2頁

?

SELECT * FROM student LIMIT 6,3; -- 第3頁

六、內(nèi)連接查詢:

? ?1. 從哪些表中查詢數(shù)據(jù)

? ?2.條件是什么

? ?3. 查詢哪些字段

1.隱式內(nèi)連接:使用where條件消除無用數(shù)據(jù)

-- 查詢員工表的名稱,性別。部門表的名稱

SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.`dept_id` = dept.`id`;

?

SELECT?

? ? t1.name, -- 員工表的姓名

? ? t1.gender,-- 員工表的性別

? ? t2.name -- 部門表的名稱

FROM

? ? emp t1,

? ? dept t2

WHERE?

? ? t1.`dept_id` = t2.`id`;

?2.顯式內(nèi)連接

-- 語法:?

select 字段列表 from 表名1 [inner] join 表名2 on 條件

-- 例如:

SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;? ?

SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;?

?七、外連接查詢

1.左外連接 -- 查詢的是左表所有數(shù)據(jù)以及其交集部分。

-- 語法:select 字段列表 from 表1 left [outer] join 表2 on 條件;

-- 例子:

-- 查詢所有員工信息,如果員工有部門,則查詢部門名稱,沒有部門,則不顯示部門名稱

SELECT? t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;

?2.右外連接? -- 查詢的是右表所有數(shù)據(jù)以及其交集部分。

-- 語法:

select 字段列表 from 表1 right [outer] join 表2 on 條件;

-- 例子:

SELECT? * FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;

?八、子查詢:查詢中嵌套查詢

-- 查詢工資最高的員工信息

-- 1 查詢最高的工資是多少 9000

SELECT MAX(salary) FROM emp;

?

-- 2 查詢員工信息,并且工資等于9000的

SELECT * FROM emp WHERE emp.`salary` = 9000;

?

?-- 一條sql就完成這個操作。這就是子查詢

SELECT * FROM emp WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);

? ?1.子查詢的結(jié)果是單行單列的

?子查詢可以作為條件,使用運算符去判斷。 運算符: > >= < <= =

-- 查詢員工工資小于平均工資的人

SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);

? ?2. 子查詢的結(jié)果是多行單列的:

? ?子查詢可以作為條件,使用運算符in來判斷

-- 查詢'財務部'和'市場部'所有的員工信息

SELECT id FROM dept WHERE NAME = '財務部' OR NAME = '市場部';

SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2;

?

-- 子查詢

SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '財務部' OR NAME = '市場部');

? ?3. 子查詢的結(jié)果是多行多列的:

? ?子查詢可以作為一張?zhí)摂M表參與查詢

-- 查詢員工入職日期是2011-11-11日之后的員工信息和部門信息

-- 子查詢

SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2 WHERE t1.id = t2.dept_id;

?

-- 普通內(nèi)連接

SELECT * FROM emp t1,dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` >? '2011-11-11'

?DCL(Data Control Language)數(shù)據(jù)控制語言

管理用戶

添加用戶

語法:CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';

刪除用戶

語法:DROP USER '用戶名'@'主機名';

權(quán)限管理

查詢權(quán)限

-- 查詢權(quán)限

SHOW GRANTS FOR '用戶名'@'主機名';

SHOW GRANTS FOR 'lisi'@'%';

授予權(quán)限

-- 授予權(quán)限

grant 權(quán)限列表 on 數(shù)據(jù)庫名.表名 to '用戶名'@'主機名';

?-- 給張三用戶授予所有權(quán)限,在任意數(shù)據(jù)庫任意表上

GRANT ALL ON *.* TO 'zhangsan'@'localhost';

撤銷權(quán)限

-- 撤銷權(quán)限:

revoke 權(quán)限列表 on 數(shù)據(jù)庫名.表名 from '用戶名'@'主機名';

REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';

友情鏈接

Back to top