文档章节

dml--数据操控语句

xbuding
 xbuding
发布于 2016/04/26 06:45
字数 1218
阅读 42
收藏 0

#插入语句

#INSERT INTO tablename (field1, filed2) VALUES(value1, value2);

INSERT INTO EMP(`ENAME`, `HIREDATE`, `SAL`) VALUES('DY', '2015-12-25', '2000');

#多条插入

INSERT INTO EMP(`ENAME`, `HIREDATE`, `SAL`) VALUES('dd', '2015-7-27', '24000'),('gg', '2016-05-06', '3000');


#更新语句

#UPDATE tablename SET field1=value1,field2=value2 [WHERE CONDITION]

UPDATE EMP SET `ENAME` = 'dy' WHERE `ENAME` = 'DY';

#同时更新过个表的字段

#UPDATE tbl1, tbl2,...,tbln SET tbl1.field1=expr1, tbl2.field2=expr2,tbln=exprn [WHERE CONDITION]


#建多一张role

CREATE TABLE ROLE (
    `rolename` VARCHAR(11) DEFAULT NULL,
    `JOB` VARCHAR(11) DEFAULT '1' COMMENT '1,普通工人,2,管理者,3老板'
);
INSERT INTO ROLE VALUES ('WORDER', '1');
UPDATE EMP a, ROLE b SET a.SAL = '4000',b.job = '2' WHERE a.ENAME = b.rolename;


#删除表

#DELETE FROM tablename [WHERE CONFITION]

DELETE FROM EMP WHERE ENAME = 'WORDER';

#删除多个表的记录

#DELETE t1,t2,...,tn FROM t1,t2,...,tn [WHERE CONDITION]

DELETE a, b FROM ROLE a, EMP b WHERE a.rolename = b.ename AND b.ename = 'dd'; #使用别名
DELETE role, emp FROM role, emp WHERE emp.ename = role.rolename AND role.rolename = 'gg';

#注意:不管是单表还是多表 删除 DELETE 操作 如果不加 WHERE 条件将会把表的所有记录删除,DELETE 是一个危险的操作(小心)


#查询表

#SELECT * FROM tablename [WHERE CONDITION]

#SELECT field1, field2, ..., fieldn FROM tablename [WHERE CONDITION]


#查询不重复的记录 关键字: distinct

SELECT DISTINCT SAL FROM EMP;


#条件查询 关键字 where

=  < > >= <= != 

多条件: and or 


#排序 ORDER BY

#DESC 降序 ASC升序

#SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC/ASC], field2 [DESC/ASC],...., fieldn[DESC/ASC]]

select * from emp order by sal asc;

#如果存在多个排序字段,先用第一字段进行排序默认是升序排序,对于值相同的字段,按照第二个排序字段进行排序,以此类推

#关键字LIMIT offset_start第几条开始, 显示offset_start后的几条数据 如果不写offset_start默认为0

#SELECT * FROM tablename [LIMIT offset_start, row_count]

#LIMIT是mysql扩展SQL92后的语法,其他数据库不能通用


#聚合查询

CREATE TABLE emp (
    ename VARCHAR(11),
    hiredate DATE,
    sal DECIMAL(3),
    deptno int(3)
) Engine = InnoDB DEFAULT CHARSET = UTF8;
INSERT INTO emp VALUES ('xiaoming', '2015-09-08', '200', '1');
INSERT INTO emp VALUES ('chensan', '2015-10-08', '700', '2');
INSERT INTO emp VALUES ('zhangliao', '2015-04-08', '800', '5');
INSERT INTO emp VALUES ('liubei', '2013-04-08', '800', '4');
INSERT INTO emp VALUES ('guangyu', '2013-04-08', '900', '4');
INSERT INTO emp VALUES ('caocao', '2013-04-08', '900', '6');
CREATE TABLE dept (
    deptno INT(11),
    deptname VARCHAR(255)
) Engine = InnoDB DEFAULT CHARSET = UTF8;
INSERT INTO dept VALUES ('1', 'teacher');
INSERT INTO dept VALUES ('2', 'doctor');
INSERT INTO dept VALUES ('3', 'student');
INSERT INTO dept VALUES ('4', 'worker');
INSERT INTO dept VALUES ('5', 'principal');

#聚合查询操作语法:

SELECT [field1, field2, ... , field3] fun_name FROM tablename 

[WHERE where_condition] [GROUP BY field1, field2,..., fieldn [WITH ROLLUP]] [HAVING where_condition]

参数解释:

fun_name 表示聚合操作,也就是聚合函数,常用eg: sum(求和),count(*)(记录书),max(最大值), min(最小值)

GROUP BY 关键字表示要进行分类聚合的字段,

WITH ROLLUP 是可选语法,表名是否对分类聚合后的结果进行在汇总

HAVING 关键字表示对分类后的结果在惊醒条件过滤

(WHERE 和 HAVING 的区别, HAVING是对聚合后的结果进行条件过滤,而WHERE是在聚合前进行记录的过滤。如果可以,应该先使用 WHERE 再使用 HAVING 惊醒再过滤 从而 提交效率)



eg:

统计公司总人数:

SELECT COUNT(1) FROM emp;

统计公司各部门的人数:

SELECT deptno, count(1) from emp GROUP BY deptno;

统计公司各部门的人数和总人数:

SELECT deptno, count(1) from emp GROUP BY deptno WITH ROLLUP;

统计公司各部门的人数和人数大于1的:

SELECT deptno, count(1) from emp GROUP BY deptno HAVING COUNT(1) > 1;

统计公司薪水的总金额,最大,最小金额:

SELECT SUM(sal), MAX(sal), MIN(sal) from emp;


表连接:(需要同时显示多个表中的字段)内连接,外连接。主要区别 内连接仅仅选出两张表的虎相匹配的记录,外连接会选出其他不匹配的记录。

SELECT a.ename, b.deptname FROM emp a, dept b WHERE a.deptno = b.deptno;


查询所有雇员的名字和对应的部分名称

SELECT a.ename, b.deptname FROM emp a, dept b WHERE a.deptno = b.deptno;


外连接:

    左连接:包含所有左边表中的记录甚至是右边表没有和它匹配的记录。

    右连接:包含所有右边表中的记录甚至是左边表没有和它匹配的记录。(左连接和右连接可以转换)

SELECT emp.*, dept.* FROM emp LEFT JOIN dept ON emp.deptno = dept.deptno; #(可跟右链接转换)
SELECT emp.*, dept.* FROM dept RIGHT JOIN emp ON emp.deptno = dept.deptno;



子查询:

某些情况下,当查询需要进行另外一条 SELECT 语句的结果,就要用高子查询。用于子查询的关键字 : IN,NOT IN,=, !=, EXISTS, NOT EXISTS

SELECT * FROM emp WHERE deptno in (SELECT deptno FROM dept);#(有些情况,子查询可转换为表连接)
SELECT emp.* FROM emp, dept WHERE emp.deptno = dept.deptno;

表连接可以优化子查询


记录联合 UNION, UNION ALL (UNION ALL 是把结果去那不合并在一起, UNION 是 UNION ALL 后在 DISTINCT 去重)

SELECT * FROM t1 

UNION|UNION ALL 

SELECT * FROM t2 

...

UNION|UNION ALL 

SELECT * FROM tn

SELECT deptno FROM emp UNION SELECT deptno FROM dept;
SELECT deptno FROM emp UNION ALL SELECT deptno FROM dept;


© 著作权归作者所有

上一篇: javascript锚点
xbuding
粉丝 4
博文 35
码字总数 12103
作品 0
广州
私信 提问
数据库专业词汇 DDL、DML和DCL 理解

1、DDL 1-1、DDL的概述 DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等,DDL对这些对象和属性的管理和...

Kilar
2016/04/14
26
0
DDL、DML和DCL的区别与理解

在关系型数据库中DDL、DML、DCL这三者是SQL的重要组成部分,恰好在网上找到一篇不错的文章在这里就摘录分享下。以下来自于:http://www.jb51.net/article/40359.htm DML、DDL、DCL区别 . 总体...

往事_Jim_遗
2017/11/06
0
0
DDL、DML和DCL 区别与理解

这篇文章主要介绍了DDL、DML和DCL的区别与理解,需要的朋友可以参考下 DML、DDL、DCL区别 . 总体解释: DML(data manipulation language): 它们是SELECT、UPDATE、INSERT、DELETE,就象它...

勇敢的蜗牛_Z
2015/05/04
0
0
SQL语言的四大类与三种提交方式的概念

SQL语言的四大类 Sql语言被分为四大类:数据查询语言(DQL),数据操纵语言(DML),数据定义语言(DDL),数据控制语言(DCL)。 1. 数据查询语言(DQL) 数据查询语言基本结构由select子句,from子句...

hillsowl
2016/05/30
95
0
MYSQL的COMMIT和ROLLBACK

从功能上划分,SQL 语言可以分为DDL,DML和DCL三大类。 1. DDL(Data Definition Language) 数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ; CREATE---创建表 ALTER---修改表...

mac_zhao
2014/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Leetcode PHP题解--D88 696. Count Binary Substrings

D88 696. Count Binary Substrings 题目链接 696. Count Binary Substrings 题目分析 给定一个01字符串,返回仅用连续的0和1串所能组成的二进制字符串个数。 例如,00110011,就包含0011,0...

skys215
6分钟前
0
0
基础工具类

package com.atguigu.util;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid......

architect刘源源
今天
43
0
P30 Pro劲敌!DxO官宣新机:排行榜又要变

5月26日晚间,DxOMark官方推特预告,将在5月27日公布一款新机型的DxOMark评分,猜猜是哪款? 网友猜想的机型有:红米K20、谷歌Pixel 3a、索尼Xperia 1、诺基亚9 PureView等。 DxOMark即将公布...

linux-tao
昨天
15
0
Ubuntu18.04.2窗口过小不能自适应(二次转载)

解决Ubuntu在虚拟机窗口不能自适应 2018年09月06日 16:20:08 起不了名儿 阅读数 855 此博文转载:https://blog.csdn.net/nuddlle/article/details/77994080(原地址) 试了很多办法这个好用 ...

tahiti_aa
昨天
2
0
死磕 java同步系列之CountDownLatch源码解析

问题 (1)CountDownLatch是什么? (2)CountDownLatch具有哪些特性? (3)CountDownLatch通常运用在什么场景中? (4)CountDownLatch的初始次数是否可以调整? 简介 CountDownLatch,可以...

彤哥读源码
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部