• MySQL关于命令的问题、Exists关键字


    truncate 与 delete 的区别

    truncate table :删除内容、不删除定义、释放空间。

    delete table : 删除内容、不删除定义、不释放空间。

    drop table :删除内容和定义,释放空间。

    1、truncate table 表名,只能删除表中全部数据。

    delete from 表名 where...,可以删除表中的全部数据,也可以删除部分数据。

    2、delete from 记录是一条条删的,所删除的没行记录都会进日志,而truncate一次性删掉整个页,因此日志里面只记录页释放。

    3、truncate删除后,不能回滚。delete可以回滚。

    4、truncate的执行速度比delete快。

    5、delete执行后,删除的数据占用的存储空间还在,还可以恢复数据。truncate删除的数据占用的存储空间不在,不可以恢复数据。

    SQL的授权语句和收回权限语句

    grant 权限 on 数据库对象 to 用户

      grant insert on scott.Employees to user1,user2;

      grant delete on scott.Employees to user1,user2;

      grant select on scott.Employees to user1,user2;

      grant update on scott.Employees to user1,user2;

    revoke 权限 on 数据库对象 from 用户

    怎么新加一行记录、怎么添加一个列字段,修改列?

    插入一行数据:

      insert into stu(stuName,stuAge,stuSex)values('张三','20','男')

    增加列:

      alter table tableName add (column)columnName varchar(30)

    删除列:

      alter table tableName drop (column) columnName

    select Count(*) 和 Select Count(数字)以及Select Count(column)区别

      count(*)跟count(1)的结果一样,返回记录的总行数,都包括对NULL的统计,而count(column)是不包括NULL的统计。

     执行效果上:

      count(*)包括了所有的列,相当于行数,在统计结果的时候,包含NULL;

      count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,包含NULL;

      count(列名)只包括列名那一列,在统计结果的时候,不包含NULL;

     执行效率上:

      列名为主键,count(列名)会比count(1)快;列名不为主键,count(1)会比count(列名)快;

      如果表多个列并且没有主键,则count(1)的执行效率优于count(*);

      如果有主键,则count(主键)的执行效率是最优的;如果表只有一个字段,则count(*)最优。

    exists关键字的使用方法

      exists关键字表示存在。使用exists关键字时,内层查询语句不返回查询的记录,而是返回一个真假值。

      如果内层查询语句查询到符合条件的记录,就返回一个真值(true),否则,将返回一个假值(false):

        当返回的值为true时,外层查询语句将进行查询;

        当返回的值为false时,外层查询语句将不进行查询或者查询不出任何记录。

    实例1

      如果department表中存在d_id取值为1003的记录,则查询employee表的记录。select语句的代码如下:

      select * from employee

          where  exists

            (select d_name from department where d_id=1003);

      因为department表中存在d_id值为1003的记录,内层查询语句返回一个true,外层查询语句接收true后,开始查询employee表中的记录。因为没有设置查询employee表的查询条件,所以查询了employee表的所有记录。

    实例 2

      exists 关键字可以与其他的查询条件一起使用。条件表达式与exists关键字之间用AND或者OR进行连接。

      如果department表中存在d_id取值为1003的记录,则查询employee表中age大于24岁的记录。select语句的代码如下:

      select * from employee

          where age>24 AND exists

            (select d_name from department where d_id=1003);

      因为,当内层查询语句从department表中查询到记录,返回一个true,外层查询语句开始进行查询,根据查询条件,从employee 表中查询出age大于24岁的两条记录。

    实例 3

      not exists 与 exists正好相反。使用 not exists关键字时,当返回的值是true时,外层查询语句不进行查询或查询不到任何记录;当返回值是false时,外层查询语句将进行查询。

      如果department表中不存在d_id字段取值为1003的记录,则查询employee表的记录。select 语句的代码如下:

       select * from employee

          where not exists

            (select d_name from department where d_id=1003);

    判断表的字段值是否为空

      1、查询字段为空的语法:where<字段名>is null

      2、查询字段值不为空的语法:where <字段名>is not null 或者 where NoT(<字段名>IS NULL)

    有一个学生表,有三个字段:name、course、score,每一个学生都有三门课程,比如数学、语文、英语,写SQL语句,查找出三门课程的成绩都大于80的学生。

      采用逆向思维。求三门成绩都达于80的人,也可以是使先查出有成绩小于80的人,再除去这些人就是三门成绩都大于80的人了。

    方法1:

      select distinct A.name from Student  A

                where A.name not in

                  (select distinct S.name from student S where S.score<80);

    方法2:

      select S.name from Student  S  group by  S.name  Having  MIN(S.score)>=80;

    一个表只有一列name,有重复的name,求出前十个name数最大的name。

      select  distinct name,count(name) a from user

                        group by name

                        order by  a desc

                        limit  10

  • 相关阅读:
    hadoop 2.7 添加或删除datanode节点
    hadoop HA集群的安装
    Linux-PAM认证
    [Notice]博客地址转移 vitostack.com
    WPF 自定义 MessageBox (相对完善版 v1.0.0.6)
    python2.7 倒计时
    Hadoop Streaming框架使用(二)
    Hadoop错误码速查
    Hadoop Streaming框架使用(一)
    python清空列表的方法
  • 原文地址:https://www.cnblogs.com/HuiH/p/12581862.html
Copyright © 2020-2023  润新知