DML/DQL
DML
????????INSERT? ? 實現數據的? 插入
????????????????實例:
????????DELETE? ?實現數據的? 刪除
????????????????實例:
????????UPDATE? ?實現數據的? 更新
?????????????????實例1:
?????????????????實例2:
????????? ? ? ? ?實例3:
DQL
?DML/DQL
?DML語句 數據庫操縱語言:?插入數據INSERT、刪除數據DELETE、更新數據UPDATE
?DQL語句? ?數據庫查詢語言:查詢數據SELECT
DML
INSERT? ? 實現數據的? 插入
語法:完整插入? ? ?INSERT? ?INTO? ?___表名___? ?VALUES(值1,值2,值3...值n);
? ? ? ? ? ?部分插入? ? ?INSERT? ?INTO? ?___表名___? (列名,列名)? ?VALUES(值1,值2);
?
實例:
1.首先創建一個表
2.插入數據
DELETE? ?實現數據的? 刪除
語法:DELETE ? FROM? ? ___表名____? WHERE ? CONDITION;
實例:
.刪除數據
UPDATE? ?實現數據的? 更新
語法:UPDATE ? 表名 ? SET ? 列名=值 ? WHERE ? CONDITION;
?實例1:
1.準備一張表
mysql> create table t6(id int, name varchar(20));
2.插入數據
mysql> insert into t6 values (1,'aa');mysql> insert into t6 values (2,'bb');
3.更新數據 ----->把bb? 改成? cc
mysql> update t6 set name='cc' where id=2;
4.查詢結構
mysql> select * from t6;
實例2:
更新數據庫的登錄密碼
mysql> update mysql.user set authentication_string=password("QianFeng@123456") where user="root";
實例3:
DQL
在MySQL管理軟件中,可以通過SQL語句中的DQL語言來實現數據的
?從數據表中提取滿足特定條件的記錄
- 單表查詢
- 多表聯合查詢
DQL基礎語法:
實例:
1.首先創建一個表
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);
? ?插入數據
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
關鍵字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;
關鍵字IN集合查詢
a.工資可能是4000,也可能是5000,還有可能是9000,怎么查
OR可以組合多條件,效率如何? SELECT name, salary FROM employee5 WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000 ;
關鍵字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;
關鍵字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.多表查詢
?
創建員工信息表:
#創建表結構
create table info(
name char(50),
age int,
dep_num int,
level_num int);#查詢表結構
desc info;#插入數據
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;
創建部門信息表:
#創建表結構
create table department(
dep_num int,
dep_name varchar(50),
dep_des varchar(100));#插入數據
insert into department values
(101,'hr','recruit,training'),
(102,'tec','system,network,service'),
(103,'exp','C++,python,php'),
(104,'admin','administrator');#查看表結構
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.內連接
特點:兩列相同時,才會顯示
語法: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;
子查詢:
子查詢是指:父查詢 需要 依賴 ?子查詢的結果。
子查詢中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關鍵字
還可以包含比較運算符:= 、 !=、> 、<等
EXISTS關字鍵字表示存在。在使用EXISTS關鍵字時,內層查詢語句不返回查詢的記錄,而是返回一個真假值。
Ture或False,當返回Ture時,外層查詢語句將進行查詢;當返回值為False時,外層查詢語句不進行查詢
1. 帶IN關鍵字的子查詢(范圍)
查詢員工年齡大于等于25歲的部門
select dep_num,dep_name from department where dep_num in (select distinct dep_num from info where age >=25);
2. 帶EXISTS關鍵字的子查詢(返回值)
如果部門101存在(返回為真),查詢所有員工信息。
trueselect * from info where exists (select * from department where dep_num=102);falseselect * from info where exists (select * from department where dep_num=105);