MySQL学习之SQL基础(一)DML
DML(data Manipulation language)
INSERT DELETE UPDATE SELECT
INSERT
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename | varchar(25) | YES | | NULL | |
| hiredate | date | YES | | NULL | |
| sal | decimal(10,2) | YES | | NULL | |
| deptno | int(2) | YES | | NULL | |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql>
INSERT INTO emp (ename,hiredate,sal ,deptno) VALUES ('zzx','2000-01-01',100,1);
INSERT INTO emp VALUES('lisa','2003-02-01',400,2);
一次性插入多条记录
INSERT INTO emp VALUES('jack','2018-09-21',12000,1),
('tony','2018-09-21',13000,4)
;
UPDATE
- 更新一张表
UPDATE emp set sal=11000 where ename='lisa';
- 多表更新
首先创建一张表部门表
CREATE TABLE dept(
deptno int (3) ,
deptname varchar(25)
);
mysql> desc dept;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| deptno | int(3) | YES | | NULL | |
| deptname | varchar(25) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
INSERT dept VALUES(1,'tech');
INSERT INTO dept VALUES (2,'sale'),(3,'fin');
mysql> select * from emp;
+-------+------------+----------+--------+
| ename | hiredate | sal | deptno |
+-------+------------+----------+--------+
| zzx | 2000-01-01 | 100.00 | 1 |
| lisa | 2003-02-01 | 11000.00 | 2 |
| jack | 2018-09-21 | 12000.00 | 1 |
| tony | 2018-09-21 | 13000.00 | 4 |
+-------+------------+----------+--------+
4 rows in set (0.00 sec)
多表更新
UPDATE emp a ,dept b SET a.sal =a.sal * b.deptno WHERE a.deptno=b.deptno;
mysql> SELECT * FROM emp;
+-------+------------+----------+--------+
| ename | hiredate | sal | deptno |
+-------+------------+----------+--------+
| zzx | 2000-01-01 | 100.00 | 1 |
| lisa | 2003-02-01 | 22000.00 | 2 |
| jack | 2018-09-21 | 12000.00 | 1 |
| tony | 2018-09-21 | 13000.00 | 4 |
+-------+------------+----------+--------+
4 rows in set (0.00 sec)
查询表
- 查询去重,DISTINCT只能显示一列
mysql> SELECT DISTINCT deptno FROM emp;
+--------+
| deptno |
+--------+
| 1 |
| 2 |
| 4 |
+--------+
3 rows in set (0.00 sec)
- 条件查询
mysql> SELECT * FROM emp;
+-------+------------+----------+--------+
| ename | hiredate | sal | deptno |
+-------+------------+----------+--------+
| zzx | 2000-01-01 | 100.00 | 1 |
| lisa | 2003-02-01 | 22000.00 | 2 |
| jack | 2018-09-21 | 12000.00 | 1 |
| tony | 2018-09-21 | 13000.00 | 4 |
+-------+------------+----------+--------+
mysql> SELECT ename,sal FROM emp WHERE deptno<=1 AND sal > 5000;
+-------+----------+
| ename | sal |
+-------+----------+
| jack | 12000.00 |
+-------+----------+
1 row in set (0.00 sec)
3、排序查询
查询emp排序后第二条之后的三条记录
mysql> SELECT * FROM emp;
+-------+------------+----------+--------+
| ename | hiredate | sal | deptno |
+-------+------------+----------+--------+
| zzx | 2000-01-01 | 100.00 | 1 |
| lisa | 2003-02-01 | 22000.00 | 2 |
| jack | 2018-09-21 | 12000.00 | 1 |
| tony | 2018-09-21 | 13000.00 | 4 |
+-------+------------+----------+--------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM emp order by sal LIMIT 1,3;
+-------+------------+----------+--------+
| ename | hiredate | sal | deptno |
+-------+------------+----------+--------+
| jack | 2018-09-21 | 12000.00 | 1 |
| tony | 2018-09-21 | 13000.00 | 4 |
| lisa | 2003-02-01 | 22000.00 | 2 |
+-------+------------+----------+--------+
3 rows in set (0.00 sec)
- 聚合
统计emp总人数
mysql> SELECT COUNT(1) FROM emp;
+----------+
| COUNT(1) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)
统计各个部门的总人数
mysql> SELECT deptno FROM emp GROUP BY deptno;
+--------+
| deptno |
+--------+
| 1 |
| 2 |
| 4 |
+--------+
3 rows in set (0.00 sec)
mysql> SELECT deptno,COUNT(1) FROM emp GROUP BY deptno;
+--------+----------+
| deptno | COUNT(1) |
+--------+----------+
| 1 | 2 |
| 2 | 1 |
| 4 | 1 |
+--------+----------+
3 rows in set (0.00 sec)
统计各个部门的总人数也要统计总人数
with rollup进行再次汇总
SELECT deptno,COUNT(1) FROM emp GROUP BY deptno WITH rollup;
统计各个部门的总人数大于等于2
使用having进行条件过滤
mysql> SELECT deptno,COUNT(1) FROM emp GROUP BY deptno HAVING COUNT(1)>=2;
+--------+----------+
| deptno | COUNT(1) |
+--------+----------+
| 1 | 2 |
+--------+----------+
1 row in set (0.00 sec)
- 子查询
查询emp表中部门编号在dept表的员工
| ename | hiredate | sal | deptno |
+-------+------------+----------+--------+
| zzx | 2000-01-01 | 100.00 | 1 |
| lisa | 2003-02-01 | 22000.00 | 2 |
| jack | 2018-09-21 | 12000.00 | 1 |
| tony | 2018-09-21 | 13000.00 | 4 |
+-------+------------+----------+--------+
4 rows in set (0.01 sec)
mysql> SELECT * FROM emp order by sal LIMIT 1,3;^C
mysql> SELECT * FROM dept;
+--------+----------+
| deptno | deptname |
+--------+----------+
| 1 | tech |
| 2 | sale |
| 3 | fin |
+--------+----------+
3 rows in set (0.00 sec)
mysql> SELECT ename ,sal from emp where deptno in (select deptno from dept);
+-------+----------+
| ename | sal |
+-------+----------+
| zzx | 100.00 |
| lisa | 22000.00 |
| jack | 12000.00 |
+-------+----------+
3 rows in set (0.00 sec)
- 联合
将查询结果合并显示
- 查询所有的的deptno,去重
SELECT deptno FROM emp UNION
SELECT deptno FROM dept;
- 查询所有的的deptno,不去重
SELECT deptno FROM emp UNION all
SELECT deptno FROM dept;
MySQL学习之SQL基础(一)DML的更多相关文章
- MySQL学习之SQL基础(一)DDL
Sql基础 DDL (data defination language) 创建表 CREATE TABLE emp( ename varchar(10), hiredate date, sal dec ...
- python之MySQL学习——防止SQL注入
python之MySQL学习——防止SQL注入 学习了:https://www.cnblogs.com/xiaomingzaixian/p/7126840.html https://www.cnblo ...
- mysql学习笔记之基础篇
数据库学习之基础篇 ① 开放数据库互连(Open Database Connectivity,ODBC ② 结构化查询语言(Structured Query Language) ③ 进入mysql:M ...
- MySql 学习之路-基础
Mysql 自学之路 本文包含基础部分与高级部分 一.基础 数据库操作 Show databases:显示所有的数据库 Show tables: 显示所有的数据库表 Use databasename: ...
- 《深入浅出MySQL》之SQL基础
SQL是Structure Query language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言.在众多开源数据中,MySQL正式其中最杰出的代表,MySQL是由三个瑞典人于20世纪 ...
- MySQL 学习四 SQL优化
MySQL逻辑架构: 第一层:客户端层,连接处理,授权认证,安全等功能. 第二层:核心层,查询解析,分析,优化,缓存,内置函数(时间,数学,加密),存储过程,触发器,视图 第三层:存储引擎.负 ...
- mysql学习之 sql语句的技巧及优化
一.sql中使用正则表达式 select name,email from user where email Regexp "@163[.,]com$"; sql语句中使用Regex ...
- MYSQL学习笔记——sql语句优化工具
优化sql:思路: 使用explan->先查询type类型看看是all还是ref,然后判断 possible_keys (显示可能应用在这张表中的索引, 一个或多个.查询涉及到的字段是若存在索引 ...
- Mysql 学习之 SQL的执行顺序
mysql的json查询: 1.一条普通的SQL SELEC ...
随机推荐
- [].slice.call(k).filter(function(l) { return l != 0 });
[].slice.call(k).filter(function(l) { return l != 0 }); 将类数组调用数组方法.
- Ajax记载html
- conda常用命令(待续)
1.常用命名 # 查看虚拟环境列表 conda env list # 创建虚拟环境 conda create -n python36 python=3.6.2 # 切换环境 activate pyth ...
- Django 学习之Rest Framework 视图相关
drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. Django REST ...
- UICollectionView特殊布局
流式http://www.code4app.com/thread-30894-1-1.html 美团http://www.code4app.com/thread-30930-1-1.html 复杂布局 ...
- 5 HTML脚本&字符实体&URL
HTML脚本: 用<script>标签定义客户端脚本,比如JavaScript script元素即可包含脚本语句,也可以通过src属性指向外部脚本文件 JavaScript常用于图片操作. ...
- C#多态学习总结
面向对象编程三大特点 封装 继承 多态.今天我把自己学习多态的过程进行总结 多态 就是 同一个方法在不同情况下,会表选不同的效果(多个形态).在代码上表现就是 同一个父类对象 赋予不同的子类对象 就 ...
- windows下svn post-commit的实现
前言: 好的!在结束了上一博客教程的Subversion安装之后.我们开始了下一项工作,windows版本下 svn post-commit的实现.说实话,这方面的知识网上的知识并不是很多~~~~~~ ...
- VUE引入模块之import xxx from 'xxx' 和 import {xxx} from 'xxx'的区别
import FunName from ‘../xxx’ export defualt function FunName() { return fetch({ url: '/article/list' ...
- windows 批量杀进程 类似pkill
轉:http://blog.sina.com.cn/s/blog_55fb522f0100whki.html 1.开始-运行(或win+R),输入cmd,打开命令行模式: 2.输入tasklist,可 ...