DML/DQL
DML
????????INSERT? ? 實現(xiàn)數(shù)據(jù)的? 插入
????????????????實例:
????????DELETE? ?實現(xiàn)數(shù)據(jù)的? 刪除
????????????????實例:
????????UPDATE? ?實現(xiàn)數(shù)據(jù)的? 更新
?????????????????實例1:
?????????????????實例2:
????????? ? ? ? ?實例3:
DQL
?DML/DQL
?DML語句 數(shù)據(jù)庫操縱語言:?插入數(shù)據(jù)INSERT、刪除數(shù)據(jù)DELETE、更新數(shù)據(jù)UPDATE
?DQL語句? ?數(shù)據(jù)庫查詢語言:查詢數(shù)據(jù)SELECT
DML
INSERT? ? 實現(xiàn)數(shù)據(jù)的? 插入
語法:完整插入? ? ?INSERT? ?INTO? ?___表名___? ?VALUES(值1,值2,值3...值n);
? ? ? ? ? ?部分插入? ? ?INSERT? ?INTO? ?___表名___? (列名,列名)? ?VALUES(值1,值2);
?
實例:
1.首先創(chuàng)建一個表
2.插入數(shù)據(jù)
DELETE? ?實現(xiàn)數(shù)據(jù)的? 刪除
語法:DELETE ? FROM? ? ___表名____? WHERE ? CONDITION;
實例:
.刪除數(shù)據(jù)
UPDATE? ?實現(xiàn)數(shù)據(jù)的? 更新
語法:UPDATE ? 表名 ? SET ? 列名=值 ? WHERE ? CONDITION;
?實例1:
1.準備一張表
mysql> create table t6(id int, name varchar(20));
2.插入數(shù)據(jù)
mysql> insert into t6 values (1,'aa'); mysql> insert into t6 values (2,'bb');
3.更新數(shù)據(jù) ----->把bb? 改成? cc
mysql> update t6 set name='cc' where id=2;
4.查詢結(jié)構(gòu)
mysql> select * from t6;
實例2:
更新數(shù)據(jù)庫的登錄密碼
mysql> update mysql.user set authentication_string=password("QianFeng@123456") where user="root";
實例3:
DQL
在MySQL管理軟件中,可以通過SQL語句中的DQL語言來實現(xiàn)數(shù)據(jù)的
?從數(shù)據(jù)表中提取滿足特定條件的記錄
- 單表查詢
- 多表聯(lián)合查詢
DQL基礎(chǔ)語法:
實例:
1.首先創(chuàng)建一個表
mysql> create database company;
mysql> CREATE TABLE company.employee5(
id int primary key AUTO_INCREMENT not null,
name varchar(30) not null,
sex enum('male','female') default 'male' not null,
hire_date date not null,
post varchar(50) not null,
job_description varchar(100),
salary double(15,2) not null,
office int,
dep_id int
);
? ?插入數(shù)據(jù)
mysql> insert into company.employee5(name,sex,hire_date,post,job_description,salary,office,dep_id) values
('jack','male','20180202','instructor','teach',5000,501,100),
('tom','male','20180203','instructor','teach',5500,501,100),
('robin','male','20180202','instructor','teach',8000,501,100),
('alice','female','20180202','instructor','teach',7200,501,100),
('aofa','male','20180202','hr','hrcc',600,502,101),
('harry','male','20180202','hr',NULL,6000,502,101),
('emma','female','20180206','sale','salecc',20000,503,102),
('christine','female','20180205','sale','salecc',2200,503,102),
('zhuzhu','male','20180205','sale',NULL,2200,503,102),
('gougou','male','20180205','sale','',2200,503,102);
?
2.簡單查詢
#查看所有列
SELECT * FROM 表名;
#查部分列
SELECT 列1,列2,列3 FROM 表名;
#通過四則運算查詢(查看年薪)
SELECT name, salary, salary*14 FROM employee5;
3.條件查詢
單條件查詢? WHERE
a.查詢hr部門的員工姓名
SELECT name,post FROM employee5 WHERE post='hr';
多條件查詢AND/OR
a.查詢hr部門的員工姓名,并且工資大于1000
SELECT name,salary FROM employee5 WHERE post='hr' AND salary>1000;
b.查詢所有部門的員工姓名,并且工資是6000或者8000的員工
SELECT name, salary FROM employee5 WHERE salary=6000 OR salary=8000
關(guān)鍵字BETWEEN AND 在什么之間
a.需求:查一查薪資在5000到15000
SELECT name,salary FROM employee5 WHERE salary BETWEEN 5000 AND 15000;
b.需求:不在5000~15000呢?請使用NOT
SELECT name,salary FROM employee5 WHERE salary NOT BETWEEN 5000 AND 15000;
關(guān)鍵字IN集合查詢
a.工資可能是4000,也可能是5000,還有可能是9000,怎么查
OR可以組合多條件,效率如何? SELECT name, salary FROM employee5 WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000 ;
關(guān)鍵字IS NULL
a.沒有崗位描述的
空 SELECT name,job_description FROM employee5 WHERE job_description IS NULL;
非空 SELECT name,job_description FROM employee5 WHERE job_description IS NOT NULL;
關(guān)鍵字LIKE模糊查詢
a.好像有個員工姓阿
SELECT * FROM employee5 WHERE name LIKE 'al%'; SELECT * FROM employee5 WHERE name LIKE 'al___';
4.排序查詢
實例:
a.例如以工資升序排列
SELECT * FROM 表名 ORDER BY 工資的列名 ASC;
b.例如以工資降序排列
SELECT * FROM 表名 ORDER BY 工資的列名 DESC;
c.工資最高的前五名
SELECT * FROM employee5 ORDER BY salary DESC LIMIT 5;
5.多表查詢
?
創(chuàng)建員工信息表:
#創(chuàng)建表結(jié)構(gòu)
create table info(
name char(50),
age int,
dep_num int,
level_num int);
#查詢表結(jié)構(gòu)
desc info;
#插入數(shù)據(jù)
insert into info values
('zhangsan',23,101,1),
('lisi',25,102,2),
('wangwu',30,102,3),
('zhaosi',30,103,4),
('sunba',35,NULL,NULL);
#查詢表
select * from info;
創(chuàng)建部門信息表:
#創(chuàng)建表結(jié)構(gòu)
create table department(
dep_num int,
dep_name varchar(50),
dep_des varchar(100));
#插入數(shù)據(jù)
insert into department values
(101,'hr','recruit,training'),
(102,'tec','system,network,service'),
(103,'exp','C++,python,php'),
(104,'admin','administrator');
#查看表結(jié)構(gòu)
desc department;
#查看表
select * from department;
示圖:
?
多表的連接查詢:
a.交叉連接
特點:全部組合(A表5行,B表7行,最后5*7=35行)
生成笛卡爾積,它不使用任何匹配條件
select info.name,info.age,info.dep_num,department.dep_name from info,department;
b.內(nèi)連接
特點:兩列相同時,才會顯示
語法:SELECT 字段列表??FROM 表1 ,?表2??WHERE ? ?表1.字段 = 表2.字段;
select info.name,info.age,info.dep_num,department.dep_name from info,department where info.dep_num = department.dep_num;
c.外連接
特點:兩列相同時顯示,并,已左/右表為主。
語法:A表 ? ? ? ? ? ? ? ?left join ? ? ? ? ? ? ? ?B表 ? ? ? ? ? ? ? ?on ? ? ? ? ? ?條件是
外連接(左連接 left join ?on)
找出所有員工及所屬的部門,包括沒有部門的員工
查看所有員工的部門信息。
select info.name,info.age,info.dep_num,department.dep_name from info left join department on info.dep_num = department.dep_num;
外連接(右連接right join ?on)
顯示所有的部門的員工信息。
select info.name,info.age,info.dep_num,department.dep_name from info right join department on info.dep_num = department.dep_num;
子查詢:
子查詢是指:父查詢 需要 依賴 ?子查詢的結(jié)果。
子查詢中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關(guān)鍵字
還可以包含比較運算符:= 、 !=、> 、<等
EXISTS關(guān)字鍵字表示存在。在使用EXISTS關(guān)鍵字時,內(nèi)層查詢語句不返回查詢的記錄,而是返回一個真假值。
Ture或False,當(dāng)返回Ture時,外層查詢語句將進行查詢;當(dāng)返回值為False時,外層查詢語句不進行查詢
1. 帶IN關(guān)鍵字的子查詢(范圍)
查詢員工年齡大于等于25歲的部門
select dep_num,dep_name from department where dep_num in (select distinct dep_num from info where age >=25);
2. 帶EXISTS關(guān)鍵字的子查詢(返回值)文章來源:http://www.zghlxwxcb.cn/news/detail-641092.html
如果部門101存在(返回為真),查詢所有員工信息。文章來源地址http://www.zghlxwxcb.cn/news/detail-641092.html
true select * from info where exists (select * from department where dep_num=102); false select * from info where exists (select * from department where dep_num=105);
到了這里,關(guān)于開源數(shù)據(jù)庫Mysql_DBA運維實戰(zhàn) (DML/DQL語句)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!