MySql简单查询——单表查询

   一、DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

     相关字段:create,drop,alter,use,show,database,table

     操作对象:数据库和表的创建修改删除查看使用。

      create  database  student_db;    //创建数据库

      create  table  student (   );  //创建表

      drop database   if exists  student_db;  //删除数据库

      drop table if exists  student;   //删除表

      alter  table student add(... SEX   varchar(20))     //添加列

      alter table  student  modify  SEX  varchar(10));    //修改列的类型  

      alter table student  change  sex   varchar(10));   //修改列名

      alter  table student  drop  sex;     //删除列明

      alter  table student rename teacher;     //修改表名

      alter database test999 character set utf8;  //修改数据库编码为utf-8(在MySQL里‘-’省掉)

      常用类型:

  1. int:整型
  2. double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
  3. decimal:泛型型(浮点型),在表单钱方面使用该类型,因为不会出现精度缺失问题;
  4. char:固定长度字符串类型;长度默认255。
  5. varchar:可变长度字符串类型;(65535)
  6. text:字符串(文本)类型;
  7. blob:字节类型;
  8. date:日期类型,格式为:yyyy-MM-dd;
  9. time:时间类型,格式为:hh:mm:ss
  10. timestamp:时间戳类型;

  二、DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);

      操作方式:添加,修改,删除;

      操作对象:对表内;

      (1).插入或添加 数据;

       insert  into student  (字段1,字段2,...) values(' 数据1','数据2',...);

       insert  into student   values(' 数据1','数据2',...);

      注:所插入的数据与字段必须一一对应;

     (2).修改数据;

       UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件

        update  student set  name='zhangsan',age=22,sex='男' where sdu_id=001;

     (3).删除数据

      delete from student  where  name='lisi';

      truncate table stu;

       注:

        虽然TRUNCATE和DELETE都可以删除表的所有记录,但有原理不同。DELETE的效率没有TRUNCATE高!

TRUNCATE其实属于DDL语句,因为它是先DROP TABLE,再CREATE TABLE。而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)。

三、DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

四、DQL(Data Query Language):数据查询语言,用来查询记录(数据)。

      (1).简单查询

         select *from student;

         selstct*from student  where ...

         between...and... 在什么之间

         in(20,30)  表示包括20,和30,而非区间;

         is null /is not null表示空/非空

         and  并    or  和

         注:or条件要用一个括号括起来

         select *from employee where (department_NO='D2019090001' and job='总经理') or( department_NO='D2019090011' and job='财务总监') or (job  not in('总经理','销售总监')  and employee.salary>=4000);

          like  模糊查询 ,与'—'和'%'搭配使用,'—'表示任意一个字符,%表示n个字符

          distinct  去重,若某个字段存在相同的记录,需要去重时

          select  distinct  salary from  student;

           order   by asc升序

           order  by desc  降序

           group  by  分组

           having   过滤

           count()   统计行(个数)

           as  起别名

     使用顺序:

       select  *from student  where  ... group by  department  order  by  salary  asc  having  bonus  >1000; 

where>group by>order by>having

表    

 

问题 :

  1. 查询出部门编号为D2019060011的所有员工
  2. 所有财务总监的姓名、编号和部门编号。
  3. 找出奖金高于工资的员工。
  4.  找出奖金高于工资40%的员工。
  5. 找出部门编号为D2019090011中所有财务总监,和部门编号为D2019060011中所有财务专员的详细资料。
  6.  找出部门编号为D2019090001中所有总经理,部门编号为D2019090011中所有财务总监,还有即不是总经理又不是销售总监但其工资大或等于4000的所有员工详细资料。
  7. 有奖金的工种。
  8. 无奖金或奖金低于1000的员工。
  9. 查询名字由两个字组成的员工。
  10. 查询2020年入职的员工。
  11. 查询所有员工详细信息,用编号升序排序。
  12.  查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序。
  13. 查询每个部门的平均工资。
  14. 求出每个部门的雇员数量。
  15. 查询每种工作的最高工资、最低工资、人数.
  16.  列出最低薪金大于4000的各种工作及从事此工作的员工人数。
  17. 统计各部门工资总和,显示部门编号和该部门雇员的月工资的总和,并且要满足该部门雇员的月工资合计大于6000,输出结果按月工资的合计升序排列。

答案:

  1. 查询出部门编号为D2019060011的所有员工

      select name from employee where department_NO='D2019060011';

         

      2.所有财务总监的姓名、编号和部门编号。

     select name,number,department_NO from employee where job='财务总监';

      

      3.找出奖金高于工资的员工。

    select name,salary,bonus from employee where employee.bonus>employee.salary;

     

 

     4.找出奖金高于工资40%的员工。

    select name,salary,bonus from employee where employee.bonus>employee.salary*0.4;

     

 

      5.找出部门编号为D2019090011中所有财务总监,和部门编号为D2019060011中所有财务专员的详细资料。

  select*from employee where department_NO='D2019090011' and job='财务总监'  or department_NO='D2019060011' and job='财务专员';

 

    6. 找出部门编号为D2019090001中所有总经理,部门编号为D2019090011中所有财务总监,还有即不是总经理又不是销售总监但其工资大或等于4000的所有员工详细资料。

  select *from employee where (department_NO='D2019090001' and job='总经理') or( department_NO='D2019090011' and job='财务总监') or (job  not in('总经理','销售总监')  and employee.salary>=4000);
      

   7.有奖金的工种。

  select job,bonus from employee where employee.bonus is not null;

   

   8.无奖金或奖金低于1000的员工。

    select name ,bonus from employee where employee.bonus is null or employee.bonus<1000;

    

 9.查询名字由两个字组成的员工。

     select name from employee where employee.name like '__';

     

 10.查询2020年入职的员工。

    select  name ,hire_date from employee where employee.hire_date like '2020%';
     

 11.查询所有员工详细信息,用编号升序排序。

   select*from employee order by employee.number asc ;

    

 12. 查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序。

    select *from employee order by employee.salary desc , employee.hire_date  asc  ;

    

 13.查询每个部门的平均工资。

  select department_NO, avg(salary) as '平均工资' from  employee GROUP BY department_NO;

    

 14.求出每个部门的雇员数量。

   select  department_NO,count(department_NO is not null ) as '部门人数总和' from employee GROUP BY department_NO;

    

 15.查询每种工作的最高工资、最低工资、人数.

    select  job, max(salary),min(salary),count(*) from employee group by job;

    

 16. 列出最低薪金大于4000的各种工作及从事此工作的员工人数。

     select job,min(salary),count(*) from employee  group by job having min(salary)>4000;

     

 17.统计各部门工资总和,显示部门编号和该部门雇员的月工资的总和,并且要满足该部门雇员的月工资合计大于6000,输出结果按月工资的合计升序排列。

    select department_NO,sum(salary) from employee group by department_NO having sum(salary)>6000 order by salary asc;

    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值