MySql对数据的增删改查

SQL简介

SQL语言是一种数据库查询和程序设计语言。其主要用于存取数据、查询数据、更新 数据和管理关系数据库系统。SQL语言是IBM公司于1975年〜1979年之间开发出来的, 主要使用于IBM关系数据库原型System R。在20世纪80年代,SQL语言被美国国家标 准学会(American National Standards Institute,简称为 ANSI)和国际标准化组织(International Organization for Standardization,简称为丨SO)通过为关系数据库语言的标准。

SQL语言分为3个部分:

  • 数据定义语言(Data Definition Language,简称为DDL)
  • 数据操作语言(Data Manipulation Language,简称为DML)
  • 数据控制语言(Data Control Language,简称为 DCL)。

DDL语句:数据定义语言主要用于定义数据库、表、视图、索引和触发器等。其 中包括CREATE语句、ALTER语句和DROP语句。CREATE语句主要用于创建 数据库、创建表和创建视图等。ALTER语句主要用于修改表的定义、修改视图的 定义等。DROP语句主要用于删除数据库、删除表和删除视图等。

DML语句:数据操纵语言主要用于插入数据、查询数据、更新数据和删除数据。 其中包括INSERT语句、SELECT语句、UPDATE语句和DELETE语句。INSERT 语句用于插入数据;SELECT语句用于查询数据;UPDATE语句用于更新数据; DELETE语句用于删除数据。

DCL语句:数据控制语言主要用于控制用户的访问权限。其中包括GRANT语句 和REVOKE语句。GRANT语句用于给用户增加权限;REVOKE语句用于收回用 户的权限。

数据库管理系统通过这些SQL语句可以操作数据库中的数据。在应用程序中,也可以 通过SQL语句来操作数据。例如,可以在Java语言中嵌入SQL语句。通过执行Java语言 来调用SQL语句,这样即可在数据库中插入数据、查询数据。SQL语句也可以嵌入到C# 语言、PHP语言等编程语言中。

插入数据
给指定列插入数据
Insert into 表(列1,列2…)values (值1,值2…);
没有赋值的字段,数据库系统会为其插入默认值。这个默认值是在创建表的时候定义的。如果没有定义默认值,那么就是NULL.

给所有列插入数据
Insert into 表 values(值1,值2…);

插入多个行
Insert into 表 (列1,列2…) values(值1,值2…),( 值1,值2…),( 值1,值2…)…;

练习:创建如下三张表,并且添加数据【重要,必须完成,否则后续课程无法继续】
在这里插入图片描述

查询数据

  • 查询单个列
    SELECT 列名称 FROM table;

  • 查询员工的姓名
    SELECT ename FROM emp;

  • 查询多个列
    SELECT 列1,列2,列3… FROM table;

  • 查询员工的姓名和工作
    SELECT ename , job FROM emp;

  • 查询所有列
    SELECT * FROM table;

  • 查询员工的所有信息
    SELECT * FROM emp;

  • 去除重复数据
    SELECT DISTINCT 列1,列2… FROM table;

  • 查询emp表中有哪些工种
    SELECT DISTINCT job FROM emp;
    查询中的四则运算
    Mysql支持在查询中直接进行四则运算[ +、-、*、/ ]

  • 查询每个员工的年薪
    SELECT ename,sal*12 FROM emp;

  • 查询用别名
    Select 列1 AS 别名1,列2 别名2 … FROM 表;

  • 查询每个员工的年薪
    SELECT ename 姓名,sal*12 AS 年薪 FROM emp;

  • 排序查询
    SELECT * FROM 表 ORDER BY 列1 ASC,列2 DESC…

  • 查询员工的姓名和工资,按照工资降序排序
    SELECT ename,sal FROM emp ORDER BY sal DESC;

  • 按照多个字段排序:查询员工的姓名,入职日期和工资,按照工资升序,入职日期升序排序
    SELECT ename,emp.HIREDATE,sal FROM emp ORDER BY sal ASC, emp.HIREDATE ASC;

  • 分页查询
    SELECT * FROM table LIMIT start,pagesize;

  • 查询员工表的前三条记录
    SELECT ename,emp.HIREDATE,sal FROM emp LIMIT 3; – 取出来前3条记录

  • 查询员工表中间的三条记录,从第五条开始取
    SELECT ename,emp.HIREDATE,sal FROM emp LIMIT 4,3; – 5是行号,行号从0开始

  • 查询员工表中间的10条记录,从第5条开始取,按照工资升序
    SELECT ename,emp.HIREDATE,sal FROM emp ORDER BY sal LIMIT 5,10;

  • 使用全限定的列名查询
    SELECT 表1.列1,表1.列2… FROM 表;

  • 查询员工姓名和工资
    SELECT emp.ename ,emp.sal FROM emp;

  • 查用表别名查询
    SELECT a.列1,a.列2… FROM 表 a;

  • 查询员工的姓名和工资
    SELECT e.ename ,e.sal FROM emp e;
    WHERE子句
    Select * from 表 where 条件 order by column1…;
    在这里插入图片描述

使用比较运算符查询

  • 查询员工编号是7566的员工信息
    SELECT * FROM emp e WHERE e.EMPNO = 7566;

  • 查询不是销售员的员工信息
    SELECT * FROM emp e WHERE e.JOB != ‘SALESMAN’;
    SELECT * FROM emp e WHERE e.JOB <> ‘SALESMAN’;

  • 查询工资小于3200的员工信息
    SELECT * FROM emp e WHERE e.SAL < 3200;

  • 查询工资大于3200的员工信息
    SELECT * FROM emp e WHERE e.SAL > 3200;

  • 查询工资小于等于2000的员工信息
    SELECT * FROM emp e WHERE e.SAL <= 2000;

  • 查询工资大于等于2000的员工信息
    SELECT * FROM emp e WHERE e.SAL >= 2000;
    进行范围查询

  • 查询工资在2000 - 3000之间的员工信息
    SELECT * FROM emp e WHERE e.SAL BETWEEN 2000 AND 3000;
    空值/非空查询

  • 查询有奖金的员工信息
    SELECT * FROM emp e WHERE e.COMM IS NOT NULL;

  • 查询没有奖金的员工信息
    SELECT * FROM emp e WHERE e.COMM IS NULL;
    多条件查询-AND

  • 查询销售员中工资大于1200的员工信息
    SELECT * FROM emp e WHERE e.SAL > 1250 AND e.JOB = ‘salesman’;

  • 查询销售员中工资大于1200的员工信息入职日期在1981年5月之前的
    SELECT * FROM emp e WHERE e.SAL > 1250 AND e.JOB = ‘salesman’ AND e.HIREDATE < ‘1981-5-1’;
    多条件查询-OR

  • 查询工资大于4500或者是销售员的员工信息
    SELECT * FROM emp e WHERE e.SAL > 4500 OR e.JOB = ‘salesman’;

  • 查询7566,7788,7956三个员工的信息
    SELECT * FROM emp e WHERE e.EMPNO = 7566 OR e.EMPNO = 7788 OR e.EMPNO = 7839;
    IN关键字查询

  • 查询7566,7788,7956三个员工的信息
    SELECT * FROM emp e WHERE e.EMPNO IN (7566,7788,7839,777);
    NOT关键字查询

  • 查询不是7566,7788,7956这三个员工的信息
    SELECT * FROM emp e WHERE e.EMPNO NOT IN (7566,7788,7839);
    模糊查询

  • 查询姓名中带有A的员工信息
    SELECT * FROM emp e WHERE e.ENAME LIKE ‘%a%’;

  • 查询姓名中以A结尾的员工信息
    SELECT * FROM emp e WHERE e.ENAME LIKE ‘%a’;

  • 查询姓名中以A开头的员工信息
    SELECT * FROM emp e WHERE e.ENAME LIKE ‘a%’;

  • 查询姓名中第二个字母是A的员工信息
    SELECT * FROM emp e WHERE e.ENAME LIKE ‘_a%’;

  • 查询姓名中第三个字母是A的员工信息
    SELECT * FROM emp e WHERE e.ENAME LIKE ‘__a%’;

  • 查询姓名中第二个字母是_的员工信息
    SELECT * FROM emp e WHERE e.ENAME LIKE ‘/%’ ESCAPE ‘/’;

  • 组合查询-合并结果集

  • 查询工资在1200以上的员工信息
    SELECT ename,sal FROM emp e WHERE e.SAL > 1200;

  • 查询工资在3000以上的员工信息
    SELECT ename,sal FROM emp e WHERE e.SAL > 3000;

  • 合并结果集: 去除重复数据
    SELECT ename,sal FROM emp e WHERE e.SAL > 1200
    UNION
    SELECT ename,sal FROM emp e WHERE e.SAL > 3000;

  • 合并结果集:不去除重复数据
    SELECT ename,sal FROM emp e WHERE e.SAL > 1200
    UNION ALL
    SELECT ename,sal FROM emp e WHERE e.SAL > 2000 ORDER BY sal;

  • 分组函数(聚合函数)
    在这里插入图片描述

  • 求和函数SUM() :求所有人的工资总和
    SELECT SUM(sal) FROM emp ;

  • 求20号部门的工资总和
    SELECT SUM(sal) FROM emp WHERE emp.DEPTNO = 20;

  • 求平均数的函数AVG():求所有人的平均工资
    SELECT AVG(sal) FROM emp ;

  • 求20号部门的平均工资
    SELECT AVG(sal) FROM emp WHERE emp.DEPTNO = 20;

  • 求最大值函数MAX():查询最高工资
    SELECT MAX(sal) FROM emp ;

  • 查询20号部门的最高工资
    SELECT MAX(sal) FROM emp WHERE emp.DEPTNO = 20;

  • 求最小值函数MIN():查询最低的工资
    SELECT MIN(sal) FROM emp ;

  • 查询20号部门的最低工资
    SELECT MIN(sal) FROM emp WHERE emp.DEPTNO = 20;

  • 求总行数的函数count():查询公司有多少名员工
    SELECT COUNT(empno) FROM emp;

  • 查询20号部门的人数
    SELECT COUNT(empno) FROM emp WHERE emp.DEPTNO = 20;

分组查询

  • 查询每个部门的最低工资
    SELECT deptno,MIN(sal) xyz FROM emp GROUP BY deptno;
  • 查询每个部门的最高工资
    SELECT deptno,MAX(sal) xyz FROM emp GROUP BY deptno;
  • 查询每个部门的人数
    SELECT deptno,COUNT(empno) xyz FROM emp GROUP BY deptno;
  • 查询每个部门下每个工种有多少人
    SELECT deptno,job,COUNT(empno) FROM emp e GROUP BY e.DEPTNO,e.JOB;
  • 查询每个部门的最低工资以及部门号
    SELECT deptno,MIN(sal) FROM emp e GROUP BY e.DEPTNO;

-分组函数练习:显示非销售人员工作名称以及从事同一工作的员工的月工资的总和
SELECT e.JOB,SUM(sal) FROM emp e WHERE e.JOB <> ‘salesman’ GROUP BY e.JOB;

  • 分组查询:对分组条件筛选
    对分组以后的数据进行筛选使用HAVING子句
  • 显示非销售人员工作名称以及从事同一工作的员工的月工资的总和,
  • 并且要满足从事同一工作月工资总和大于5000,结果按月工资总和的升序排列。取出来第一条记录
    SELECT e.JOB,SUM(sal) 总和 FROM emp e WHERE e.JOB <> ‘salesman’
    GROUP BY e.JOB HAVING SUM(sal) > 5000 ORDER BY 总和 DESC LIMIT 1;

小总结:

  • SQL语句顺序:
    select 列1,列2… from tableName [WHERE 子句] [GROUP BY 子句] [HAVING 子句] [ORDER BY 子句] [limit x,y]
    删除数据
    格式:DELETE FROM tableName [WHERE 条件];

  • 删除要带条件,否则删除整张表中的数据
    DELETE FROM salgrade;

  • 删除编号是7369的员工
    DELETE FROM emp WHERE empno = 7369;

  • 删除7521或者是20号部门的员工
    DELETE FROM emp WHERE empno = 7521 OR deptno = 20;

  • 如果确实要清空表中的数据,那么使用截断表速度更快
    TRUNCATE emp;

更新数据
格式:UPDATE tableName SET 列1 = 值1,列2 = 值2 [where 条件]

  • 将所有的部门地址修改成上海
    UPDATE dept SET loc = ‘上海’; – 更新也要带条件,否则更新全表
  • 将10号部门地址修改成北京,部门名称修改成信息部
    UPDATE dept SET dname = ‘信息部’,loc = ‘北京’ WHERE deptno = 10;

猜你喜欢

转载自blog.csdn.net/shuai_ge_feng/article/details/108770974
今日推荐