0

MySQL基础之SQL基础2

 1 year ago
source link: https://blog.51cto.com/u_14483476/6235457
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

MySQL基础之SQL基础2

DML 语句

DML 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select),是开发人员日常频繁使用的操作。

1.插入记录

-- 表创建好后,就可以往里插入记录了。

-- 向表 emp 中插入以下记录,即 ename 为 zzx1, hiredate 为2000-01-01,sal为2000,deptno为1:

mysql> insert into emp (ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);

-- 也可以不用指定字段名称,但是 values 后面的顺序应该和字段的排列顺序一致:

mysql> insert into emp values('lisa','2003-02-01','3000',2);

-- 只对表中的 ename 和 sal 字段显式插入值:

mysql> insert into emp (ename,sal) values('dony',1000);

-- 查看一下实际插入值:
mysql> select * from emp;
MySQL基础之SQL基础2_表连接
-- 在 MySQL 中,insert 语句还有一个很好的特性,可以一次性插入多条记录。

-- 下面的例子中,对表 dept 一次插入两条记录:

mysql> create table dept(deptno int,deptname varchar(10));

mysql> insert into dept values(5,'dept5'),(6,'dept6');

mysql> select * from dept;
MySQL基础之SQL基础2_表连接_02

2.更新记录

-- 表里的记录值可以通过 update 命令进行更改

-- 例如,将表 emp 中 ename 为 “lisa” 的薪水(sal)从3000更改为4000:

mysql> update emp set sal=4000 where ename='lisa';
MySQL基础之SQL基础2_字段_03
-- 在MySQL中,update 命令可以同时更新多个表中的数据

-- 在下例中,同时更新表 emp 中的字段 sal 和表 dept 中的字段 deptname

--个人先调整自己的数据表
mysql> update emp set ename='zzx' where ename='zzx1';
mysql> update emp set sal=100 where ename='zzx';
mysql> update emp set sal=200 where ename='lisa';
mysql> delete from emp where ename='dony';
mysql> insert into emp values('bjguan','2004-04-02','100',1),('dony','2005-02-05','2000',4);

mysql> delete from dept;
mysql> insert into dept values(1,'tech'),(2,'sale'),(5,'fin');

--书本上的测试

mysql> select * from emp;

mysql> select * from dept;

mysql> update emp a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;

mysql> select * from emp;

mysql> select * from dept;
MySQL基础之SQL基础2_mysql_04
MySQL基础之SQL基础2_字段_05

3.删除记录

-- 如果记录不再需要,则可以用 delect 命令进行删除

-- 例如,在 emp 中将 ename为 "dony" 的记录全部删除

mysql> delete from emp where ename='dony';
MySQL基础之SQL基础2_表连接_06
-- 在 MySQL 中可以一次删除多个表的数据

--个人先调整自己的数据表

mysql> insert into emp values('bzshen','2005-04-01','300',3),('dony','2005-02-05','2000',4);

mysql> insert into dept values(3,'hr');

-- 在下面例子中,同时删除表 emp 和 dept 中 deptno 为3的记录

mysql> select * from emp;

mysql> select * from dept;

mysql> delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;

mysql> select * from emp;

mysql> select * from dept;


MySQL基础之SQL基础2_字段_07

4.查询记录

-- 数据插入到数据库中后,就可以用 select 命令进行各种各样的查询,使得输出的结果符合用户的要求。

-- 查询最简单的方式是将记录全部选出。

-- 以下两个查询是等价的:

mysql> select * from emp;
mysql> select ename,hiredate,sal,deptno from emp;
MySQL基础之SQL基础2_表连接_08

a.查询不重复的记录

-- 有时需要将表中的记录去掉重复后显示出来,可以用 distinct 关键字来实现:

mysql> select ename,hiredate,sal,deptno from emp;

mysql> select distinct deptno from emp;
MySQL基础之SQL基础2_mysql_09

b.条件查询

-- 用户不需要查询所有记录,只是需要根据限定条件来查询一部分数据,用 where 关键字可以实现

-- 例如,需要查询所有 deptno 为1的记录:

mysql> select * from emp;
mysql> select * from emp where deptno=1;
MySQL基础之SQL基础2_字段_10

c.排序和限制

-- 数据库的排序操作,用关键字 ORDER BY 来实现
-- DESC 表示按照字段进行降序排列,ASC 则表示升序排列,如果不写此关键字默认是升序排列。

-- 例如,把 emp 表中的记录按照工资高低进行显示:
mysql> select * from emp order by sal;

-- 如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,依次类推。
-- 例如,把 emp 表中的记录按照部门编号 deptno 字段排序
mysql> select * from emp order by deptno;

-- 对于 deptno 相同的前两条记录,如果要按照工资由高到低排序,可以使用下面命令
mysql> select * from emp order by deptno,sal desc;
MySQL基础之SQL基础2_字段_11
-- 对于排序后的记录,如果希望只显示一部分,而不是全部,则可以使用 LIMIT 关键字来实现。
-- 例如,显示 emp 表中按照 sal 排序后的前3条记录:
mysql> select * from emp order by sal limit 3;

-- 如果要显示 emp 表中按照 sal 排序后从第二条记录开始的3条记录,可以使用以下命令:
mysql> select * from emp order by sal limit 1,3;
MySQL基础之SQL基础2_mysql_12
-- 很多情况下,用户都需要进行一些汇总操作

-- 例如,要在 emp 表中统计公司的总人数:
mysql> select count(1) from emp;

-- 在此基础上,要统计各部门的人数:
mysql> select deptno,count(1) from emp group by deptno;

-- 更细一些,既要统计各部门人数,又要统计总人数:
mysql> select deptno,count(1) from emp group by deptno having count(1)>1;
MySQL基础之SQL基础2_mysql_13
-- 最后统计公司所有员工的薪水总额、最高和最低薪水:

mysql> select * from emp;

mysql> select sum(sal),max(sal),min(sal) from emp;
MySQL基础之SQL基础2_表连接_14

e.表连接

-- 当需要同时显示多个表中的字段时,可以用表连接来实现。

-- 例如,查询出所有雇员的名字和所在部门名称,因为雇员名称和部门分别存放在表 emp 和 dept 中,因此,需要使用表连接来进行查询:

mysql> select * from emp;
mysql> select * from dept;
mysql> select ename,deptname from emp,dept where emp.deptno=dept.deptno;
MySQL基础之SQL基础2_mysql_15
-- 外连接又分为左连接和右连接

-- 例如,查询 emp 中所有用户名和所在部门名称:
mysql> select * from emp;
mysql> select * from dept;
mysql> select ename,deptname from emp left join dept on emp.deptno= dept.deptno;

-- 右连接和左连接类似
mysql> select ename,deptname from dept right join emp on dept.deptno=emp.deptno;
MySQL基础之SQL基础2_字段_16

f.子查询

-- 某些情况下,当进行查询的时候,需要的条件是另外一个 select 语句的结果,这个时候,就要用到子查询。

-- 例如,从 emp 表中查询出所有部门在 dept 表中的所有记录:

mysql> select * from emp;
mysql> select * from dept;
mysql> select * from emp where deptno in(select deptno from dept);
MySQL基础之SQL基础2_表连接_17
-- 如果子查询记录数唯一,还可以用=代替 in

mysql> select * from emp where deptno = (select deptno from dept);
mysql> select * from emp where deptno = (select deptno from dept limit 1);

-- 某些情况下,子查询可以转化为表连接,例如
mysql> select * from emp where deptno in(select deptno from dept);

-- 转换为表连接后
mysql> select emp.* from emp ,dept where emp.deptno=dept.deptno;
MySQL基础之SQL基础2_字段_18

g.记录联合

-- 我们经常会碰到这样的应用,将两个表的数据按照一定的条件查询出来后,将结果合并到一起显示出来。

-- 将 emp 和 dept 表中的部门编号的集合显示出来:
mysql> select * from emp;
mysql> select * from dept;
mysql> select deptno from emp union all select deptno from dept;

-- 将结果去掉重复记录后显示
mysql> select deptno from emp union select deptno from dept;
MySQL基础之SQL基础2_字段_19
-- 书名: 深入浅出MySQL	--数据库开发、优化与管理维护(第3版)
    
-- 作者:翟振兴 崔春华 黄荣 董骐铭

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK