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 ...
随机推荐
- 字符串操作函数:JSON.parse()与JSON.stringify()的区别,字符串转数组 str.split(','),数组转字符串String(),以及对象拼接合并Object.assign(),数组拼接合并concat()
1.JSON.parse() 把字符串转化为 json 对象 例如 arr={ , "site":"www.runoob.com" } var obj = J ...
- Idea 隐藏不必要的文件或文件夹 eg:(.idea,.gitignore,*.iml)
在使用Idea的时候,有一些文件是不必要的,可以将他们隐藏起来 方法:打开File–>Settings–>Editor如图,在File Types 中的 Ignore files and ...
- Could not find a version that satisfies the requirement win32api (from versions: ) No matching distribution found for win32api
pip install win32api pip install pywin32 都会提示错误,如下: Could not find a version that satisfies the requ ...
- python集合操作方法详解
前言 说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球的人都有哪些? play_basketball = ['a','b','c','d','e'] ...
- redis-key管理
redis-key管理 1. redis key 本章主要内容为redis key级别的操作命令. 参考文档:https://redis.io/commands 1.1. Redis ...
- 牛顿迭代法--求任意数的开n次方
牛顿迭代法是求开n次方近似解的一种方法,本文参考. 引言 假如\(x^n = m\),我们需要求x的近似值. 我们设\(f(x) = x^n - m\), 那么也就是求该函数f(x)=0时与x轴的交点 ...
- 十五 OGNL的入门
一.访问对象的方法
- 吴裕雄--天生自然ORACLE数据库学习笔记:用户管理与权限分配
create user mr identified by mrsoft default tablespace users temporary tablespace temp; create user ...
- js缓慢运动,Math.ceil向上取整,floor向下取整
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- C++打开文件夹
https://bbs.csdn.net/topics/392055617?page=1 见2楼 system("start \"\" \"文件夹路径\&q ...