vlambda博客
学习文章列表

mysql开源数据库实战sql语言2

开源数据库MySQL DBA运维实战 第3章 SQL2

DML

目的

在MySQL管理软件中,DDL已经定义了数据库结构。

那么如何对其中的数据进行管理呢?

可以通过SQL语句中的DML语言来实现数据的操作,包括使用

      INSERT      实现数据的      插入

      DELETE      实现数据的      删除

      UPDATE      实现数据的      更新。

一、插入数据INSERT

完整插入

      语法

      INSERT INTO 表名                          VALUES (值1,值2,值3…值n);



部分插入

      语法

      INSERT INTO 表名(列名,列名)  VALUES (值1,值2);

    


二、更新数据UPDATE

语法

            UPDATE   表名   SET   列名=值   WHERE   CONDITION;

示例1

      准备一张表

      mysql> create table t6(id int, name varchar(20));

      mysql> insert into t6 values (1,'aa');

      mysql> insert into t6 values (2,'bb');

      更新数据

      需求:把bb改成cc

      mysql> update   t6   set   name='cc' where id=2;

      查询结果

      mysql> select * from t6;

   

      修改mysql数据库管理员root账户的密码。

      mysql> update mysql.user set authentication_string=password("QianFeng@123456") where user="root";

三、删除数据DELETE

语法:

      DELETE   FROM    表名   WHERE   CONDITION;

示例:

      需求:删除id为2 的用户记录。

      mysql> delete from t6 where id=2;

      请思考不加where条件会如何。

mysql开源数据库实战sql语言2

DQL

目的

在MySQL管理软件中,可以通过SQL语句中的DQL语言来实现数据的

      SELECT 查询操作

      互联网用户查询余额,查询装备,查询商品的操作。

MySQL查询

准备环境

      素材1

      准备一张表,包含

      三列信息

      id  int  序号

      name  varchar  姓名

      age int  年龄

      示例

      create   table   t3   (id   int,name   varchar(20),age  int);

      再插入测试数据

      insert   into   t3   values  (1,"zhangsan",23);

      insert   into   t3   values  (2,"lisi",24);

      insert   into   t3   values  (3,"wangwu",18);

      素材2

      表结构
请将该页置于桌面

         

mysql开源数据库实战sql语言2

      company 公司

      department 部门

      employee 员工

      结构语句

      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
     );

      查看表结构

      desc employee5;
请将该页内容置于桌面。

         

mysql开源数据库实战sql语言2

      插入数据

      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);

      图示

         

mysql开源数据库实战sql语言2

一、简单查询

      简单查询

      查看所有列

      前提是需要进入数据库。

      不进入数据库,就请输入库名。

      SELECT    *    FROM   表名;

      查部分列

      SELECT   列1,列2,列3    FROM     表名;

mysql开源数据库实战sql语言2

      通过四则运算查询

      看一看年薪

          SELECT name, salary, salary*14 FROM employee5;

mysql开源数据库实战sql语言2

二、条件查询

      单条件查询where

      查询hr部门的员工姓名

      SELECT name,post
      FROM employee5
      WHERE post='hr';

mysql开源数据库实战sql语言2

      多条件查询AND/OR

      查询hr部门的员工姓名,并且工资大于1000

      SELECT name,salary
      FROM employee5
      WHERE post='hr' AND salary>1000;

      查询所有部门的员工姓名,并且工资是6000或者8000的员工

      SELECT name, salary FROM employee5
      WHERE salary=6000 OR salary=8000
mysql开源数据库实战sql语言2

      OR

      AND

      关键字BETWEEN AND 在什么之间

      需求:查一查薪资在5000到15000

      SELECT name,salary FROM employee5

      WHERE salary BETWEEN 5000 AND 15000;

      需求:不在5000~15000呢?请使用NOT

      SELECT name,salary FROM employee5
      WHERE salary NOT BETWEEN 5000 AND 15000;
mysql开源数据库实战sql语言2

      BETWEEN  5000  AND  15000

      关键字IN集合查询

      工资可能是4000,也可能是5000,还有可能是9000,怎么查

      OR可以组合多条件,效率如何?
SELECT name, salary FROM employee5
      WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000 ;

      优化

      是什么什么
SELECT name, salary FROM employee5
      WHERE salary IN (4000,5000,6000,9000) ;

      不是什么什么
SELECT name, salary FROM employee
      WHERE salary NOT IN (4000,5000,6000,9000) ;
mysql开源数据库实战sql语言2

      关键字IS NULL

      没有岗位描述的

     
SELECT name,job_description FROM employee5
      WHERE job_description IS NULL;

      非空
SELECT name,job_description FROM employee5
            WHERE job_description IS NOT NULL;

      错误示范,空格''
SELECT name,job_description FROM employee5 
      WHERE job_description='';
mysql开源数据库实战sql语言2

      关键字LIKE模糊查询

      好像有个员工姓阿

      SELECT * FROM employee5

      WHERE name LIKE 'al%';

      通配符’%’代表多个任意字符

      注意不是shell的"*"星号。mysql使用"%"mysql开源数据库实战sql语言2

      好像有个员工姓阿

      SELECT * FROM employee5
      WHERE name LIKE 'al___';

      注意不是shell的“?”问号。mysql使用"_"下划线

      通配符’_’代表1个任意字符mysql开源数据库实战sql语言2

三、查询排序

      例如以工资升序排列

      SELECT    *     FROM     表名   ORDER       BY     工资的列名     ASC;

      例如以工资降序排列

mysql开源数据库实战sql语言2

      SELECT    *     FROM     表名   ORDER BY    工资的列名     DESC;

      工资最高的前五名

      SELECT * FROM employee5 ORDER BY salary DESC

LIMIT  5;       

      //默认初始位置为0