mysql数据库之sql语句详解

一.sql语言之DQL

  1. DDL:数据定义语言。创建表结构,清空表、删除表、修改表
  2. DML:数据操纵语言。
  3. DQL:数据查询语句。表查询
  4. Where子句、集合(in | not in)
  5. 排序:在查询数据记录比较多时,对数据进行排序时:order by

   位置:在from之后

       格式:select … from user [where 子句] [order by 子句]

       排序规则:asc 升序(默认)

                 Desc 降序

【排序】

--练习1:查询员工表中的所有信息,按照部门号升序排序

--练习2:查询员工的编号,姓名,工资,奖金,部门号,

--      按照部门号降序排序,员工编号升序排序

select * from emp order by deptno asc;

select empno,ename,sal,comm,deptno from emp order by deptno desc,empno asc;

--练习3:查询30号部门的员工的姓名,工资,部门号。按照工资降序排序。

select ename,sal,deptno from emp where deptno=30 order by sal desc;

  1. 去重:关键字:distinct

         位置 :紧跟select

               select distinct deptno from emp

【去重】

--练习1:查看员工表中有哪些部门号。

select distinct job from emp;

--练习2:查看员工表中有几种奖金。

select distinct comm from emp;

  1. 分组查询与分组函数

       关键字:group by

       位置:select … from tableName [where 条件] [group by 子句]

       用法:group by field1[,Field2].

       注意:在分组查询时,select 子句中的字段,除了聚合函数之外,只能是     分组字段

       Count(*)、sum(*)、max(*)、min(*)

       Ps:聚合函数会忽略null值  

           因此会使用函数: ifnull()  

                          函数ifnull(filed,0)

       逻辑:如果field字段对应的值不是null,就使用field值,如果是null,就使用value

 

       Field1 , field2

        1       500

        2       600

        3       700

          九组

     

      通配符:*,可代替任何字段

 

【分组】

  --练习1:统计员工表中的姓名个数。

select count(ename) from emp;

--练习2:统计员工表中有多少条记录。

-- 通配符:*,可以替待任何字段

select count(*) from emp;

--练习3:查询员工表中的 员工的总工资,最大工资,最小工资,平均工资。

select sum(sal),max(sal),min(sal),avg(sal) from emp;

--练习4:查询30号部门的 总人数,工资之和,平均工资;

select count(*),sum(sal),avg(sal) from emp where deptno=30;

--练习5:查询30号部门的总人数,奖金之和,平均奖金;

-- 注意:需要对null值处理。

select count(*) "人数",sum(comm),avg(ifnull(comm,0)) from emp where deptno=30;

--练习6:查询每个部门的总人数,总工资,平均奖金,最高工资和最低工资。

select deptno, count(*),sum(sal),avg(ifnull(comm,0)),max(sal),min(sal)

from emp group by deptno;

--练习7:查询每种职位的总人数,最高工资,最低工资,以及平均工资

select job,count(*),max(sal),min(sal),avg(ifnull(sal,0)) from emp

group by job;

--练习8:查询每个部门的每种职位的总人数,平均工资,工资之和。按照部门升序排序。

select deptno,job,count(*),avg(ifnull(sal,0)),sum(sal)

from emp

  1. 子句总结:select子句  from子句 where子句 having   order by

一个完整sql语句:select from [where..] [group by..] [having..] [order by..]

     执行顺序:    5    1     2      3          4      6

 

二.sql语言之TCL: 事务控制语言

对于事务,我们要保证事物的完整性(成功 or 撤回)

事务的四个特性(ACID):

   a. 原子性(Atmoicity):事务要么成功,要么撤回。不可切割

   b.一致性(Consistency):事物开始前和结束后,要保持数据的一致性(转账前A、 B账号的钱总额为1000,转账结束后也为1000)

   c.隔离性(Isolation):当涉及到多用户操作同一张表的时候,数据库会为每一个用户开启一个事务。当其中一个事务正在进行,其他事务应该处于等待状态。保证事务不受影响

   d.持久性(Durability):当一个事务被提交后,保证数据库的数据是永久改变的。即使数据库崩溃,我们也要保证事务的完整性。

 

Commit:提交

Rollback: 撤回、回滚

 

事务:只有DML操作会触发一个事务

 

事务的验证:

第一步:start transaction

第二步:savePoint 保存点名称

第三步:DML

第四步:commit/rollback

 

三.SQL之DCL:数据控制语言

【1】创建用户:create user username@ip identified by newPwd

【2】显示用户的权限:

      Show grants for username@ip;

【3】授权

     Grant 权限1、权限2、权限3 .. on 数据库名.* to username@ip

【4】撤销权限:

     Revoke 权限1、权限2.. on 数据库名.* from username@ip

【5】删除用户

     Drop user username;

 

Flush privileges 刷新权限(使权限立即生效)

关联查询

  1. 多表查询格式:Select * from tname1,tname2

T1有20条,t2有10

查出来的总数据:20*10=200

  1. 等值查询:两张表有关系的时候等值查询

 

 

猜你喜欢

转载自blog.csdn.net/superXZT/article/details/82466001