zoukankan      html  css  js  c++  java
  • 掌握 MySQL3

    十二、修改表的完整语句

      1、修改表名

        alter table 表名

          rename 新表名  

      2、增加字段

        alter table 表名

          add 字段名 数据类型 [完整性约束条件...]

          add 字段名 数据类型 [完整性约束条件...]

        alter table 表名

          add 字段名 数据类型 [完整性约束条件...] first

        alter table 表名

          add 字段名 数据类型 [完整性约束条件...] after 字段名;

      3、删除字段

        after table 表名

          drop 字段名

      4、修改字段  # modify 只能改字段数据类型和完整约束,不能改字段名,change 可以。

        alter table 表名

          modify 字段名 数据类型 [完整性约束条件...]

        alter table 表名

          change 旧字段名 新字段名 旧数据类型 [完整性约束条件...]

        alter table 表名

          change 旧字段名 新字段名 新数据类型 [完整性约束条件...]

    十三、基本的查询语句及方法

      13.1、where  

        1、查询 id 大于等于 3 小于等于 6 的数据

          select * from emp where id >=3 and id <= 6;

          select * from emp between 3 ande 6:

        2、查询薪资是20000或18000或17000的数据

          select * from emp where salary = 2000 or salary = 18000 or salary = 17000;

          select * from emp where salary in (20000,18000,17000);

        3、模糊匹配  like

          %:匹配多个任意字符

          _:匹配一个任意字符

        查询员工姓名中包含 o 字母的员工姓名和工资

          select name,salary from emp where name like '%o%'; 

        查询员工姓名是由四个字符组成的员工姓名与其薪资

          select name,salary from emp where name like '____';

        4、查询岗位描述为空的员工名与岗位名

          select name,post from emp where post_comment is null;

      13.2、group by  分组

        分组后最小单位是组,而不再展示组内单个数据的信息,但可以通过其他方法(聚合函数)获取。

        1、按部门分组

          select * from group by post;

          如果 MySQL 不报错,说明没有设置严格模式

          

          show variables like '%mode%';

          set session  当前窗口有效

          set globle    全局有效

          set globle sql_mode='strict_trans_tables,only_full_group_by';

          

            select post from emp group by post;

        2、聚合函数(max,min avg,sum,count)

          1、获取每个部门的最高工资(max)        

            select post,max(salary) from emp group by post;

            给字段取别名

            select post as '部门',max(salary) as '最高工资' from emp group by post;

          2、获取每个部门的人数(count)

            在统计分组内个数的时候,填写任意非空字段都可以完成计数

            select post,count(age) from emp group by post;

          3、查询分组后的部门名称和每个部门下所有的学生姓名(concat)

            concat 可以用来拼接数据

              concat  不分组的情况下使用

              group_concat  分组之后使用

            select concat('NAME:',name),concat('SAL:',salary) from emp;

            select post,group_concat(name,':',salary) from emp group by post;

          4、查询员工年薪

            select name,salary*12 from emp;

      13.3、having

        效果和 where 一样,也是用来筛选数据,但 having 跟在group by 之后

        where 是对整体数据做一个初步筛选

        having 是对分组之后的数据再进行一次针对性的筛选

        统计个部门年龄在 30 岁以上的员工平均工资,并保留平局工资大于 10000 的部门

          select post,avg(salary) from emp where age > 30 group by post having avg(salary) > 10000;

       13.4、distinct  去重(针对重复的数据)

        select distinct id,age from emp;

      13.5、order by  排序

        默认是升序  asc

        可以改成降序  desc

        select * from emp order by salary;

        select * from emp order by salary asc;

        select * from  emp order by salary desc;

        select * from emp order by age,salary;  先按照 age 做升序,相同的情况下按照 salary 做升序

        select * from emp order by age asc,salary desc;

      13.6、限制展示数据的条数

        select * from emp limit 5;  # 展示5条数据

        select * from emp limit 3,5;  # 由 4 起始展示 5 条数据  

        查询工资最高的人的详细信息

          先按照薪资排序

          使用 limit 限制,只取一条

        select * from emp order by salary desc limit 1;

      13.7、正则

        select * from emp where name regexp '^j.*(n|y)$;

      13.8、多表查询

        表查询分为两大类

          1、连表查询

          2、子查询

        select * from emp,dep;  # 笛卡尔积

        查询员工与部门信息  

          select * from emp,dep where emp.dep_id = dep.id;

        查询部门为技术部的员工和部门信息

          select * from emp,dep where emp.dep_id = dep.id and dep.name = ‘技术’

        

        有专门帮你做连表的方法

        内连接(inner join):只取两张表有对应关系的记录

          select * from emp inner join dep on emp.dep_id = dep.id;

        左连接(left join):在内连接的基础上保留左表没有对应关系的记录,左表空余记录用 null 填充

          select * from emp left join dep on emp.dep_id = dep.id;

        右连接(right join):在内连接基础上保留右表没有对应关系的记录

          select * from emp right join dep on emp.dep_id = dep.id;

        全连接(union):在内连接基础上保留左、右表没有对应关系的记录

          select * from emp right join dep on emp.dep_id = dep.id;

          union

          selecr * from emp left join dep on emp.dep_id = dep.id;

      13.9、将一张表的查询结果作为另外一个 sql 语句的查询条件

        select name from dep where id = (select dep_id from emp where name = 'a');

        

        

  • 相关阅读:
    CXB 闯关游戏
    CXB 移动“哨兵棋子”
    GHOJ 300 Hanoi塔
    攻防世界 web 进阶区 刷题记录
    攻防世界 web 新手练习 刷题记录
    TensorFlow01:增加变量显示+tensorboard可视化
    TensorFlow01:梯度下降
    TensorFlow01:张量
    01深度学习介绍
    05Python爬虫:响应内容写入文件
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/11396776.html
Copyright © 2011-2022 走看看