SQL 2

本文介绍了SQL中的DML(Data Manipulation Language)和DQL(Data Query Language)语言。DML包括INSERT、DELETE和UPDATE操作,详细讲解了如何插入、更新和删除数据。DQL则关注数据查询,通过SELECT语句进行各种查询操作,包括条件查询、BETWEEN、IN、IS NULL和LIKE等模糊查询,并演示了排序查询的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、DML语言

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

    INSERT    实现数据的    插入
    DELETE    实现数据的    删除
    UPDATE    实现数据的    更新。

插入数据INSERT

完整插入
        语法

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

部分插入
        语法

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

这个语法在前面一篇已经说过了,这里不再过多说明。

更新数据UPDATE

        语法

update  表名  set  列名=值  values condition ;

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;

删除数据DELETE

       语法

delete   from  表名  where   condition;

mysql> delete from t2 where id=2;   //删除t2表中id为2的数据,如果后面不加where删除的就是整个表。
Query OK, 1 row affected (0.00 sec)

二、DQL语言

功能:在MySQL管理软件中,可以通过SQL语句中的DQL语言来实现数据的SELECT 查询操作。eg:互联网用户查询余额,查询装备,查询商品的操作。

准备环境

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

1、简单查询

查看所有列

select  * from  表名;

查看部分列

select    列1,列2,列3,...   from   表名;

 

通过四则运算查询

看年薪:

select name,salary,salary*14 from   employee5 ;

2、条件查询

单条件查询 where

查询是hr的人有谁:

mysql> select name,post from employee5 where post='hr';
+-------+------+
| name  | post |
+-------+------+
| aofa  | hr   |
| harry | hr   |
+-------+------+

多条件查询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;

 

关键字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;
    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 ;

对此可以使用IN,来解决这个问题。
        是什么什么

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) ; //工资不是4000,5000,6000的人有哪些

关键字 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='';

关键字LIKE模糊查询

好像有个员工姓阿

  SELECT * FROM employee5 
    WHERE name LIKE 'al%';

  通配符’%’代表多个任意字符
            注意不是shell的"*"星号。mysql使用"%"

  好像有个员工姓阿

  SELECT * FROM employee5 
    WHERE name LIKE 'al___';

    注意不是shell的“?”问号。mysql使用"_"下划线
            通配符’_’代表1个任意字符

3、查询排序

 例如以工资升序排列
        

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


    例如以工资降序排列

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

   工资最高的前五名

SELECT * FROM employee5 ORDER BY salary DESC 
LIMIT  5;        //默认初始位置为0 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值